基于MATLAB的心电信号分析系统的研究设计与仿真.docx
- 文档编号:8864988
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:21
- 大小:733.45KB
基于MATLAB的心电信号分析系统的研究设计与仿真.docx
《基于MATLAB的心电信号分析系统的研究设计与仿真.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的心电信号分析系统的研究设计与仿真.docx(21页珍藏版)》请在冰豆网上搜索。
基于MATLAB的心电信号分析系统的研究设计与仿真
摘要:
本文是利用MATLAB软件对美国麻省理工学院提供的MIT-BIH数据库的122号心电信号病例进行分析,利用MATLAB软件及simulink平台对122号心电信号的病例进行读取、插值、高通滤波、低通滤波等的处理。
将心电信号中的高频和低频的杂波进行滤除后对插值前后滤波前后的时域波形及频谱进行分析。
同时也将滤波器的系统函数进行读取,分析,画出滤波的信号流程图,也分析各个系统及级联后的系统的冲击响应、幅频响应、相位响应和零极点图来判断系统的稳定性,并用MATLAB软件将图形画出,以便于以后的对系统进行分析。
关键词:
MATLAB,simulink,心电信号,滤波器
1.课程设计的目的、意义:
本设计课题主要研究数字心电信号的初步分析及滤波器的应用。
通过完成本课题的设计,拟主要达到以下几个目的:
(1)了解MATLAB软件的特点和使用方法,熟悉基于Simulink的动态建模和仿真的步骤和过程;
(2)了解人体心电信号的时域特征和频谱特征;
(3)进一步了解数字信号的分析方法;
(4)通过应用具体的滤波器进一步加深对滤波器理解;
(5)通过本课题的设计,培养学生运用所学知识分析和解决实际问题的能力。
2设计任务及技术指标:
设计一个简单的心电信号分析系统。
对输入的原始心电信号,进行一定的数字信号处理,进行频谱分析。
采用Matlab语言设计,要求分别采用两种方式进行仿真,即直接采用Matlab语言编程的静态仿真方式、采用Simulink进行动态建模和仿真的方式。
根据具体设计要求完成系统的程序编写、调试及功能测试。
2.1必做部分:
2.1.1读取原始心电信号
美国麻省理工学院提供的MIT-BIH数据库是一个权威性的国际心电图检测标准库,近年来应用广泛,为我国的医学工程界所重视。
MIT-BIH数据库共有48个病例,每个病例数据长30min,总计约有116000多个心拍,包含有正常心拍和各种异常心拍,内容丰富完整。
为了读取简单方便,采用其txt格式的数据文件作为我们的原心电信号数据。
利用Matlab提供的文件textread或textscan函数,读取txt数据文件中的信号,并且还原实际波形。
2.1.2对原始心电信号做线性插值
由于原始心电信号数据不是通过等间隔采样得到的,也就是说原始的心电数据并不是均匀的,而用Matlab中提供的数字滤波器处理数据时,要求数据是等间隔的。
因此设计的系统首先应对原始心电信号做线性插值处理,使其变为等间隔的数字信号,否则直接处理后会出现偏差,根据心电信号的特点,把时间分隔成0.001s。
添加的幅值点采用一次线性插值。
对二维数据进行插值,相连幅值间数据的插值根据时间进行,运算公式如下:
,
,
,
,
其中
是第i个数据时间点,Ai是与之对应的数据,N是两数据之间需要的插值数,
是需要插值的两点数据差,
,
时数组
依次排列,即得到了插值后等间隔的新数据。
2.1.3根据心电信号的频域特征,设计相应的低通和带通滤波器
一般正常人的心电信号频率在0.7~100HZ范围内,幅度为
(胎儿)~5mV(成人)。
人体心电信号微弱,信噪比小,因此,在采集心电信号时,易受到仪器、人体活动等因素的影响,而且所采集的心电信号常伴有干扰。
采集心电数据时,由于人的说话呼吸,常常会混有约为0.1Hz到0.25Hz频段的干扰,对于这些低频干扰,可以让信号通过一个高频滤波器,低截止频率设置为0.25,来滤除低频信号,对于高频信号干扰,可以让信号再通过一个低频滤波器,其中截止频率设置为99Hz。
也可以直接应用带通滤波器设计。
(1)根据以上指标,设计模拟巴特沃斯(切比雪夫)低通、高通或带通滤波器,画出幅频特性(模拟滤波器幅频特性freqs)。
(2)根据心电信号频谱范围设计一个3阶以上模拟滤波器对心电信号进行预滤波;
(3)采用直接、级联或并联方式,实现该系统,并画出系统的信号流图;
(4)分析系统的时域特性(阶跃响应、冲击响应等),并用Matlab绘出相关波形;
(5)用Matlab分析幅频特性,并绘出相关波形;
(6)分析系统函数零极点与幅频特性的关系。
2.1.4对处理前后的心电信号分别做频谱分析
利用Matlab软件对处理前后的心电信号编程显示其频谱,分析比较滤波前后的频谱,得出结论。
如果分析频谱,滤波效果不明显,则需变动滤波器参数指标,重新设计滤波器。
通过频谱分析,多次试验确定最合适的滤波器。
2.1.5Simulink仿真
根据前面的设计,进行基于Simulink的动态仿真设计。
实现心电信号的分析和处理。
给出系统的基于Simulink的动态建模和仿真的系统方框图,同时记录系统的各个输出点的波形和频谱图。
2.2选作部分:
2.2.1减少分析数据的工作量试验
只截取大约2.5s,三个周期左右,大约800个采样数据进行分析;
2.2.250Hz工频陷波器设计
由于电子设备采集到的信号经常会混有电源线干扰。
电源线干扰是以50Hz为中心的窄带噪声,带宽小于1Hz。
设计相应的带阻滤波器滤除电源线干扰,并对处理后的信号做频谱分析。
3设计方案论证:
4设计内容(程序清单附带图片):
4.1MATLAB程序清单及图片:
4.1.1提取txt格式心电信号:
fid=fopen('122.txt');
C=textscan(fid,'%8c%f%*f','headerlines',2);
fclose(fid);
a=C{1};
y=C{2};
k=length(a)
fori=1:
k
c(i)=strread(a(i,:
),'%*s%f','delimiter',':
');
end
x=c';
plot(x,y)
4.1.2对原始心电信号进行线性插值
t=0:
0.001:
2.5;
F=interp1(x,y,t);
F=F';
t=t';
plot(t,F)
4.1.3把数据读到txt中
fid=fopen('t.txt','wt');
fprintf(fid,'%g\n',t);
fclose(fid);
fid=fopen('F.txt','wt');
fprintf(fid,'%g\n',F);
fclose(fid);
4.1.4插值前后波形比较
subplot(2,2,1)
plot(x,y)
title('初始信号时域波形')
axis([02.5-21])
subplot(2,2,2)
fs=1000;
N=length(y)
n=1:
N;
f1=n*fs/N;
Y1=fft(y);
plot(f1,abs(Y1))
title('初始信号频谱')
axis([010000200])
subplot(2,2,3)
plot(t,F)
title('差值后信号时域波形')
axis([02.5-21])
M=length(F);
m=1:
M;
f2=m*fs/M;
Y2=fft(F);
subplot(2,2,4)
plot(f2,abs(Y2))
title('插值后信号频谱')
axis([010000200])
4.1.5模拟低通滤波器:
wp=60*2*pi;ws=99*2*pi;Rp=1;As=40;
[N,wc]=buttord(wp,ws,Rp,As,'s')
[B,A]=butter(N,wc,'s')
k=0:
511;fk=0:
1000/512:
1000;wk=2*pi*fk;
Hk=freqs(B,A,wk);
plot(fk,20*log10(abs(Hk)));
gridon
N=
11
wc=
409.2596
B=
1.0e+028*
Columns1through10
000000000005.3949
Columns11through12
A=
1.0e+028*
Columns1through10
0.00000.00000.00000.00000.00000.00000.00000.00000.00000.0008
Columns11through12
0.09265.3949
4.1.6模拟高通滤波器:
wp=0.7*2*pi;ws=0.25*2*pi;Rp=0.1;As=40;
[N,wc]=buttord(wp,ws,Rp,As,'s')
[B0,A0]=butter(N,wc,'s');
wph=2*pi*0.25;hk=freqs(B0,A0,wph);
[BH,AH]=lp2hp(B,A,wph);
[h,w]=freqs(BH,AH);
plot(w,20*log10(abs(h)));
axis([0,1,-80,5]);
N=
7
wc=
3.0327
B0=
1.0e+003*
00000002.3595
A0=
1.0e+003*
0.00100.01360.09290.40701.23432.59053.49642.3595
4.1.7滤波前后图形对比:
t=0:
0.001:
9.997;
F=interp1(x,y,t);
F=F';
t=t';
figure
(1)
subplot(3,1,1);
plot(1000*t,F);
wp=0.7*2*pi;ws=0.25*2*pi;Rp=0.1;As=40;T=1;
[N,wc]=buttord(wp,ws,Rp,As,'s')
[B,A]=butter(N,wc,'s');
[b,a]=imp_invr(B,A,T)
[db,mag,pha,w]=freqz_m(b,a);
y1=filter(b,a,F);
subplot(3,1,2);plot(y1);
title('高通滤波后')
wp1=2*pi*60;ws1=2*pi*99;Rp1=0.1;As1=40;T1=1000;
OmegaP1=wp1/T1;OmegaS1=ws1/T1;
[cs1,ds1]=afd_butt(OmegaP1,OmegaS1,Rp1,As1);
[b1,a1]=imp_invr(cs1,ds1,T)
[db1,mag1,pha1,w1]=freqz_m(b1,a1);
y2=filter(b1,a1,y1);
subplot(3,1,3);plot(y2);
title('低通滤波后')
M=length(F);
m=1:
M;
fs=1000;
f2=m*fs/M;
F1=fft(F);
Y1=fft(y1);
Y2=fft(y2)
figure
(2)
subplot(3,1,1)
plot(f2,abs(F1))
axis([0,1000,0,200])
title('原始信号频谱_{9.997}')
subplot(3,1,2)
plot(f2,abs(Y1))
axis([0,1000,0,200])
title('高通滤波后信号频谱_{9.997}')
subplot(3,1,3)
plot(f2,abs(Y2))
axis([0,1000,0,200])
title('低通滤波后信号频谱_{9.997}')
4.1.8系统函数的级联、冲击响应、幅度响应、相位响应
figure(3)
H1=impz(b,a);
H2=impz(b1,a1);
Hn=conv(H1,H2);%将系统一的系统函数与系统二的函数相级联
subplot(3,1,1);
plot(H1);title('高通系统函数冲击响应曲线');%系统函数的冲击响应曲线
subplot(3,1,2);
plot(H2);title('低通系统函数冲击响应曲线');
subplot(3,1,3);
plot(Hn);title('级联后系统函数冲击响应曲线');
figure(4)
fs=1000;
[H,f]=freqz(cs,ds,256,fs);%系统一的幅频特性曲线
mag=abs(H);%幅度响应
ph=angle(H);%相位响应
ph=ph*180/pi;
subplot(2,2,1),plot(f,mag);grid%h1的幅度响应
title('h1幅度响应')
%xlabel('frequency(Hz)');ylabel('magnitude');
subplot(2,2,2);plot(f,ph);grid%h1的相位响应
title('h1相位响应')
fs=1000;
[H,f]=freqz(BH,AH,256,fs);
mag=abs(H);
ph=angle(H);
ph=ph*180/pi;
subplot(2,2,3),plot(f,mag);grid
title('h2幅度响应')
subplot(2,2,4);plot(f,ph);grid
title('h2相位响应')
figure(6)
zr=roots(B)%系统一的零点图
pk=roots(A)%系统一的极点图
zplane(B,A);%zplane函数画出系统一的零极点图
figure(7)
zr1=roots(cs1)%系统二的零点图
pk1=roots(ds1)%系统二的极点图
zplane(cs1,ds1);%zplane函数画出系统一的零极点图
4.1.9截取到2.5s对截取的部分进行滤波及频谱分析
t1=0:
0.001:
2.5;
F0=interp1(x,y,t1);
F0=F0';
t1=t1';
figure(8)
subplot(3,1,1);
plot(1000*t1,F0);
wp=0.7*2*pi;ws=0.25*2*pi;Rp=0.1;As=40;T=1;
[N,wc]=buttord(wp,ws,Rp,As,'s')
[B,A]=butter(N,wc,'s');
[b,a]=imp_invr(B,A,T)
[db,mag,pha,w]=freqz_m(b,a);
y11=filter(b,a,F0);
subplot(3,1,2);plot(y11);
title('高通滤波后_{2.5}')
wp1=2*pi*60;ws1=2*pi*99;Rp1=0.1;As1=40;T1=1000;
OmegaP1=wp1/T1;OmegaS1=ws1/T1;
[cs1,ds1]=afd_butt(OmegaP1,OmegaS1,Rp1,As1);
[b1,a1]=imp_invr(cs1,ds1,T)
[db1,mag1,pha1,w1]=freqz_m(b1,a1);
y21=filter(b1,a1,y11);
subplot(3,1,3);plot(y21);
title('低通滤波后_{2.5}')
M=length(F0);
m=1:
M;
fs=1000;
f2=m*fs/M;
F01=fft(F0);
Y11=fft(y11);
Y21=fft(y21)
figure(9)
subplot(3,1,1)
plot(f2,abs(F01))
axis([0,1000,0,200])
title('原始信号频谱_{2.5}')
subplot(3,1,2)
plot(f2,abs(Y11))
axis([0,1000,0,200])
title('高通滤波后信号频谱_{2.5}')
subplot(3,1,3)
plot(f2,abs(Y21))
axis([0,1000,0,200])
title('低通滤波后信号频谱_{2.5}')
4.2.Simulink仿真参数设置及波形对比:
4.2.1滤波器参数设置
4.2.2滤波前后的图形进行对比
原始波形
低通滤波后
高通滤波后
5实验结果与分析:
6总结
7.实验收获及心得体会
参考文献:
[1]北京迪阳正泰科技发展公司.综合通信实验系统——信号与系统指导书(第二版).2006,6
[2]丁玉美.数字信号处理(第三版).西安电子科技大学出版社,2001
[3]吴大正.信号与线性系统分析(第四版).高等教育出版社,2005,8
[4]谢嘉奎.电子线路—非线性部分(第五版).高等教育出版社,2003,2
[5]陈后金.信号分析与处理实验.高等教育出版社,2006,8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 电信号 分析 系统 研究 设计 仿真