В Python Как построить тепловую зависимость времени от частотных компонентов, извлекаемых с помощью вейвлета из пакета PyWavelets - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь извлечь частотные составляющие одномерного сигнала, используя технику вейвлета, используя пакет PyWavelets. Пример получен из следующей ссылки , а следующая тепловая карта является предполагаемым конечным результатом.

Figure 1

Рисунок 1

import numpy as np
from math import pi
import matplotlib.pyplot as plt
import pywt

time= np.arange(0,1-1/2000,1/2000)
Fs = 1/2000
x1 = np.sin(50*pi*time)*np.exp(-50*pi*(time-0.2)**2)
x2 = np.sin(50*pi*time)*np.exp(-100*pi*(time-0.5)**2)
x3 = 2*np.cos(140*pi*time)*np.exp(-50*pi*(time-0.2)**2)
x4 = 2*np.sin(140*pi*time)*np.exp(-80*pi*(time-0.8)**2)
signal= x1+x2+x3+x4
plt.plot(time,signal)
plt.title('Superimposed Signal')

Некоторые автор пытался решить аналогичную проблему на платформе Python, но он использует разные вейвлет-пакеты. Принимая во внимание, что я попытался решить эту проблему с помощью PyWavelet.

Я подготовил следующий код для решения проблемы. Однако выходные данные (рисунок 2) не совпадают с рисунком 1. В частности, растяжение частоты и времени вдоль оси y и оси x полностью отличается от показанного на рисунке 1.

enter image description here

Рисунок 2

Я действительно ценю, если кто-то может пролить свет на то, где можно изменить код, чтобы получить такой же рендеринг, как на рисунке 1. ЭтоСтоит отметить, что значение для оси X является правильным и не является проблемой для этой нити

## Wavelet Extrac
dt=time[1]-time[0]
scales = np.arange(1, 128)
waveletname = 'cmor'
cmap = plt.cm.seismic
[coefficients, frequencies] = pywt.cwt(signal, scales, waveletname, dt)

Plot graph

power = (abs(coefficients)) ** 2

Plot Figure 2

    fig, ax = plt.subplots(figsize=(5, 5))
plt.ylim(0, 100)
im = ax.contourf(time, frequencies, power, 127, extend='both',cmap=cmap)
cbar = fig.colorbar(im)
...