%--------------------------------------------------------------------------
% 利用小波变换检测R波,并给出模极大曲线
%--------------------------------------------------------------------------
clear all;
load M.mat
ecgdata=M(:,2)';
plot(ecgdata)
points=4000;%截取的点数
range=2:1:32;%尺度范围
sr=360;%抽样率
signal=ecgdata(1:points)';
figure(1),subplot(311)
plot(signal),title('心电信号波形'),axis tight,grid on;
% 对心电信号作小波变换,选'db1'为分析用小波
wf='db1';
subplot(312)
ccfs = cwt(signal,range,wf);
imagesc(ccfs);
%title('Continuous Transform, coefficients.')
colormap(gray(128));
%ylabel('Scale')
swd=ccfs;
ddw=zeros(size(swd));
% 对ECG信号进行分段
pddw=ddw;
nddw=ddw;
posw=swd.*(swd>0);
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);
negw=swd.*(swd<0);
ndw=((negw(:,1:points-1)-negw(:,2:points))>0);
nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);
ddw=pddw|nddw;
ddw(:,1)=1;
ddw(:,points)=1;
wpeak=ddw.*swd;
wpeak(:,1)=wpeak(:,1)+1e-10;
wpeak(:,points)=wpeak(:,points)+1e-10;
%figure,imagesc(wpeak);
sam=sum(ccfs,1);
posi=sam.*(sam>0);
posi=(posi>max(posi)/2);
nega=sam.*(sam<0);
nega=-1*(nega<min(nega)/2);
interva=posi+nega;
loca=find(interva);
diff=interva(loca(1:length(loca)-1))-interva(loca(2:length(loca)));
seg=[1,round((loca(find((diff==2)))+loca(find((diff==2))+1))/2),points];%分段的结果保存在seg中
subplot(313)
figure(2),
plot(interva,'r--');
hold on;
plot(signal/100);
hold on
stem(seg,ones(length(seg))),grid on;
% 分别对每一段进行R波检测
for pha=1:length(seg)-1
block=wpeak(:,[seg(pha):seg(pha+1)]);
[maxvalue,maxpos]=max(block,[],2);
coefposi=polyfit(range,maxpos',1);
[minvalue,minpos]=min(block,[],2);% 找出模极大的位置和值
coefnega=polyfit(range,minpos',1);% 对模极大点进行直线拟合找到最大线
Rpeak(pha)=round((coefposi(2)+coefnega(2))/2+seg(pha)-1)/sr;% 每一段R波时刻存在Rpeak中
end
% 绘制模极大随尺度变化的曲
figure(3)
subplot(223)
plot(log2(range),log2(abs(minvalue./sqrt(range'))),'b--');hold on;
plot(log2(range),log2(abs(maxvalue./sqrt(range'))),'r');grid on;
%xlabel('log2(s)'),ylabel('log2(maxima)'),
%title('estimation of the singularity at the R peak'),, hold off;
R_R=Rpeak(2:length(Rpeak))-Rpeak(1:length(Rpeak)-1);
subplot(221)
imagesc(ccfs(:,[seg(pha):seg(pha+1)]));colormap(gray);
block=zeros(size(block));
for i=1:length(range)
block(i,maxpos(i))=1;
block(i,minpos(i))=-1;
end
subplot(222)
imagesc(block);colormap(gray);
subplot(224)
plot(maxpos,range,'r+'),hold on,plot(minpos,range,'k*'),grid on;
xr=[0, 1, range];
hold on,plot(xr*(coefnega(1))+coefnega(2),xr,'-');
hold on,plot(xr*(coefposi(1))+coefposi(2),xr,'--');
没有合适的资源?快使用搜索试试~ 我知道了~
【心电信号ECG】基于matlab小波变换心电信号检测R波【含Matlab源码 3589期】.zip
共5个文件
jpg:3个
mat:1个
m:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 40 浏览量
2023-12-07
10:05:45
上传
评论
收藏 158KB ZIP 举报
温馨提示
CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测
资源推荐
资源详情
资源评论
收起资源包目录
【心电信号ECG】基于matlab小波变换心电信号检测R波【含Matlab源码 3589期】.zip (5个子文件)
【心电信号ECG】基于matlab小波变换心电信号检测R波【含Matlab源码 3589期】
运行结果1.jpg 42KB
rbotiqulei.m 3KB
运行结果2.jpg 36KB
M.mat 77KB
运行结果3.jpg 31KB
共 5 条
- 1
资源评论
海神之光
- 粉丝: 3w+
- 资源: 2094
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功