python小波特征提取_Python 小波包变换,小波包能量特征提取 代码
1. 小波外部包下载
要下载两个包:
PyWavelets和Matplotlib(要运行PyWavelets的所有测试,您还需要安装 Matplotlib软件包。)
安装方法:
pip install PyWavelets
pip install Matplotlib
相关链接:
PyWavelets官网:里面有很多的API文档,有小波(小波家族,内置小波等),离散小波变换,逆小波变换等等
小波包的相关用法实例
2. 小波包的使用
2.1 导入相关的包
下面的导入的包中主要是pywt和matplotlib
importnumpy as npimportmatplotlib.pyplot as pltimportosfrom sklearn importpreprocessingimportpywtimportpywt.dataimport pandas as pd
2.2 小波包各节点按照频率由低到高
wp = pywt.WaveletPacket(data=tr, wavelet='db1',mode='symmetric',maxlevel=3)#根据频段频率(freq)进行排序
print([node.path for node in wp.get_level(1, 'freq')])print([node.path for node in wp.get_level(2, 'freq')])print([node.path for node in wp.get_level(3, 'freq')])
代码中tr表示输入的一维数据,执行结果如下
['a', 'd']
['aa', 'ad', 'dd', 'da']
['aaa', 'aad', 'add', 'ada', 'dda', 'ddd', 'dad', 'daa']
2.3 打印小波家族
pywt.families()#pywt.families(short=False)
执行结果如下:
['haar', 'db', 'sym', 'coif', 'bior', 'rbio', 'dmey', 'gaus', 'mexh', 'morl', 'cgau', 'shan', 'fbsp', 'cmor']
2.4 小波包的分解
(1)小波包分解中关键方法:
wp = pywt.WaveletPacket(data=tr, wavelet='db1',mode='symmetric',maxlevel=3)
该方法输入原始信号tr, 小波函数'db1',模式'symmetric',以及最大的分解层数为3。返回wp是小波包树,根据小波包树我们可以提取分解系数。
(2)提取分解系数:
下面aaa是小波包变换第三层第一个的分解系数
aaa = wp['aaa'].data
所以可以使用下面的方法提取每一层的每个节点的小波系数,当然这个方法不太方便,需要一个一个的写,后面有更好的方法:
a = wp['a'].data #第1个节点
d = wp['d'].data #第2个节点#第二层
aa = wp['aa'].data
ad= wp['ad'].data
dd= wp['dd'].data
da= wp['da'].data#第三层
aaa = wp['aaa'].data
aad= wp['aad'].data
ada= wp['add'].data
add= wp['ada'].data
daa= wp['dda'].data
dad= wp['ddd'].data
dda= wp['dad'].data
ddd= wp['daa'].data
(3) 作小波树图,下面代码中没有优化,后面做了优化:
plt.figure(figsize=(15, 10))
plt.subplot(4,1,1)
plt.plot(tr)#第一层
plt.subplot(4,2,3)
plt.plot(a)
plt.subplot(4,2,4)
plt.plot(d)#第二层
plt.subplot(4,4,9)
plt.plot(aa)
plt.subplot(4,4,10)
plt.plot(ad)
plt.subplot(4,4,11)
plt.plot(dd)
plt.subplot(4,4,12)
plt.plot(da)#第三层
plt.subplot(4,8,25)
plt.plot(aaa)
plt.subplot(4,8,26)
plt.plot(aad)
plt.subplot(4,8,27)
plt.plot(add)
plt.subplot(4,8,28)
plt.plot(ada)
plt.subplot(4,8,29)
plt.plot(dda)
plt.subplot(4,8,30)
plt.plot(ddd)
plt.subplot(4,8,31)
plt.plot(dad)
plt.subplot(4,8,32)
plt.plot(daa)
下图中使用的是心电信号,需要注意的是有些图形的刻度值太长嵌入了图中,结果图:
(4) 代码优化,使用的wpd_plt(signal,n)将上面的代码优化和封装了,signal代表输入信号,n代表分解层数:
defwpd_plt(signal,n):#wpd分解
wp = pywt.WaveletPacket(data=signal, wavelet='db1',mode='symmetric',maxlevel=n)#计算每一个节点的系数,存在map中,key为'aa'等,value为列表
map ={}
map[1] =signalfor row in range(1,n+1):
lev=[]for i in [node.path for node in wp.get_level(row, 'freq')]:
map[i]=wp[i].data#作图
plt.figure(figsize=(15, 10))
plt.subplot(n+1,1,1) #绘制第一个图
plt.plot(map[1])for i in range(2,n+2):
level_num= pow(2,i-1) #从第二行图开始,计算上一行图的2的幂次方
#获取每一层分解的node:比如第三层['aaa', 'aad', 'add', 'ada', 'dda', 'ddd', 'dad', 'daa']
re = [node.path for node in wp.get_level(i-1, 'freq')]for j in range(1,level_num+1):
plt.subplot(n+1,level_num,level_num*(i-1)+j)
plt.plot(map[re[j-1]]) #列表从0开始
2.5 小波包能量特征提取
n = 3re= [] #第n层所有节点的分解系数
for i in [node.path for node in wp.get_level(n, 'freq')]:
re.append(wp[i].data)#第n层能量特征
energy =[]for i inre:
energy.append(pow(np.linalg.norm(i,ord=None),2))#for i in energy:#print(i)
绘制小波能量特征柱形图,注意这里的节点顺序不是自然分解的顺序,而是频率由低到高的顺序:
#创建一个点数为 8 x 6 的窗口, 并设置分辨率为 80像素/每英寸
plt.figure(figsize=(10, 7), dpi=80)#再创建一个规格为 1 x 1 的子图#plt.subplot(1, 1, 1)#柱子总数
N = 8values=energy#包含每个柱子下标的序列
index =np.arange(N)#柱子的宽度
width = 0.45
#绘制柱状图, 每根柱子的颜色为紫罗兰色
p2 = plt.bar(index, values, width, label="num", color="#87CEFA")#设置横轴标签
plt.xlabel('clusters')#设置纵轴标签
plt.ylabel('number of reviews')#添加标题
plt.title('Cluster Distribution')#添加纵横轴的刻度
plt.xticks(index, ('7', '8', '9', '10', '11', '12', '13', '14'))#plt.yticks(np.arange(0, 10000, 10))#添加图例
plt.legend(loc="upper right")
plt.show()
作图如下:
python小波特征提取_Python 小波包变换,小波包能量特征提取 代码相关推荐
- python小波去噪_python小波变换去噪
一,小波去噪原理: 信号产生的小波系数含有信号的重要信息,将信号经小波分解后小波系数较大,噪声的小波系数较小,并且噪声的小波系数要小于信号的小波系数,通过选取一个合适的阀值,大于阀值的小波系数被认为是 ...
- 小波调研(三):小波阈值去噪分析
小波阈值去噪分析 数据挖掘流程 传统的去噪方法根据噪声能量一般集中于高频,而信号频谱分布于一个有限区间的特点,用傅里叶变换将含噪信号变换到频域,然后采用低通滤波器进行滤波.但基于傅里叶变换的去噪方法不 ...
- 小波自适应阈值选取python_小波去噪阈值如何选取_小波阈值分析 - 全文
1.小波阈值去噪法的流程如下所示: 小波图像去噪就是根据信号和噪声的小波系数在不同尺度上具有不同性质的原理,利用相应的数学工具构造系数选择方式,对带噪信号的小波系数进行处理.小波去噪过程就是利用小波分 ...
- 单片机c语言小波阈值降噪,小波阈值去噪的基本原理_小波去噪阈值如何选取
小波阈值去噪的基本原理 小波阈值去噪的基本思想是先设置一个临界阈值λ,若小波系数小于λ,认为该系数主要由噪声引起,去除这部分系数;若小波系数大于λ,则认为此系数主要是由信号引起,保留这部分系数,然后对 ...
- gabor小波matlab,用matlab实现gabor小波对图片的纹理特征提取【转】
用matlab实现gabor小波对图片的纹理特征提取[转] (2009-04-27 14:35:41) 过程如下: (1)在matlab中,用gaborfilter.m程序实现对三种农作物(小麦.棉花 ...
- python微信小程序爬虫_Python爬取微信小程序实战(通用)
背景介绍 最近遇到一个需求,大致就是要获取某个小程序上的数据.心想小程序本质上就是移动端加壳的浏览器,所以想到用Python去获取数据.在网上学习了一下如何实现后,记录一下我的实现过程以及所踩过的小坑 ...
- 王小波的灾难——由《王小波全集》想到的
在我的书架里,有王小波书的各种版本,最喜欢的是中国青年出版社的4卷本<王小波文集>和华夏出版社的<黄金时代>.前者是精装,系王小波故后出版的影响最大的选本:后者是平装,纸张和封 ...
- 【老生谈算法】matlab实现医学图像小波去噪算法源码——医学图像小波去噪
医学图像小波去噪的MATLAB实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]医学图像小波去噪的MATLAB实现.doc ...
- 小波相干wtc matlab,小波分析与小波相干代码
[实例简介] 小波分析和小波相关的实验代码(matlab),可用于长时间序列数据的变化周期特点分析和两个或者多个时间序列数据的相关性分析(文件夹里包含一份空气质量的实验数据,可用于参照). [实例截图 ...
- python局部静态变量_python静态变量如何设置?这样的代码你会不会写
[摘要]众所周知,Python语言并不支持静态变量,在python中也有着不可或缺的地位,那么python静态变量如何设置?这样的代码你会不会写,这些内容也许对python学习有帮助,毕竟实践出真知, ...
最新文章
- 何时使用margin和padding?
- 专业嵌入式软件开发——全面走向高质高效编程(含DVD光盘1张)
- 三星手机Android9和10的区别,三星Galaxy S10+ VS 小米9 拍照深度对比评测:神仙打架...
- docker --link容器互联
- RedrawWindow, UpdateWindow,InvalidateRect 用法
- 设计模式之静态代理模式实战
- SVN版本管理trunk及branch相关merge操作
- C++ -- vector详解
- 大数据在零售业的应用
- 未捕获异常string was not recognized_给你代码:PHP7中的异常与错误处理
- 【TiChoo资讯站】
- 天下数据服务器搭建网站,王者天下架设教程1-服务端配置.doc
- Mac fliqlo 时钟屏保
- 英语各类词担任的句子成分
- Docker 搭建 LNMP镜像 + Wordpress
- container 和initContainers使用
- java开发设置用户头像_如何修改 WordPress 的用户默认头像?
- 我的2013----默默的积累
- 程序员《周易》入门一
- deep learning (深度学习)资源整理,非常全面【转】
热门文章
- 041_Popover弹出框
- 01_Mybatis入门
- 085_Document对象
- java panel 左对齐,将Shape的中心与JPanel的中心对齐 - java
- android layout include merge,Android 布局优化之include与merge
- java实现平衡二叉树(详细分析)
- ListView和RecyclerView的Adapter封装
- valorant服务器维护啥情况,valorant连不上服务器怎么办 valorant连不上服务器解决方法介绍...
- python模块使用_PYthon模块使用教程(最新).doc
- html+设置img+src属性值,javascript获取、设置修改img的src属性(get/setAttribute)