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

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

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

Моя вторая проблема заключается в том, чтобы найти и нарисовать эквивалент с частотой. В литературе я нахожу такую ​​формулу: Fa = Fc / (s*delta), где Fa — конечная частота, Fc — центральная частота вейвлета в Гц, s — масштаб, а delta — период дискретизации. Итак, для масштаба (если я найду связь с шириной) и дельты (=0,001 с) все в порядке, но с центральной частотой вейвлета все сложнее. В документации scipy я нахожу, что: «Фундаментальная частота этого вейвлета [вейвлета morlet] в Гц определяется как f = 2*s*w*r/M, где r — частота дискретизации [s — здесь коэффициент масштабирования, оконный от -s*2*pi до +s*2*pi. По умолчанию 1; w ширина; и 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

person ArnoNoo    schedule 02.04.2014    source источник
comment
Аналогичный вопрос здесь: dsp.stackexchange.com/q/15358/29   -  person endolith    schedule 05.04.2014


Ответы (1)


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

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

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

person danodonovan    schedule 25.06.2014