Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 2, 2010 22:16:33

PythonLive
От:
Зарегистрирован: 2010-12-02
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование функции scipy.signal.boxcar

Добрый день!

Столкнулся с проблемой неполного описания функции scipy.signal.boxcar в официальных мануалах и в недостатке примеров на данную тему с практической точки зрения.

Официальные мануалы гласят:

———————————————
boxcar(M, sym = 1)
The M-point boxcar window.
———————————————
Если более подробно: эта функция выполняет оконное преобразование Фурье, путем построение прямоугольного окна.
Параметры: M - число отсчетов
sym - симметрия (1 - да, 0 - нет).
Вот в принципе и все что удалось нарыть по этому вопросу. Но факт остается фактом - как применить данную функцию на практике, для решения задачи анализа гармонического состава сигнала (состоящего, например, из нескольких гармоник и наложенного шума).
А имеено, как применить к данному сигналу.

Вот кусок кода, который генерирует сигнал из 3-х гармоник, накладывает шум.
После этого, необходимо к полученному сигналу применить оконное преобразование Фурье (прямоугольное окно).
Из полученных результатов будет понятно как во времени распределены гармонические составляющие сигнала.

from pylab import *
from matplotlib import pylab
from scipy import *
from scipy.signal import *
import random
# 100 000 отсчетов сигналов на интервале в 0,1 секунду
dt = 0.000001
t = arange(0.0, 0.1, dt)
# Три гармонических сигналов единичной амплитуды
s1 = sin(2*pi*50000*t)
s2 = sin(2*pi*20000*t)
s3 = sin(2*pi*40000*t)
#Создание масок и генерация случайных промежутков времени
pr = random.random()
r1= pr/100
r2 = r1+((random.random() * 8 + 2) / 100)
mask = where(logical_and(t>r1, t<r2), 1.0, 0.0)
s1 = s1 * mask

pr = random.random()
r1= pr/100
r2 = r1+((random.random() * 8 + 2) / 100)
mask = where(logical_and(t>r1, t<r2), 1.0, 0.0)
s2 = s2 * mask

pr = random.random()
r1= pr/100
r2 = r1+((random.random() * 8 + 2) / 100)
mask = where(logical_and(t>r1, t<r2), 1.0, 0.0)
s3 = s3 * mask

#Добавление шума с единичным среднеквадратичным отклонением
nse = 1*randn(len(t))
#Готовый сигнал есть сумма шума и трех составляющих
x = s1 + s2 + s3 + nse
#Вывод исходного графика с налоденным шумом
pylab.subplot (3, 1, 1)
pylab.plot(t,x)

Может кто в курсе, как к построенному сигналу применить scipy.signal.boxcar , чтобы выполнить поставленную задачу?



Офлайн

#2 Дек. 3, 2010 07:56:40

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Использование функции scipy.signal.boxcar

А с чего вы взяли, что boxcar - преобразование Фурье?
Это просто прямоугольная оконная функция на M точек.
FFT - отдельно



Офлайн

#3 Дек. 3, 2010 18:30:08

PythonLive
От:
Зарегистрирован: 2010-12-02
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование функции scipy.signal.boxcar

Именно, оказалось необходими вручную для каждого окна выполнять преобразование фурье (в цикле).



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version