脉搏波提取程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

clear all;

close all;

%%原始信号的导入

x=load('D:\实验数据\libaosenpilaoqianv5.txt');

x=x';

x=x(2000:25000);

fs=1000;

figure(1);subplot(211);

plot(x);grid;

xlabel('时间(ms)');ylabel('幅值');

title('原始信号');

%%去除基线漂移

k = .7; % cut-off value

fc=0.3/fs;

alpha = (1-k*cos(2*pi*fc)-sqrt(2*k*(1-cos(2*pi*fc))-k^2*sin(2*pi*fc)^2))/(1-k); y = zeros(size(x));

for i = 1:size(x,1)

y(1,:) = filtfilt(1-alpha,[1 -alpha],x(1,:));

end

x1=x-y;

subplot(212);

plot(x1);grid on;

xlabel('时间(ms)');ylabel('幅值');

title('去除基线漂移信号');

%%butter带通滤波

figure(2);

Wp=[0.9 50]/500;Ws=[0.3 140]/500;

[n,Wn] = buttord(Wp,Ws,3,10);

[b,a] = butter(n,Wn);

freqz(b,a,512,fs);

grid;

title('巴特沃斯带通滤波')

grid;

%%cheby去除50hz工频干扰

figure(3);

Wp1=[30 65]/500;Ws1=[45 55]/500;

rp=3;rs=60;

[n1,Wn1] = cheb2ord(Wp1,Ws1,rp,rs);

[b1,a1] = cheby2(n1,rs,Wn1,'stop');

freqz(b1,a1,512,fs);

grid;

title('带阻切比雪夫Ⅱ型滤波器')

grid;

%%信号之间的对比

figure(4);

x2=filtfilt(b,a,x1);

s21=filtfilt(b1,a1,x2);

subplot(313);

plot(s21);grid;

xlabel('时间(ms)');ylabel('幅值');

title('滤波后的信号');

subplot(311);

plot(x1);

grid;

xlabel('时间(ms)');ylabel('幅值');

title('原始信号');

subplot(312);

plot(x2);grid;

%%频谱图

figure(5);

F=fft(s21);plot([0:length(s21)-1]/(length(s21)*(1/fs)),abs(F)*2/length(s21));grid;

xlabel('频率/HZ');ylabel('幅值');

title('幅频图');

xlim([0 100]);

%%R波的提取

A=s21;

PM=max(A);

MM=min(A);

G=(PM-MM)*0.3; %峰值大小波动范围不超过最大波形高度的0.3倍

if max(A(1:200))==max(A(1:550))

[P1(1),t1(1)]=max(A(1:200));

cnt1=1;

elseif max(A(1:200))~=max(A(1:550))

cnt1=0;

end

for i=201:length(A)-200 %因为周期大于600,波峰大于其左右各200个点内的所有值if PM-A(i)

P1(cnt1+1)=A(i);

t1(cnt1+1)=i;

cnt1=cnt1+1;

end

end

if max(A(length(A)-199:length(A)))==max(A(length(A)-550:length(A)))

[P1(cnt1+1),t1(cnt1+1)]=max(A(length(A)-199:length(A)));

cnt1=cnt1+1;

end

subplot(211);

disp('峰值P1')

disp(P1);

disp('对应时间t1')

disp(t1)

disp('峰值个数cnt1')

disp(cnt1)

stem(P1);

grid on;

xlabel('峰值数');ylabel('峰值'); title('R波序列');

% % 峰值的特征显示

mp=mean(P1);

disp('峰值的均值mp=')

disp(mp)

vp=var(P1);

disp('峰值的方差vp=')

disp(vp)

sp=std(P1);

disp('峰值的标准差sp=')

disp(sp)

% %求周期T

j=1;

for m=2:length(t1)

T(j)=t1(m)-t1(m-1);

j=j+1;

end

disp ('心电信号的周期T=')

disp(T)

subplot(212);

stem(T);

grid on;

xlabel('心跳数');ylabel('周期值'); title('周期序列');

mT=mean(T);disp('周期均值mT=') disp(mT)

vT=var(T);disp('周期的方差vT=')

disp(vT)

sT=std(T);disp('周期的标准差sT=') disp(sT)

%信号的功率谱估计

figure(7);

w=hanning(128);

相关文档
最新文档