一.小波去噪的原理

信号产生的小波系数含有信号的重要信息,将信号经小波分解后小波系数较大,噪声的小波系数较小,并且噪声的小波系数要小于信号的小波系数,通过选取一个合适的阀值,大于阀值的小波系数被认为是有信号产生的,应予以保留,小于阀值的则认为是噪声产生的,置为零从而达到去噪的目的。

小波阀值去噪的基本问题包括三个方面:小波基的选择,阀值的选择,阀值函数的选择。

(1) 小波基的选择:通常我们希望所选取的小波满足以下条件:正交性、高消失矩、紧支性、对称性或反对称性。但事实上具有上述性质的小波是不可能存在的,因为小波是对称或反对称的只有Haar小波,并且高消失矩与紧支性是一对矛盾,所以在应用的时候一般选取具有紧支的小波以及根据信号的特征来选取较为合适的小波。

(2) 阀值的选择:直接影响去噪效果的一个重要因素就是阀值的选取,不同的阀值选取将有不同的去噪效果。目前主要有通用阀值(VisuShrink)、SureShrink阀值、Minimax阀值、BayesShrink阀值等。

(3) 阀值函数的选择:阀值函数是修正小波系数的规则,不同的反之函数体现了不同的处理小波系数的策略。最常用的阀值函数有两种:一种是硬阀值函数,另一种是软阀值函数。还有一种介于软、硬阀值函数之间的Garrote函数。

另外,对于去噪效果好坏的评价,常用信号的信噪比(SNR)与估计信号同原始信号的均方根误差(RMSE)来判断。

二,在python中使用小波分析进行阈值去噪声,使用pywt.threshold函数

#coding=gbk

#使用小波分析进行阈值去噪声,使用pywt.threshold

import pywt

import numpyasnp

import pandasaspd

import matplotlib.pyplotasplt

import math

data= np.linspace(1, 10, 10)

print(data)

# [1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]

# pywt.threshold(data, value, mode, substitute) mode 模式有4种,soft, hard, greater, less; substitute是替换值

可以点进函数里看,data/np.abs(data) * np.maximum(np.abs(data) - value, 0)

data_soft= pywt.threshold(data=data, value=6, mode='soft', substitute=12)

print(data_soft)

# [12. 12. 12. 12. 12. 0. 1. 2. 3. 4.] 将小于6 的值设置为12, 大于等于6 的值全部减去6

data_hard= pywt.threshold(data=data, value=6, mode='hard', substitute=12)

print(data_hard)

# [12. 12. 12. 12. 12. 6. 7. 8. 9. 10.] 将小于6 的值设置为12, 其余的值不变

data_greater= pywt.threshold(data, 6, 'greater', 12)

print(data_greater)

# [12. 12. 12. 12. 12. 6. 7. 8. 9. 10.] 将小于6 的值设置为12,大于等于阈值的值不变化

data_less= pywt.threshold(data, 6, 'less', 12)

print(data_less)

# [1. 2. 3. 4. 5. 6. 12. 12. 12. 12.] 将大于6 的值设置为12, 小于等于阈值的值不变

三,在python中使用ecg心电信号进行小波去噪实验

#-*-coding:utf-8-*-import matplotlib.pyplotasplt

import pywt

import math

import numpyasnp

#getData

ecg=pywt.data.ecg() #生成心电信号

index=[]

data=[]

coffs=[]for i in range(len(ecg)-1):

X=float(i)

Y=float(ecg[i])

index.append(X)

data.append(Y)

#create waveletobjectand define parameters

w=pywt.Wavelet('db8')#选用Daubechies8小波

maxlev=pywt.dwt_max_level(len(data),w.dec_len)

print("maximum level is"+str(maxlev))

threshold=0 #Threshold forfiltering

#Decompose into wavelet components,to the level selected:

coffs=pywt.wavedec(data,'db8',level=maxlev) #将信号进行小波分解for i in range(1,len(coffs)):

coffs[i]=pywt.threshold(coffs[i],threshold*max(coeffs[i]))

datarec=pywt.waverec(coffs,'db8')#将信号进行小波重构

mintime=0maxtime=mintime+len(data)

print(mintime,maxtime)

plt.figure()

plt.subplot(3,1,1)

plt.plot(index[mintime:maxtime], data[mintime:maxtime])

plt.xlabel('time (s)')

plt.ylabel('microvolts (uV)')

plt.title("Raw signal")

plt.subplot(3, 1, 2)

plt.plot(index[mintime:maxtime], datarec[mintime:maxtime])

plt.xlabel('time (s)')

plt.ylabel('microvolts (uV)')

plt.title("De-noised signal using wavelet techniques")

plt.subplot(3, 1, 3)

plt.plot(index[mintime:maxtime],data[mintime:maxtime]-datarec[mintime:maxtime])

plt.xlabel('time (s)')

plt.ylabel('error (uV)')

plt.tight_layout()

plt.show()

python去噪函数_Python小波变换去噪相关推荐

  1. python not函数_python 函数

    1 为什么使用函数 在没有接触函数时,有时候需要将一个功能多次写,如果需要修改其中一个变量,则需要把所有实现该功能的代码一处一处改.不利于代码维护,代码量大了,组织结构也会很不清晰. 所以总结不使用函 ...

  2. python include函数_python 库函数

    python的内建函数和库函数的区别是什么? [区别]:标准库函数都需要import xxx才能取得.内建函数都在__builtins__里面,在global里直接就能用. [补充]:1.python ...

  3. python islower函数_python字符串是否是小写-python 字符串小写-python islower函数-python islower函数未定义-嗨客网...

    Python字符串是否是小写教程 在开发过程中,有时候我们需要判断一个 Python islower()函数详解 语法 str.islower() -> bool 参数 参数 描述 str 表示 ...

  4. python agg函数_Python Pandas Series.agg()用法及代码示例

    Python是进行数据分析的一种出色语言,主要是因为以数据为中心的python软件包具有奇妙的生态系统. Pandas是其中的一种,使导入和分析数据更加容易. Pandas Series.agg()用 ...

  5. python findall函数_python正则表达式之中的findall函数是什么?

    在这篇文章之中我们来了解一下关于python正则表达式的相关知识,有些朋友可能是刚刚接触到python这一编程语言,对这一方面不是特别的了解,在接下来这篇文章将会来带大家来了解关于正则表达式中的pyt ...

  6. python log函数_Python log10() 函数

    Python log10() 函数 描述 log10() 方法返回以10为基数的x对数. 语法 以下是 log10() 方法的语法:import math math.log10( x ) 注意:log ...

  7. python value函数_python 函数基础

    什么是函数? 函数在Python中是最基本的程序结构,用来最大化地让我们的代码进行复用.简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行.Python中的函数在其他 ...

  8. python引用函数_python 调用函数

    Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数.可以直接从Python的官方网站查看文档: 也可以在交互式命令行 ...

  9. python sep函数_Python中带有print()函数的sep参数

    python sep函数 sep parameter stands for separator, it uses with the print() function to specify the se ...

最新文章

  1. blockUI 使用小技巧
  2. oracle is删除表数据库,rman删除expired备份提示“This command is forbidden”
  3. 网站建设PHP中mysql和mysqli的区别
  4. ERP与SCM之区别
  5. Android Studio开发基础之Context用法说明
  6. JENKINS使用DOCKER运行PYTEST并且出ALLURE报告
  7. 理解SVN中trunk,branches,tags
  8. 【交换机】配置RNStrack的功能原理是什么?
  9. UIWindow的rootViewController的问题
  10. iPad和iPhone上的应用程序图标
  11. 【机器学习-斯坦福】学习笔记7 - 最优间隔分类器问题
  12. Minkels公司在欧洲推出迷你数据中心产品
  13. 重命名Docker容器名称
  14. VAssistX + VS2017 常用快捷键
  15. 火焰之纹章java武器代码_《火焰纹章回声:另一个英雄王》金手指全代码一览 代码大全...
  16. h5游戏引擎有哪些?h5制作模板游戏的教程和流程是什么?
  17. 计算机主机无法开机故障原因,电脑电源保护无法开机怎么办
  18. Java中成员变量和局部变量在内存中的分配
  19. AT32看门狗WDT使用方法
  20. 女人四十学计算机有用吗,四十岁的女人,开始学做美容工作,有前途吗

热门文章

  1. 「医疗知识图谱」到「综合性医疗大脑」
  2. Windows在虚拟机安装苹果MacOS系统
  3. atom安装插件被墙问题
  4. android实现gps测速仪,GPS测速仪,一个APP就可以搞定
  5. 从0开始用Java做智慧农业物联网
  6. JavaScript遍历数组,附5个案例
  7. IDEA2017.3破解(亲测有效)
  8. socket入门分析
  9. Linux系统编程4-网络编程
  10. 宝塔实测搭建开源PHP通用CMS建站系统源码