浅谈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正则表达式匹配ip地址实例
Oct 09 Python
简单谈谈python的反射机制
Jun 28 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
python学习基础之循环import及import过程
Apr 22 Python
Python中__slots__属性介绍与基本使用方法
Sep 05 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
浅谈Python 递归算法指归
Aug 22 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
python目标检测给图画框,bbox画到图上并保存案例
Mar 10 Python
python连接mysql有哪些方法
Jun 24 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 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 根据IP地址控制访问的代码
2010/04/22 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
2014/09/22 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
js限制文本框只能输入整数或者带小数点的数字
2015/04/27 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
Sortable.js拖拽排序使用方法解析
2016/11/04 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
python读文件的步骤
2019/10/08 Python
python异步Web框架sanic的实现
2020/04/27 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
澳大利亚相机之家:Camera House
2017/11/30 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
2014年母亲节寄语
2014/05/07 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
个人专业技术总结
2015/03/05 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
房屋产权证明书
2015/06/19 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
小学中队长竞选稿
2015/11/20 职场文书