信号去噪是经常用到的信号预处理过程,以达到在保留原有信号真是信息的基础上尽可能低降低或者消除噪声,获得更高质量的信号,从而为下一步的处理奠定基础。

去噪方法可分为时域方法与频域方法。时域方法是指直接在原始信号上进行处理,比如均值滤波器、中值滤波器、EMD分解等方法。频域方法是指在信号的变换域进行去噪然后再恢复到时域得到去噪后的信号,比如小波变换、傅里叶变换等方法。

无论是一维信号还是二维信号其原理都是一样的,只不过实现上所有不同。这里主要记录一下我目前需要处理的一维信号的去噪。

噪声可分为加性噪声和乘性噪声两种形式,加性噪声一般假设其与原始信号无关,假设含噪信号为,其可表示为:

其中表示原始的干净信号,表示噪声信号。

而乘性噪声则假设噪声与信号有关,假如噪声和信号成正比,则含噪信号可表示为:

其中第二个噪声项是受原始信号影响的,原始信号的值越大,则噪声越大。

加性噪声的处理与计算都比较简单,所以一般均假设噪声为加性噪声。

基于小波变换的去噪方法其具体原理这里就不阐述了,其主要思想就是噪声在经过小波变换后的小波系数会远远小于原始信号的小波系数,因此可通过简单的阈值处理就能够去除绝大部分的噪声,同时又不会对原始信号造成很大的损失。对具体原理感兴趣的同学可以参考其他相关资料。

 

python 实现

使用python去噪,不需要我们自己动手实现相应的原理,安装相应的包即可完成。

首先安装小波变换的python包PyWavelets

pip install PyWavelets

安装好之后就可以直接使用,我们可通过定义去噪函数将去噪过程打包,假设去噪函数名为wavelet_denoising, 其去噪过程及参数设置代码如下:

def wavelet_denoising(signal):# signal: listwavelet_basis = 'db8'  # 此处选择db8小波基w = pywt.Wavelet(wavelet_basis) maxlevel = pywt.dwt_max_level(len(signal), w.dec_len) # 根据数据长度计算分解层数threshold = 0.1  # threshold for filteringcoeffs = pywt.wavedec(signal, wavelet_basis, level=maxlevel)  # 将信号进行小波分解# 使用阈值滤除噪声for i in range(1, len(coeffs)):coeffs[i] = pywt.threshold(coeffs[i], threshold*max(coeffs[i]))  # 将噪声滤波# pywt.threshold 方法有三种阈值模式:硬阈值、软阈值、软硬结合# 默认为soft 软阈值模式,其调用格式为# pywt.threshold(signal, threshold_value, mode='soft', substitute=0)# 处理后值为 signal/np.abs(signal) * np.maximum(np.abs(signal) - threshold_value, 0)# 具体可参考pywavelets官方文档的说明# 重建信号signalrec= pywt.waverec(coeffs, wavelet_basis)return signalrec

通过调用wavelet_denoising方法,即可实现对原始信号的去噪。

值得注意的是去噪前后信号的长度会有所变化,若原始信号样本长度为奇数,则去噪后长度加1,若原始长度为偶数,则去噪后长度不变。

通过实验发现,如果要计算去噪前后信号的差,对于原始数据长度为奇数时,应该计算去噪后信号的第一个元素到倒数第二个元素这个子序列与原始信号之间的差值,也即舍去因去噪而多出的最后一个值。如果使用去噪后的第二个元素到最后一个元素与原始信号的差,则可能出现偏差较大的情况。如下图所示,其中蓝色线为去噪信号的第一个值到倒数第二个值与原始信号的差,红色线为去噪信号的第二个值到最后一个值与原始信号的差值。

一维信号小波去噪原理及python实现示例相关推荐

  1. 一维信号小波去噪算法C语言,[转载]一维小波分解与去噪重构

    对随机一维信号实现多尺度小波分解,长度M=256,层数N=3. 解:一维随机信号是用nelec函数作为信号源,产生0~256范围内的信号. 实现小波按层分解的函数是: [C,L]=wavedec(s, ...

  2. 一维信号小波阈值去噪

    转载:http://blog.csdn.net/ebowtang/article/details/40481393 一,小波阈值去噪基本理论       本博文根据小波的分解与重构原理,实现了基于硬阈 ...

  3. 一维信号小波阈值去噪 c语言,一维信号小波阈值去噪

    描述 1.小波阈值处理基本理论 所谓阈值去噪简而言之就是对信号进行分解,然后对分解后的系数进行阈值处理,最后重构得到去噪信号.该算法其主要理论依据是:小波变换具有很强的去数据相关性,它能够使信号的能量 ...

  4. C语言实现一维信号小波阙值去噪

    实现小波阙值去噪分三个步骤: 1.将源信号分解成系数: 2.根据分解的系数获取阙值: 3.根据阙值对系数进行过滤: 4.将过滤的系数还原成信号,最终的结果就是将源信号过滤后的结果. 我实现的代码主要是 ...

  5. java 小波去噪原理_小波去噪的基本知识

    本篇是这段时间学习小波变换的一个收尾,了解一下常见的小波函数,混个脸熟,知道一下常见的几个术语,有个印象即可,这里就当是先作一个备忘录,以后若有需要再深入研究. 一.小波基选择标准 小波变换不同于傅里 ...

  6. python小波去噪_python小波变换去噪

    一,小波去噪原理: 信号产生的小波系数含有信号的重要信息,将信号经小波分解后小波系数较大,噪声的小波系数较小,并且噪声的小波系数要小于信号的小波系数,通过选取一个合适的阀值,大于阀值的小波系数被认为是 ...

  7. matlab小波分析毕业设计,基于matlab的小波去噪分析毕业论文

    基于matlab的小波去噪分析毕业论文 基于 matlab 的小波去噪分析在图像处理中的应用研究 摘 要 本文首先介绍了小波变换的发展状况以及其基本理论知识,包括连续小波变换和离 散小波变换:接着对基 ...

  8. python 小波去噪,用Pywavelet去噪信号?

    我需要去噪信号.我试图用savgol_滤波器去噪,但结果导致信号中的奇异点丢失.为了去噪和保持奇异性,我尝试使用小波变换.小波阈值和小波逆变换,但都没有成功.有人知道如何使用小波去噪吗?在import ...

  9. sEMG信号小波阈值去噪

    1.sEMG信号简介 表面肌电信号是从皮肤表面获取的关于肌肉活动的微弱生物电信息,能够为肌肉活动状态分析.神经肌肉功能分析及病理分析等研究提供有效的帮助.由于受到检测仪器.环境和肌肉自身生理特性等多种 ...

最新文章

  1. 发推吐槽职场性别歧视后,苹果女高管被无限期行政休假
  2. Oracle RMAN 清除归档日志
  3. vs内存泄露检测方法
  4. HTTPS加密那点事--轻松秒懂HTTPS非对称加密
  5. 一个个人网站如何融资一千万
  6. 机器学习之 weka学习(四)
  7. mac adb 找不到设备_win/Mac办公软件下载找不到资源?试试这三个强大的神器
  8. java的创建管理员对象_java--更改管理员密码,请列位帮忙看看有没有更好的实现方式...
  9. PHP定界符的使用既注意事项
  10. javascript 的位操作符转换推断
  11. 交通监控系统服务器配置,监控系统服务器的配置
  12. .net html第一张图片,基于Asp.net C#实现HTML转图片(网页快照)
  13. 计算机操作系统笔记(六)
  14. Excel 数据透视表入门教程
  15. QQ能上网页打不开解决办法
  16. CISCO 交换设备IOS 备份/恢复操作
  17. linux鼠标箭头消失了,Ubuntu 16.04 鼠标光标消失的解决方法(右键可弹窗,可以点击)...
  18. Domain-Adversarial Training of Neural Networks
  19. 红外成像单筒望远镜TFN TD7产品 型号评测
  20. App 图标设计 - 圆角透明效果(0 基础使用 PS)

热门文章

  1. [jzoj 4249] 【五校联考7day1】游戏 {贪心/斜率优化}
  2. 12306查询车票(爬虫小练_1)
  3. CSS基础入门,导入方式,选择器
  4. SVM支持向量机算法做预测,matlab,预测精度非常高
  5. 安装 ubuntu 18.04登录界面卡死解决
  6. 计算机网络 计算路由表
  7. python opencv2 将两张图片合并为一张
  8. js-DOM offsetLeft 属性与 offsetTop 属性,制作网页动画等必学知识!
  9. 各种“地”—— 各种“GND”
  10. C++之 引用(refer)