Что эквивалентно cwtft() Matlab в Python? (непрерывное вейвлет-преобразование Морле)

Я пытаюсь реализовать вейвлет-преобразование Морле, как это делает Matlab, но я не смог найти эквивалентную функцию в python. Я хочу реализовать это так:

s0  = 6/fs;  % smallest scale
ds = 0.001; % spacing between scales
NbSc = 3000; % number of scales
SCA = {s0,ds,NbSc, 'lin'}; % specify scales
cwtstruct = cwtft({data, 1/fs},'scales',SCA);

и получить те же результаты, что и Matlab cwtstruct.

Я уже видел PyWavelets, но он не позволяет вам указывать масштабы таким образом и не дает таких же результатов.


person Alejandro Molinas    schedule 13.09.2018    source источник


Ответы (1)


Поймите, что это старо, но если вам интересно, это должно сработать или, по крайней мере, помочь вам начать.

Я не уверен, какие именно выходные данные вы ищете, но Wxx - это скалограмма (двумерный массив в частотно-временном пространстве, аналогичный спектрограмме).

Если вам нужны фазовый угол и модуль, как показано на странице справки Matlab, вы можете использовать следующий вейвлет: 'cmor30.0-60000.0'

Где 30 — желаемая полоса пропускания (например, ширина окна БПФ), а 60000 — центральная частота вейвлета.

import pywt
import numpy as np

fs=1e3
s0=6/fs
smax=3000
wave='morl'
scales=np.arange(s0,smax,1/fs)
Wxx,freq=pywt.cwt(data,scales,wave,sampling_period=1/fs)
freq=freq*fs
person NRG    schedule 16.05.2019