二、生理信号处理 您所在的位置:网站首页 心电3项 二、生理信号处理

二、生理信号处理

2023-09-18 07:15| 来源: 网络整理| 查看: 265

本文适合快速了解心电信号,并能够进行数据的滤波处理。

一. 心电数据预处理(消除工频干扰、基线漂移)

* 心电数据及rdmat函数见文章底部

1. 导入心电数据 ## 心电图导入及读取 clc; [TIME,M,Fs,siginfo]=rdmat('100m');# 通过读取函数ramat对心电图进行处理 Fs=1500;# 采样频率 plot(TIME,M);

2. 选取前1000个数据点进行后续处理 ecg = M(1:1000); TIME = TIME(1:1000); plot(TIME,ecg)

3. 去除心电信号中的50Hz频率干扰(国内通常为50Hz)——陷波滤波器 ## Butterworth 陷波滤波器-去除工频干扰 # 设计滤波器 d = designfilt('bandstopiir','FilterOrder',2, ... 'HalfPowerFrequency1',49,'HalfPowerFrequency2',51, ... 'DesignMethod','butter','SampleRate',Fs); #应用滤波器去除50Hz干扰 ecg_50 = filtfilt(d,ecg); 4. 去除心电信号中的低频信号(5Hz以下)——消除基线漂移 ##bandpass滤波器-解决基线漂移 fmaxd_1=5;# 截止频率为5Hz fmaxn_1=fmaxd_1/(Fs/2); [B,A]=butter(1,fmaxn_1,'low'); ecg_low=filtfilt(B,A,ecg_50);# 通过5Hz低通滤波器的信号 ecg1=ecg_50-ecg_low; # 减去5Hz低频信号 plot(TIME,ecg1) xlabel('t(s)'); ylabel('mv'); title('期望信号');

5. 添加随机噪声

* wgn函数:随机添加白噪声

##添加随机噪声信号 Noise_White = (0.1*wgn(1,length(TIME),2))'; plot(Noise_White) title('噪声信号');

6. 噪声干扰后信号 ##噪声干扰后信号 Mix_Signal = ecg1 + Noise_White; plot(TIME,Mix_Signal) xlabel('t(s)'); ylabel('mv'); title('噪声干扰后信号');

二. 滤波处理(维纳滤波)

* h为维纳滤波运行后得到的数值,运行下文中维纳滤波器设计部分可得:

一、信号处理 ——3.维纳滤波(含matlab代码)_蛮有趣的_的博客-CSDN博客

##维纳滤波 Signal_Filter = filter(h,1,Mix_Signal);# 将输入信号通过维纳滤波器 figure(1) plot(TIME,Signal_Filter) xlabel('t(s)'); ylabel('mv'); title('维纳滤波后信号');

三. 均方误差

* 引入噪声后信号相对原信号的统计均方误差:

mse1 = 0.0153

* 滤波后的信号相对原信号的统计均方误差:

mse2 = 0.0069

应用维纳滤波后,信号更接近于原始信号。

* 心电数据及rdmat函数

链接:https://download.csdn.net/download/qq_41958946/86841684

心电数据原始来源:MIT-BIH Arrhythmia Database(mitdb)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有