MATLAB读取MIT心电信号

该程序主要是用于在MATLAB中读取MIT-BIH数据库的心电信号文件。可将数据解码出来

美国MIT-BIH数据库链接MIT-BIH 心律失常数据库目录 (physionet.org)

可用于读取.dat文件

本次项目采用的心电信号来源于MIT-BIH的数据库,从其中选取了一组包含肌电信号干扰、工频干扰和包含基线偏移的适合于信号分析的信号,选取了该组信号的前15s(即选取了5400个点)的数据进行分析。将显示出信号如图2所示。

代码如下

在MATLAB中对它进行N点的FFT近似傅里叶变换,选择的N值为信号的长度以便获得较高分辨率,得到的幅度谱如图3所示,相位谱如图4所示,分贝谱如图5所示,频谱无明显规律,心电信号的产生为一个随机过程。

 图 3心电信号的幅度谱

通过观察该心电信号的幅度谱,可以清晰地看到该信号的低频分量的幅值很大,即在1Hz的幅频特性很大,说明该信号包含了较大的基频分量;该信号在60Hz处有一个峰值,根据常识可知,美国的交流电频率为60Hz,该处的峰值代表了信号受到的工频干扰很大;通常来说,肌电信号的频率为20~5000HZ,其主要成分的频率与肌肉的类型有关,一般在30~300HZ,而心电信号的频率主要集中在5~20HZ,所以心电信号中也包含了很多的肌电信号的干扰。需要抑制掉这些干扰以便进一步分析。

 

图 4心电信号相位谱

观察心电信号的相位谱,可以发现相位的分布无明显规律。

图 5心电信号的分贝谱

分贝谱为通过观察该分贝谱,也可以看出低频成分的能量更大,且60Hz处的能量很大,说明受工频干扰较大。

对该信号的进行时域分析,计算它的均值和方差,得到的输出结果如图6所示,通过MATLAB得出的结果:原信号的均值=-0.172842,我们也可得出它偏移X轴,有一个极低频率的分量,即基频漂移,基线漂移一般由于信号采集时呼吸及人体移动造成的,表现为低频率的缓慢变化噪声,其频率一般小于1Hz,可通过一个高通滤波器滤除。

图 6原始信号的均值方差计算

通过MATLAB计算信号的自相关函数如下图7所示,可以看出该信号的自相关函数关于信号的长度即5400对称。自相关函数表示信号的周期性自相关极值点间的距离就是周期;对于随机信号,自相关表示你该信号变化的快慢——如果自相关函数平滑,说明变化慢。

根据图7所示,该自相关函数陡峭,说明信号的变化较快,受到的噪声干扰较大。

图 7原始信号的自相关函数

clear
clc
close all
Fs=360;                     %采样频率
[filename, pathname] = uigetfile('*.dat', 'Open file .dat');% only image Bitmap
if isequal(filename, 0) || isequal(pathname, 0)   
    disp('File input canceled.');  
   ECG_Data = [];  
else
fid=fopen(filename,'r');
end
time=15;
f=fread(fid,2*360*time,'ubit12');
M=f(1:2:length(f));
M = M-1024;                               %M就是解码出来的数据
M=0.005*(M);
t=(0:1:length(M)-1)/Fs;
N=length(M);
figure(1)
plot(t,M(:,1)),xlabel('t(s)'),ylabel('mv'),title('原始信号')

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值