python小波变换去噪
admin
2023-07-07 13:44:06
0

  一,小波去噪原理:

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

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

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

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

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

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

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

  #coding=gbk

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

  import pywt

  import numpy as np

  import pandas as pd

  import matplotlib.pyplot as plt

  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_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心电信号进行小波去噪实验

  import matplotlib.pyplot as plt

  import pywt

  # Get data:

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

  index = []

  data = []

  for i in range(len(ecg)-1):

  X = float(i)

  Y = float(ecg[i])

  index.append(X)

  data.append(Y)

  # Create wavelet object and 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.04 # Threshold for filtering

  # Decompose into wavelet components, to the level selected:

  coeffs = pywt.wavedec(data, 'db8', level=maxlev) # 将信号进行小波分解

  plt.figure()

  for i in range(1, len(coeffs)):

  coeffs[i] = pywt.threshold(coeffs[i], threshold*max(coeffs[i])) # 将噪声滤波

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

  mintime = 0无锡人流多少钱 http://www.bhnfkyy.com/

  maxtime = mintime + len(data) + 1

  plt.figure()

  plt.subplot(2, 1, 1)

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

  plt.xlabel('time (s)')

  plt.ylabel('microvolts (uV)')

  plt.title("Raw signal")

  plt.subplot(2, 1, 2)

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

  plt.xlabel('time (s)')

  plt.ylabel('microvolts (uV)')

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

  plt.tight_layout()

  plt.show()

  运行结果如下:

  python小波变换去噪


相关内容

热门资讯

我国科学家为细胞信号“导航”开... 新华社济南5月31日电(记者张力元)人体细胞犹如一座精密的通信城市,每天都有大量“指令”穿梭传递,调...
极端大风突袭哈尔滨!过山车停摆... 极目新闻记者 詹钘5月31日,受强对流天气影响,哈尔滨国际会展中心体育场相关设施受到损坏,原计划当晚...
三原电缆取得电缆接头连接用防护... 国家知识产权局信息显示,上海三原电缆附件有限公司取得一项名为“一种电缆接头连接用防护结构”的专利,授...
原创 识... 还是那句话,机圈苦大屏久已…… 虽然大屏有大屏的美,但是小屏也有小屏的俏。在大屏旗舰占据主流的手机市...
玄戒技术取得分频电路专利,实现... 国家知识产权局信息显示,北京玄戒技术有限公司取得一项名为“分频电路、分频器、射频芯片和电子设备”的专...
为什么今年香会基调明显变了 5月29日—31日在新加坡举行的第23届香格里拉对话会(简称“香会”),见证着元首引领下大国关系继续...
成本几毛钱、假驱蚊液香精兑水,... 入夏升温,蚊虫进入活跃期,驱蚊防护成为民生刚需,《财经调查》持续接到消费者投诉,他们买到的多款网红驱...
越来越多80后90后,正在丧失... 六一儿童节到来之际,朋友圈里开始出现一种熟悉的热闹。有人晒出零食礼包,有人半开玩笑地向伴侣讨礼物,还...
洋保电子取得用于低温环境的电气... 国家知识产权局信息显示,洋保电子(太仓)有限公司取得一项名为“一种用于低温环境的电气柜”的专利,授权...
中日韩飞手争霸宁波!2026无... 潮新闻客户端 记者 陈冲 通讯员 朱凝 5月31日,2026小遛·无人机竞速世界杯(中国·宁波鄞州站...