Python连续小波变换分析①

涉及到代码不会的知识点均可在下链接查找:
小波变换介绍

小波时频(尺度图)的绘制原理与实现

pywt模块使用说明

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()

结果:
Python连续小波变换分析①

上一篇:大数据开发之Hive优化篇4-Hive的数据抽样-Sampling


下一篇:水塘抽样算法(Reservoir Sampling)