Непрерывное вейвлет-преобразование с помощью Scipy.signal (Python): что такое параметр "widths" в функции cwt()? (Время-частота)

Я пытаюсь нарисовать частотно-временной сигнал с дискретным временным сигналом (шаг выборки = 0,001 с). Я использую Python и библиотеку Scipy.signal. Я использую функцию cwt(data, wavelet, widths), которая возвращает матрицу, для выполнения непрерывного вейвлет-преобразования со сложным морлет-вейвлетом (или вейвлетом Габора). К сожалению, не так много документации об этом использовании. Лучшее, что я нашел: - это для Matlab (я пытаюсь найти тот же результат масштаба-времени), но у меня, естественно, нет доступа к тем же функциям, - и это объясняет, что такое непрерывное вейвлет-преобразование, без подробностей о параметрах вейвлета,

Первый шаг: Получить сигнал трансляции масштаба. Сомневаюсь, что я непосредственно связал массив "widths" с массивом возможных различных масштабов. Потому что я не понял, что такое ширина параметра, если это не масштаб. Возможно, вы скажете мне "это ширина вашего текущего вейвлета"! Но даже сейчас я не уверен, как ширина ссылки с масштабом... В документации Morlet на Scipy, похоже, что ссылка может быть: "s: Коэффициент масштабирования, с окном от -s*2*pi до +s*2*pi", поэтому я подумал, что width = 4*pi*scale (width=width of the window). Но когда я рисую вейвлеты, увеличивается масштаб, больше уменьшается визуальная ширина вейвлета...

Моя вторая проблема - найти и нарисовать эквивалент по частоте. В литературе я нахожу эту формулу: Fa = Fc / (s*delta), где Fa - конечная частота, Fc - центральная частота вейвлета в Гц, s шкала и дельта периода выборки. Итак, хорошо для масштаба (если я найду связь с шириной) и дельты (=0,001 сек), но это сложнее с центральной частотой вейвлета. В документации scipy я нахожу, что: "Основная частота этого вейвлета [морлета вейвлет] в Гц задается как f = 2*s*w*r / M, где r - частота дискретизации [s здесь здесь Коэффициент масштабирования, оконный от -s * 2 * пи до + s * 2 * пи. По умолчанию 1; ш ширина; и M длина вейвлета]. Я думаю, что это центральная частота, не так ли?

Спасибо

Вот мой исправленный код для cwt():

def MyCWT(data, wavelet, scales):

output = zeros([len(scales), len(data)], dtype=complex)

for ind, scale in enumerate(scales):

    window = scale*4*pi*10#Number of points to define correctly the wavelet
    waveletLength = min(window, len(data))#Number of points of the wavelet
    wavelet_data = wavelet(waveletLength, s=scale)#Need to precise w parameter???

    #To see the wavelets:
    plot(wavelet_data)
    xlabel('time (10^-3 sec)')
    ylabel('amplitude')
    title('Morlet Wavelet for scale='+str(scale)+'\nwidth='+str(window))
    show()

    #Concolution to calculate the current line for the current scale:
    z = convolve(data, wavelet_data, mode='same')

    i = 0
    for complexVal in z:
        output[ind][i] = complex(complexVal.real, complexVal.imag)         
        i+=1

return output

1 ответ

widths Параметр - это массив размеров ширины, до которого растягивается вейвлет, прежде чем сворачивать вейвлет с данными.

Вы должны выбрать диапазон, начиная со значения, немного меньшего ожидаемой ширины сигнала, до чуть большего. Чем больше значений вы предоставляете, тем медленнее вычисления, но выше разрешение.

Ознакомьтесь с документацией или ссылочной статьей Bioinformatics (2006) 22 (17): 2059-2065. doi: 10.1093 / bioinformatics / btl355 для получения дополнительной информации.

Другие вопросы по тегам