多种方法进行去基线处理
目录
- detrend函数去除基线
- 多项式拟合原函数
- BEADS 基线处理
- 小波算法
- 经验模态分解(EMD)
- 参考
detrend函数去除基线
detrend函数只能用于去除线性趋势,对于非线性的无能为力。
函数表达式:y = scipy.signal.detrend(x): 从信号中删除线性趋势:
x:含有基线干扰的信号;y:去除基线干扰后的信号。
detrend去基线代码显示:
from scipy import signal
import matplotlib.pyplot as plt
import numpy as npt = np.linspace(0, 5, 100)
# normal是产生一个高斯分布
x = t + np.random.normal(size=100)
plt.subplot(2, 1, 1)
plt.plot(t, x, linewidth=3)
plt.subplot(2, 1, 2)
plt.plot(t, signal.detrend(x), linewidth=3)
plt.show()
结果展示:
通过上图可以看到detrend去线性趋势效果很不错。
多项式拟合原函数
很容易理解,就是通过多项式拟合一个新的曲线,使拟合出来的曲线与原图像尽可能接近,同时又能去除图像中的噪声和基线等多余的因素。
代码显示为:
import os
import matplotlib.pyplot as plt
import scipy.signal
import numpy as npdef main():# 项目目录dir = "D:\\a_user_file\\8_data"filename = 's1_run.csv'path = os.path.join(dir, filename)with open(path, "r") as fname:data = fname.read()lines = data.split("\n")raw_data = []for i in range(len(lines)):line_i = lines[i].split(",")raw_data.append(int(line_i[4]))sig = raw_datatmp_smooth1 = scipy.signal.savgol_filter(sig, 53, 9)tmp_smooth2 = scipy.signal.savgol_filter(sig, 53, 3)plt.subplot(3,1,1)plt.plot(sig)plt.subplot(3,1,2)plt.plot(tmp_smooth1 * 0.5, label='mic'+ '拟合曲线-21', color='red')plt.subplot(3,1,3)plt.plot(tmp_smooth2 * 0.5, label='mic'+ '拟合曲线-53', color='green')plt.show()main()
显示结果如下:
BEADS 基线处理
详细内容可参考:
https://ww2.mathworks.cn/matlabcentral/fileexchange/49974-beads-baseline-estimation-and-denoising-with-sparsity?s_tid=AO_FX_info
小波算法
小波算法去噪和去基线是先用滤波器对原始信号进行分解,经过下采样得到分解的高频系数D(细节部分)和低频系数A(近似部分),多层分解只需要对上一层分解出来的低频分量继续分解即可。这个过程就是小波分解。
从分解的最底层往上重构出信号,首先是上采样,一般采用隔值插零的方法,即增加数据量来达到与原始信号长度相同的数据,然后分别通过重构的高通滤波器g和低通滤波器h,最终重构出原始信号,如果代码编写的没问题,那么重构出的信号与原始信号完全一致。
而小波变换去噪的过程就是在分解后的各层系数中找出噪声所在的层,对该层的低频系数或者高频系数进行处理,比如软硬阈值处理,处理后再经过重构,即可重构出去除噪声的信号。
import numpy as np
import matplotlib.pyplot as plt
import pywt
import osdef signal():# 项目目录dir = "D:\\a_user_file\\8_data"filename = '1.csv'path = os.path.join(dir, filename)with open(path, "r") as fname:data = fname.read()lines = data.split("\n")raw_data = []for i in range(len(lines)):line_i = lines[i].split(",")raw_data.append(int(line_i[0]))return raw_datadata = signal()
x = range(0, len(data))
w = pywt.Wavelet('db8') # 选用Daubechies8小波
maxlev = pywt.dwt_max_level(len(data), w.dec_len)
print("maximum level is " + str(maxlev))
threshold = 0.5 # Threshold for filtering
# Decompose into wavelet components, to the level selected:
coeffs = pywt.wavedec(data, 'db8', level=maxlev) # 将信号进行小波分解
for i in range(1, len(coeffs)):coeffs[i] = pywt.threshold(coeffs[i], threshold*max(coeffs[i])) # 将噪声滤波
datarec = pywt.waverec(coeffs, 'db8')plt.subplot(2,1,1)
plt.plot(data, color="black", linewidth=2.0, linestyle="solid")
plt.subplot(2,1,2)
plt.plot(datarec, color="red", linewidth=2.0, linestyle="solid")
plt.show()
用小波变换去噪的关键是找到对应噪声、基线漂移所在的频率段,去掉对应的频率段,就可以生成新的去噪去基线信号了。
经验模态分解(EMD)
EMD方法认为任何信号都可以分解为若干个不同的本征模态函数,和一个残余量稳态量。其中各个本征模态函数反映了信号的局部特性,残余量反映了信号的趋势或均值。EMD法采用“筛”选的方法从原始信号中将残余量分离出来。
参考
https://ww2.mathworks.cn/matlabcentral/fileexchange/49974-beads-baseline-estimation-and-denoising-with-sparsity?s_tid=AO_FX_info
https://blog.csdn.net/qq_41620350/article/details/115981740
https://blog.csdn.net/u010565765/article/details/69397415
多种方法进行去基线处理相关推荐
- python怎么读文件内容-Python读取文件内容为字符串的方法(多种方法详解)
以下笔记是我在 xue.cn 学习群之数据分析小组所整理分享的心得.相关背景是:我选择中文词频统计案例作为考察大家python基础功掌握程度. 以小见大,下面是2个小技能的具体实战: 如何灵活地处理文 ...
- 接口里面的方法都是抽象方法吗_单元格区域选取,竟然有这么多种方法,你都造吗?...
在日常工作中, 怎么能少了Excel表格,相信我,如果你能把Excel用到极致,工作效率可是瞬间提升的,当然,可能还附带升职加薪哟! 关于单元格及单元格区域的选取可以说是Excel中最基本的操作之一, ...
- java中如何设置浏览器宽度_[Java教程]关于JS中获取浏览器高度和宽度值的多种方法(多浏览器)_星空网...
关于JS中获取浏览器高度和宽度值的多种方法(多浏览器) 2017-08-07 0 三种浏览器获取值方法 IE中: document.body.clientWidth ==> BODY对象宽度 d ...
- css如何调整红心样式_在JavaScript应用程序中包含CSS的多种方法「渡一」
原文链接:https://css-tricks.com/the-many-ways-to-include-css-in-javascript-applications/,作者:Dominic Magn ...
- xp进入win7计算机要密码怎么设置密码,XP系统设置直接跳过密码的多种方法
默认情况下,windowsxp系统开机启动时,遇到弹出输入用户名和密码的对话框的时候,如何让xp跳过密码呢?下面小编给大家分享XP系统设置直接跳过密码的多种方法,总有一种方法会适合你. 方法一 1.开 ...
- 多种方法让你在PC上使用iCloud服务
多种方法让你在Windows上优雅的使用iCloud服务 我平时习惯使用 日历.待办事项+2Do 等App,而在Windows上无法使用它们. 由于我爱好各种大型单机游戏,所以短时间内不会选择更换Ma ...
- 计算机直接切换到桌面,电脑怎样快速切换桌面_一键快速回到桌面的多种方法...
电脑是现代人常用的工作和娱乐工具,工作中,大家总会不自觉打开很多网页,如果要开启其他程序就要回到桌面去打开,如果一个一个手动缩小页面回到桌面会浪费很多时间,有什么办法可以一键回到桌面?如果能直接回到桌 ...
- 5、数码相框之使用多种方法支持多输入
文章目录 1.轮询方式 1.1.代码编写 初始化函数TouchScreenDevInit 关于获取时间的函数TouchScreenGetInputEvent 向上注册结构体 程序执行过程 1.2.配置 ...
- 多种方法解决计算机程序中出现.DLL文件丢失的问题
title: DLL-lose date: 2019-11-21 15:55:47 description: 解决计算机程序中出现.DLL文件丢失的问题 在安装某些软件,我们正准备开开心心地打开, ...
最新文章
- Web API 接口-JavaScript全部api接口文档
- winform模拟登陆网页_【教程】模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)...
- 关于安卓通过webservice访问数据库问题
- python3.6 3.7共存_[转]CentOS 7安装Python3.6过程(让linux系统共存Python2和Python3环境)...
- RobotFramework自动化测试环境配置
- CSS控制所有浏览器水平居中和控制链接不换行的效果
- 了解ElasticSearch分析器
- 《鸿蒙理论知识04》HarmonyOS概述之系统定义
- 【51nod - 1174 】区间中最大的数(RMQ问题,ST表,模板)
- 机器学习 | 梯度下降原理及Python实现
- 2021华为杯建模---总结
- 不需要许可认证即可解决WIN2003不能超过2个远程终端用户试用120天的问题
- Linux中级之ansible配置(playbook)
- 那些年我们玩过的游戏
- Boom 2 for Mac(音频助推器及均衡器) v1.6.7中文激活版
- 挠场的科学丨四、穿梭阴阳的挠场——道家风水、八卦、布阵的解密
- linux下打字软件,桌面应用|与 Linux 一起学习:学习打字
- 世界读书日之后聊聊读书
- 日本财险前瞻2012年IT发展 CDP技术助力异地灾备
- 【linux内核分析与应用-陈莉君】内核同步措施