实验目的
1.人体心电信号是非常微弱的生理低频电信号,通常最大的幅值不超过5mV,信号频率在0.05~100Hz之间。心电信号是通过安装在人体皮肤表面的电极来拾取的。由于电极和皮肤组织之间会发生极化现象,会对心电信号产生严重的干扰。加之人体是一个复杂的生命系统,存在各种各样的其他生理电信号对心电信号产生干扰。同时由于我们处在一个电磁包围的环境中,人体就像一根会移动的天线,从而会对心电信号产生50Hz左右的干扰信号。心电信号具有微弱、低频、高阻抗等特性,极容易受到干扰,所以分析干扰的来源,针对不同干扰采取相应的滤除措施,是数据采集重点考虑的一个问题。常见干扰有如下几种:
①工频干扰②基线漂移③肌电干扰
2.什么是基线漂移?
一个特别低频的曲线叠加到了原始信号上,使得原始信号有缓慢的轻微的上下浮动的趋势。
3. 基线漂移的危害?
如果不消除基线漂移/趋势项,那么会把趋势项当作真是采集的原始信号,会影响信号的准确性和后续的数据处理结果。
存在基线漂移时,在进行 FFT 分析、相关性分析和功率谱密度分析等时会出现畸变,造成低频出现尖峰,甚至淹没主频成分,从而严重影响精度。
因此,我们要去除心电信号的基线漂移。
实验关键技术(原理)
基线漂移的本质是在原始信号上叠加了直流分量、低频分量。去除基线漂移有多种方法,我们根据信号选择了以下三种:
1.中值滤波法
中值滤波器原理
中值滤波器一种非线性的数字滤波技术,具有抑制噪声和保护边缘的特性。中值滤波去除基线漂移噪声的基本思想是先去掉心电信号中较大的值,得到只含有基线的趋势项信号,然后让它与原始的信号进行叠加,从而消除原始心电信号中的基线漂移干扰。中值滤波的原理:是把心电信号中某一点的值,用该点一个邻域内各点值的中值点代替。
这里我们设心电信号为y={y (n) |n=1, 1, …, N},中值滤波器滑动窗口的大小为L=2R+1,L<N,一般窗口的大小为采样频率的30%
则用中值滤波器处理后的信号Y(n)为:
2.小波变换去除基线漂移wavelet
基线漂移主要为低频分量,通过小波变换的多尺度分解过程,在分解的低频系数中可以观察到信号的基线趋势,用原始信号减去这个基线趋势即可。这里选用了’db6‘,将函数分为七段。
3.零相位数字滤波
y = filtfilt(b,a,x) 对输入数据 x 进行正反两个方向的零相位数字滤波。在正向过滤数据之后,该函数将过滤的序列反过来,并通过过滤器运行它。
b 和 a :传递函数系数
传递函数系数,指定为 向量 。 如果使用 全级滤波器 ,输入 1 表示 b ;如果使用 全零(FIR)滤波器 ,输入 1 表示 a。
举例:
b = [1 3 3 1]/6 和 a = [3 0 1 0]/3 指定一个归一化 3-dB 频率为 0.5π \piπ rad / sample 的三阶巴特沃思滤波器。
数据类型: double
x :输入信号
输入信号,指定为实值或复值 向量 ,矩阵 或 N 维数组。
x 必须是有限值的,若x的维度大于 1,filtfilt 沿 x 的第一个维度操作。
为了更好的去除基线漂移我们将零相位数字滤波器分为了低通和高通两种情况:
低通
先进行低通滤波,然后用原始信号减去得到的趋势信号,即为去趋势后的信号。
高通
直接设置一个高通滤波器将信号除掉即可。
自己在网上总结的实验报告,需要的宝子可以私信我
我是从这里找的源代码,中值滤波我自己加上去的 ,我的课题就是心电信号去基线漂移。