涉及到代码不会的知识点均可在下链接查找:
小波变换介绍
Python Matplotlib add_subplot 和 subplots_adjust详解及代码详细说明 配图片说明
matplotlib.pyplot contourf()函数的使用
pywavelets是其中一个比较常见的小波模块。
np.piecewise是根据条件筛选,然后执行例如lambda/函数等操作。参考链接np.piecewise
import numpy as np
import matplotlib.pyplot as plt
import pywt
sampling_rate = 1024#采样频率
t = np.arange(0,1.0,1.0/sampling_rate) #0-1.0之间的数,步长为1.0/sampling_rate
f1 = 100#频率
f2 = 200
f3 = 300
data = np.piecewise(t,[t<1,t<0.8,t<0.3],
[lambda t : np.sin(2 * np.pi * f1 * t),
lambda t : np.sin(2 * np.pi * f2 * t),
lambda t : np.sin(2 * np.pi * f3 * t)])
wavename = "cgau8" #小波函数
totalscal = 256 #totalscal是对信号进行小波变换时所用尺度序列的长度(通常需要预先设定好)
fc = pywt.central_frequency(wavename)#计算小波函数的中心频率
cparam = 2 * fc * totalscal #常数c
scales = cparam/np.arange(totalscal,1,-1) #为使转换后的频率序列是一等差序列,尺度序列必须取为这一形式(也即小波尺度)
[cwtmatr, frequencies] = pywt.cwt(data,scales,wavename,1.0/sampling_rate)#连续小波变换模块
plt.figure(figsize=(8, 4))
plt.subplot(211) #第一整行
plt.plot(t, data)
plt.xlabel(u"time(s)")
plt.title(u"300Hz 200Hz 100Hz Time spectrum")
plt.subplot(212) #第二整行
plt.contourf(t, frequencies, abs(cwtmatr))
plt.ylabel(u"freq(Hz)")
plt.xlabel(u"time(s)")
plt.subplots_adjust(hspace=0.4) #调整边距和子图的间距 hspace为子图之间的空间保留的高度,平均轴高度的一部分
plt.show()
结果: