浅谈Python小波分析库Pywavelets的一点使用心得


Posted in Python onJuly 09, 2019

本文介绍了Python小波分析库Pywavelets,分享给大家,具体如下:

# -*- coding: utf-8 -*- 
import numpy as np
import math
import matplotlib.pyplot as plt
import pandas as pd
import datetime 
from scipy import interpolate
from pandas import DataFrame,Series

import numpy as np 
import pywt 

data = np.linspace(1, 4, 7) 

# pywt.threshold方法讲解: 
#        pywt.threshold(data,value,mode ='soft',substitute = 0 ) 
#        data:数据集,value:阈值,mode:比较模式默认soft,substitute:替代值,默认0,float类型 

#data:  [ 1.  1.5 2.  2.5 3.  3.5 4. ] 
#output:[ 6.  6.  0.  0.5 1.  1.5 2. ] 
#soft 因为data中1小于2,所以使用6替换,因为data中第二个1.5小于2也被替换,2不小于2所以使用当前值减去2,,2.5大于2,所以2.5-2=0.5..... 

print(pywt.threshold(data, 2, 'soft',6))  


#data:  [ 1.  1.5 2.  2.5 3.  3.5 4. ] 
#hard data中绝对值小于阈值2的替换为6,大于2的不替换 
print (pywt.threshold(data, 2, 'hard',6)) 


#data:  [ 1.  1.5 2.  2.5 3.  3.5 4. ] 
#data中数值小于阈值的替换为6,大于等于的不替换 
print (pywt.threshold(data, 2, 'greater',6) )

print (data )
#data:  [ 1.  1.5 2.  2.5 3.  3.5 4. ] 
#data中数值大于阈值的,替换为6 
print (pywt.threshold(data, 2, 'less',6) )

[6. 6. 0. 0.5 1. 1.5 2. ]
[6. 6. 2. 2.5 3. 3.5 4. ]
[6. 6. 2. 2.5 3. 3.5 4. ]
[1. 1.5 2. 2.5 3. 3.5 4. ]
[1. 1.5 2. 6. 6. 6. 6. ]

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt

import pywt
import pywt.data


ecg = pywt.data.ecg()

data1 = np.concatenate((np.arange(1, 400),
            np.arange(398, 600),
            np.arange(601, 1024)))
x = np.linspace(0.082, 2.128, num=1024)[::-1]
data2 = np.sin(40 * np.log(x)) * np.sign((np.log(x)))

mode = pywt.Modes.smooth


def plot_signal_decomp(data, w, title):
  """Decompose and plot a signal S.
  S = An + Dn + Dn-1 + ... + D1
  """
  w = pywt.Wavelet(w)#选取小波函数
  a = data
  ca = []#近似分量
  cd = []#细节分量
  for i in range(5):
    (a, d) = pywt.dwt(a, w, mode)#进行5阶离散小波变换
    ca.append(a)
    cd.append(d)

  rec_a = []
  rec_d = []

  for i, coeff in enumerate(ca):
    coeff_list = [coeff, None] + [None] * i
    rec_a.append(pywt.waverec(coeff_list, w))#重构

  for i, coeff in enumerate(cd):
    coeff_list = [None, coeff] + [None] * i
    if i ==3:
      print(len(coeff))
      print(len(coeff_list))
    rec_d.append(pywt.waverec(coeff_list, w))

  fig = plt.figure()
  ax_main = fig.add_subplot(len(rec_a) + 1, 1, 1)
  ax_main.set_title(title)
  ax_main.plot(data)
  ax_main.set_xlim(0, len(data) - 1)

  for i, y in enumerate(rec_a):
    ax = fig.add_subplot(len(rec_a) + 1, 2, 3 + i * 2)
    ax.plot(y, 'r')
    ax.set_xlim(0, len(y) - 1)
    ax.set_ylabel("A%d" % (i + 1))

  for i, y in enumerate(rec_d):
    ax = fig.add_subplot(len(rec_d) + 1, 2, 4 + i * 2)
    ax.plot(y, 'g')
    ax.set_xlim(0, len(y) - 1)
    ax.set_ylabel("D%d" % (i + 1))


#plot_signal_decomp(data1, 'coif5', "DWT: Signal irregularity")
#plot_signal_decomp(data2, 'sym5',
#          "DWT: Frequency and phase change - Symmlets5")
plot_signal_decomp(ecg, 'sym5', "DWT: Ecg sample - Symmlets5")


plt.show()

72
5

浅谈Python小波分析库Pywavelets的一点使用心得

将数据序列进行小波分解,每一层分解的结果是上次分解得到的低频信号再分解成低频和高频两个部分。如此进过N层分解后源信号X被分解为:X = D1 + D2 + … + DN + AN 其中D1,D2,…,DN分别为第一层、第二层到等N层分解得到的高频信号,AN为第N层分解得到的低频信号。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python程序员面试中被问的最多的10道题
Dec 05 Python
python requests 测试代理ip是否生效
Jul 25 Python
对python Tkinter Text的用法详解
Oct 11 Python
pycharm: 恢复(reset) 误删文件的方法
Oct 22 Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 Python
对Python3使运行暂停的方法详解
Feb 18 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
Python csv模块使用方法代码实例
Aug 29 Python
python opencv实现信用卡的数字识别
Jan 12 Python
Python类和实例的属性机制原理详解
Mar 21 Python
Python 制作查询商品历史价格的小工具
Oct 20 Python
Python Matplotlib绘制条形图的全过程
Oct 24 Python
python basemap 画出经纬度并标定的实例
Jul 09 #Python
python实现列表中最大最小值输出的示例
Jul 09 #Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 #Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 #Python
深入了解Python枚举类型的相关知识
Jul 09 #Python
Python 的AES加密与解密实现
Jul 09 #Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 #Python
You might like
发一个php简单的伪原创程序,配合商城采集用的
2010/10/12 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
pyramid配置session的方法教程
2013/11/27 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
python3爬虫怎样构建请求header
2018/12/23 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
公司户外活动总结
2014/07/04 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js