浅谈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多进程实现进程间通信实例
Nov 24 Python
Python 快速实现CLI 应用程序的脚手架
Dec 05 Python
python增加矩阵维度的实例讲解
Apr 04 Python
django的登录注册系统的示例代码
May 14 Python
python实现雨滴下落到地面效果
Jun 21 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
python 函数中的内置函数及用法详解
Jul 02 Python
详解python实现数据归一化处理的方式:(0,1)标准化
Jul 17 Python
python的命名规则知识点总结
Oct 04 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
php mysql数据库操作分页类
2008/06/04 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
解析isset与is_null的区别
2013/08/09 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
Python文件和流(实例讲解)
2017/09/12 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
python3字符串操作总结
2019/07/24 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
2014年端午节活动方案
2014/03/11 职场文书
购房意向书
2014/08/30 职场文书
办公用品管理制度
2015/08/04 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
MySQL 全文检索的使用示例
2021/06/07 MySQL
django中websocket的具体使用
2022/01/22 Python
python 闭包函数详细介绍
2022/04/19 Python