Я пытаюсь нарисовать частотно-временной сигнал с дискретным временным сигналом (шаг дискретизации = 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