浅谈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判断图片宽度和高度后删除图片的方法
May 22 Python
socket + select 完成伪并发操作的实例
Aug 15 Python
Django中间件基础用法详解
Jul 18 Python
Python3的socket使用方法详解
Feb 18 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
django ORM之values和annotate使用详解
May 19 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
python db类用法说明
Jul 07 Python
Python趣味入门教程之循环语句while
Aug 26 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 Python
Python如何让字典保持有序排列
Apr 29 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
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
mongodb和php的用法详解
2019/03/25 PHP
Jquery cookie操作代码
2010/03/14 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
深入理解JavaScript 参数按值传递
2017/05/24 Javascript
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
基于python实现名片管理系统
2018/11/30 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
Python 转换文本编码实现解析
2019/08/27 Python
Django之路由层的实现
2019/09/09 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
python连接mysql有哪些方法
2020/06/24 Python
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
搞笑征婚广告词
2014/03/17 职场文书
文秘自荐信
2014/06/28 职场文书
安全责任书模板
2014/07/22 职场文书
先进教师个人总结
2015/02/11 职场文书
小学思品教学反思
2016/02/20 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
SpringBoot详解执行过程
2022/07/15 Java/Android