1

在信号上使用 PyWavelets 和 Matplotbib.Specgram 可以用 pywt.dwt 然后 pywt.cwt 给出更详细的图。如何以类似的方式获得 pywt.cwt 规格图?

使用载重吨:

import pywt
import pywt.data
import matplotlib.pyplot as plot
from scipy import signal
from scipy.io import wavfile

bA, bD = pywt.dwt(datamean, 'db2')
powerSpectrum, freqenciesFound, time, imageAxis = plot.specgram(bA, NFFT =  387, Fs=100)

plot.xlabel('Time')
plot.ylabel('Frequency') 
plot.show()

使用此频谱图:

https://imgur.com/a/bYb8bBS

使用 cwt:

widths = np.arange(1,5)
coef, freqs = pywt.cwt(datamean, widths,'morl')
powerSpectrum, freqenciesFound, time, imageAxis = plot.specgram(coef, NFFT = 129, Fs=100)

plot.xlabel('Time')
plot.ylabel('Frequency') 
plot.show()   

使用此频谱图:

https://imgur.com/a/GIINzJp

为了获得更好的结果:

sig  = datamean
widths = np.arange(1, 31)
cwtmatr = signal.cwt(sig, signal.ricker, widths)

plt.imshow(cwtmatr, extent=[-1, 1, 1, 5], cmap='PRGn', aspect='auto',
       vmax=abs(cwtmatr).max(), vmin=-abs(cwtmatr).max())
plt.show()

使用此频谱图:

https://imgur.com/a/TnXqgGR

如何为 cwt(频谱图 2 和 3)获得与第一个类似的频谱图和样式?与第三个相比,第一个频谱图似乎有更多的细节。

4

1 回答 1

1

作为评论,这会更好,但由于我缺乏这样做的业力:

您不想用小波制作频谱图,而是要制作一个尺度图。您在上面所做的似乎是将您的数据投影到一个比例子空间(与频率相关),然后采用这些比例并找到它们的频率内容,这可能不是您想要的。

细节和近似系数是您想要直接使用的。不幸的是,AFAIK,PyWavelets 没有简单的绘图功能来为您执行此操作。Matlab 可以,如果我失败了,他们的帮助页面可能会很有启发性。

def scalogram(data):
    wave='db4'
    coeff=pywt.wavedec(data,wave)
    levels=len(coeff)
    lengths=[len(co) for co in coeff]
    col=np.max(lengths)
    im=np.ones([levels,col])
    col=col.astype(float)
    for level in range(levels):
        #print [lengths[level],col]
        y=coeff[level]
        if lengths[1+level]<col:
            x=col/(lengths[1+level]+1)*np.arange(1,len(y)+1)
            xi=np.linspace(0,int(col),int(col))
            yi=griddata(points=x,values=y,xi=xi,method='nearest')
        else:
            yi=y
        im[level,:]=yi
    im[im==0]=np.nan
    tiles=sum(lengths)-lengths[0]
    return im,tiles
Wxx,tiles=scalogram(data)
IM=plt.imshow(np.log10(abs(Wxx)),aspect='auto')
plt.show()

有更好的方法可以做到这一点,但它确实有效。这会产生一个类似于“Wxx”中的频谱图的方阵,并且瓦片只是时间频率瓦片数量的计数器,用于与 SFFT 中使用的数量进行比较。

我附上了一张这些瓷砖看起来像什么的图片 在此处输入图像描述

于 2019-08-26T12:31:59.467 回答