当前位置: 首页 > news >正文

去基线处理

目录

  • 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

相关文章:

去基线处理

目录detrend函数去除基线多项式拟合原函数BEADS 基线处理小波算法经验模态分解(EMD)参考detrend函数去除基线 detrend函数只能用于去除线性趋势,对于非线性的无能为力。 函数表达式:y scipy.signal.detrend(x): 从信号中删除线…...

模拟信号4-20mA /0-5V/0-75mV/0-100mV转RS-485/232,数据采集A/D转换模块 YL21

特点:● 模拟信号采集,隔离转换 RS-485/232输出● 采用12位AD转换器,测量精度优于0.1%● 通过RS-485/232接口可以程控校准模块精度● 信号输入 / 输出之间隔离耐压3000VDC ● 宽电源供电范围:8 ~ 32VDC● 可靠性高,编程…...

[USB]键盘数据格式以及按键键值

USB键盘数据包含8个字节 BYTE1 – 特殊按键 |–bit0: Left Control是否按下,按下为1 |–bit1: Left Shift 是否按下,按下为1 |–bit2: Left Alt 是否按下,按下为1 |–bit3: Left GUI(Windows键) 是否按下,…...

web客户端-websocket

1、websocket简介 WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手&#xff0c…...

mysql间隙锁

首先我们这里有一个表t,其中的数据如下图所示 注意哈 update由于操作的最新的值,所以是当前读! 另外一个事务插入 8的时候发生锁 而我对id为10的数据进行更新,却不会被锁住 分析:在执行当前读时,由于id7不存…...

华为OD机试 - 计算面积(Java) | 机试题+算法思路+考点+代码解析 【2023】

计算面积 绘图机器的绘图笔初始位i在原点(0.0)。 机器启动后其绘图笔按下面规则绘制直线: 1 )尝试沿着横向坐标轴正向绘制直线,直到给定的终点值E, 2 )期间可通过指令在纵坐标轴方向进行偏移。井同时绘制直线,偏移后按规则1绘制直线;指令的格式为X offsetY。表示在横坐标X…...

Python 之 Pandas 时间戳、通过时间间隔实现 datetime 加减、时间转化、时期频率转换和 shift() 时间频率进行移位)

文章目录一、时间戳1. unit 参数是 s2. year、month、day、hour、minute、second、microsecond 单独设置时间二、通过时间间隔实现 datetime 加减三、时间转化1. 处理各种输入格式2. 将字符串转 datetime3. 除了可以将文本数据转为时间戳外,还可以将 unix 时间转为时…...

一篇文章搞定linux网络模型

网络协议感觉晦涩难懂?什么七层网络模型?又五层网络模型?又四层网络模型?TCP/IP协议是个啥?UDP是啥?什么是三次握手?什么是四次挥手?tcpdump听说是抓包的,怎么用&#xf…...

惠普庆祝在中国40年,强化中国发展战略

中国北京,2023年2月23日 ——今日,“品质信赖向未来” 惠普在中国40年系列活动启动仪式及惠普打印春季新品发布会在北京盛大举行。现场,惠普回顾了40年来与中国经济及产业共同发展的历程,并再次强调了惠普一以贯之的“在中国&…...

C++小作业

前言:long long time ago,老大留了点小作业,一直忘了写…偷偷补上 小作业目录unique_ptr vs shared_ptrunique_ptrshared_ptrpublisher/subscriber 1?boost::bindstd::bindthis? _1?TopicContextPtr?std::moveunique_ptr vs sh…...

Python基础 — lambda匿名函数

1、什么是匿名函数? 匿名函数,顾名思义,就是没有名字的函数,它主要用在那些只使用一次的场景中。如果我们的程序中只需要调用一次某个简单逻辑,把它写成函数还需要先定义、取函数名字等一些列操作,这种场景…...

MongoDB安装和使用过程常见问题

文章目录一、安装过程显示没有相应的权限二、pymongo无法使用,报错一、安装过程显示没有相应的权限 oh我的天,找了网上很多种方法都不行哈哈 不同的电脑对应不同的问题吧~ 我的这个问题是这样解决滴 先直接简述操作路径,不明白的可以看如下图…...

AWS攻略——使用中转网关(Transit Gateway)连接同区域(Region)VPC

文章目录环境准备创建VPC配置中转网关给每个VPC创建Transit Gateway专属挂载子网创建中转网关创建中转网关挂载修改VPC的路由验证创建业务Private子网创建可被外网访问的环境测试子网连通性Public子网到Private子网Private子网到Private子网知识点参考资料在《AWS攻略——Peeri…...

Rouge | 自动文摘及机器翻译评价指标

tag:评价指标,摘要,nlp Rouge(Recall-Oriented Understudy for Gisting Evaluation),是评估自动文摘以及机器翻译的一组指标。它通过将自动生成的摘要或翻译与一组参考摘要(通常是人工生成的)进行比较计算,得出相应的分值&#x…...

【Python入门第十五天】Python字典

字典(Dictionary) 字典是一个无序、可变和有索引的集合。在 Python 中,字典用花括号编写,拥有键和值。 实例 创建并打印字典: thisdict {"brand": "Porsche","model": "911&q…...

java学习思路

基础概念:了解Java的基本概念,如Java虚拟机(JVM)、Java标准版(Java SE)、Java企业版(Java EE)等。了解Java的版本、发展历程以及Java应用场景。可以通过阅读Java官方文档、相关书籍、…...

MySQL操作数据库-------创建数据库

搭建好MySQL环境后,现在我们正式的进入到MySQL的学习当中,这篇文章讲述如何去创建MySQL数据库。 1. 使用CREATE DATABASE创建数据库 语法格式:CREATE DATABASE database_name eg.打开MySQL命令行,查看当前MySQL中存在的数据库 my…...

【十】深入理解redolog,undolog和binlog的底层原理

MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及explain关键字https://blog.csdn.net/zhenghuishengq/article/details/124552080【三】深入理解mysql的索引分类&a…...

高频js手写题之实现数组扁平化、深拷贝、总线模式

前言 古人学问无遗力,少壮工夫老始成。纸上得来终觉浅,绝知此事要躬行。看懂一道算法题很快,但我们必须将这道题的思路理清、手写出来。 三道js手写题的思路和代码实现 数组扁平化 演示效果 将[1, [1, 2], [1, [2]]] 变成 [1, 1, 2, 1, 2] 第一种&…...

HTML介绍

文章目录一. HTML介绍二. 创建三. HTML结构四. 常见的标签五. 链接标签六. 图片标签七. 资源路径八. 列表标签九. 表格标签十. 表单标签十一. 表单提交一. HTML介绍 HTML: 超文本标记语言作用: 书写前端页面前端三大技术(三大标准): HTML: 结构标准 (页面中有什么内容)CSS: 样…...

【C++】string的9道OJ题

要么庸俗,要么孤独… 文章目录一、仅仅反转字母二、字符串中的第一个唯一字符(计数排序的思想)三、字符串相加(做好加进位的工作即可)四、把字符串转换成整数五、反转字符串中的单词 III六、字符串相乘(高…...

Odoo丨Odoo框架源码研读三:异常处理与定制化开发

Odoo丨Odoo框架源码研读三:异常处理与定制化开发 Odoo源码研读的第三期内容:异常处理与定制化开发。 *异常处理* Odoo中的Exception是对Python内置异常做了继承和封装,设定了自己核心的几个Exception。 而对异常的处理和Python内置异常的…...

Python概述 基础语法 判断 循环

Python概述常用快捷键第二章-Python基础语法01-字面量02-注释03-变量04-数据类型05-数据类型转换06-标识符07-运算符08-字符串的三种定义方式09-字符串的拼接10-字符串格式化11-字符串格式化的精度控制 12-字符串格式化-快速写法13-对表达式进行格式化14-字符串格式化练习题讲解…...

什么是品牌营销?学会正确推广您的业务

什么是品牌营销? 品牌营销涉及长期战略规划,以推广整个品牌,而不是营销单个产品或服务。它分享了一个引人入胜的故事,以在潜在客户中产生品牌知名度并建立声誉。 面向消费者的品牌使用品牌智能软件来了解人们对其品牌的看法&#…...

Golang学习Day1

😋 大家好,我是YAy_17,是一枚爱好网安的小白。本人水平有限,欢迎各位大佬指点,欢迎关注 😁,一起学习 💗 ,一起进步 ⭐ 。⭐ 此后如竟没有炬火,我便是唯一的光…...

《设计模式》工厂模式

《设计模式》工厂模式 工厂模式又分为简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)都是常用的创建型设计模式,它们的主要区别如下: 简单工厂…...

JS - 原型对象、原型链是什么

一 阅读掘金 https://juejin.cn/post/7007416743215759373 https://juejin.cn/post/7007416743215759373 二 阅读掘金小册原型知识点 原型 涉及面试题:如何理解原型?如何理解原型链? 当我们创建一个对象时 let obj { age: 25 }&#xff0…...

STM32f103 CubeMX封装 led程序

本文代码使用 HAL 库。 文章目录前言一、LED 原理图二、CubeMX创建工程三、LED 相关函数1. 输出电平函数:2. 延时函数:3. 翻转电平函数:四、详细代码实验现象 :总结代码 源码:前言 从这篇文章开始,我们讲解…...

智慧教室系统--温湿度控制系统

随着科技的不断进步,智能化已经成为了各个行业的发展趋势,智慧教室作为未来教育的主流趋势之一,也将受益于这一趋势。而智慧教室中的温湿度控制系统是其中的重要组成部分,为了创造一个舒适、健康、安全的教学环境,智慧…...

只要一直向前定能到达远方,社科院与杜兰大学金融管理硕士项目为你注入动力

在人生这条道路上,我们很远的路要走,不管前方是否平坦,我们只要坚持前向,终将抵达远方。一路上我们付出很多,也收获很多。想要变得更强大,就要不断优化自身,积攒更多的能量,社科院与…...