news 2026/5/28 23:13:17

基于ECG信号的HRV时域与频域分析Matlab代码实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于ECG信号的HRV时域与频域分析Matlab代码实现
一、核心流程

ECG数据导入

预处理

R波检测

RR间期提取

时域分析

频域分析

可视化


二、完整Matlab代码实现
1. 数据预处理(去噪与基线校正)
functionclean_ecg=preprocess_ecg(ecg,fs)% 带通滤波(0.5-40Hz)去除工频干扰和基线漂移[b,a]=butter(3,[0.540]/(fs/2));filtered=filtfilt(b,a,ecg);% 小波去噪(db4小波,5层分解)[c,l]=wavedec(filtered,5,'db4');denoised=waverec(wthresh(c,'s',3*std(c)/2),l,'db4');% 移动平均平滑(窗口宽度=50ms)window=round(0.05*fs);clean_ecg=movmean(denoised,window);end
2. R波检测(改进Pan-Tompkins算法)
function[r_peaks,locs]=detect_r_peaks(ecg,fs)N=length(ecg);window=round(0.15*fs);% 积分窗口% 平方与积分squared=ecg.^2;integrated=filter(ones(1,window)/window,1,squared);% 动态阈值threshold=0.7*max(integrated(1:1000))+0.3*std(integrated(1:1000));% 峰值检测[peaks,locs]=findpeaks(ecg,'MinPeakHeight',threshold,...'MinPeakDistance',round(0.2*fs),'Prominence',0.5*threshold);end
3. RR间期提取
functionrr_intervals=get_rr_intervals(locs,fs)rr_samples=diff(locs);rr_intervals=rr_samples/fs*1000;% 转换为毫秒% 异常值处理(3σ原则)mean_rr=mean(rr_intervals);std_rr=std(rr_intervals);rr_intervals(rr_intervals<mean_rr-3*std_rr|rr_intervals>mean_rr+3*std_rr)=[];end
4. 时域分析
function[sdnn,rmssd,pnn50]=time_domain(rr_intervals)N=length(rr_intervals);% 基本指标sdnn=std(rr_intervals);% 差分序列diffs=diff(rr_intervals);% RMSSDrmssd=sqrt(mean(diffs.^2));% pNN50nn50=sum(diffs>50);pnn50=nn50/N;end
5. 频域分析(Welch方法)
function[lf_power,hf_power,lf_hf_ratio]=freq_domain(rr_intervals,fs)N=length(rr_intervals);window=hamming(256);noverlap=128;% 功率谱估计[Pxx,f]=pwelch(rr_intervals,window,noverlap,[],fs);% 频段划分lf_band=[0.04,0.15];hf_band=[0.15,0.4];% 频段积分lf_idx=f>=lf_band(1)&f<=lf_band(2);hf_idx=f>hf_band(1)&f<=hf_band(2);lf_power=trapz(f(lf_idx),Pxx(lf_idx));hf_power=trapz(f(hf_idx),Pxx(hf_idx));% LF/HF比值lf_hf_ratio=lf_power/hf_power;end
6. 可视化模块
functionplot_hrv_results(ecg,rr_intervals,locs,sdnn,rmssd,lf_hf_ratio)figure;% ECG波形与R峰标记subplot(3,1,1);plot(ecg);hold on;plot(locs,ecg(locs),'ro');title('ECG波形与R峰检测');xlabel('时间 (s)');ylabel('幅值 (mV)');% RR间期序列subplot(3,1,2);stem(rr_intervals,'b','LineWidth',1.5);title('RR间期序列');xlabel('心跳序号');ylabel('间隔 (ms)');% 时频域指标subplot(3,1,3);bar([sdnn,rmssd,lf_hf_ratio]);set(gca,'XTickLabel',{'SDNN (ms)','RMSSD (ms)','LF/HF'});ylabel('数值');title('HRV时频域指标');end

三、完整调用示例
%% 参数设置fs=250;% 采样率 (Hz)ecg=load('ecg_signal.mat');% 加载ECG数据(列向量)%% 预处理clean_ecg=preprocess_ecg(ecg,fs);%% R波检测[r_peaks,locs]=detect_r_peaks(clean_ecg,fs);%% RR间期提取rr_intervals=get_rr_intervals(locs,fs);%% 时域分析[sdnn,rmssd,pnn50]=time_domain(rr_intervals);%% 频域分析[lf_power,hf_power,lf_hf_ratio]=freq_domain(rr_intervals,fs);%% 可视化plot_hrv_results(clean_ecg,rr_intervals,locs,sdnn,rmssd,lf_hf_ratio);

四、结果示例
指标正常范围临床意义
SDNN50-100 ms总体自主神经活性
RMSSD20-80 ms副交感神经张力
LF/HF0.5-2.0交感-副交感平衡

参考代码 采用ECG信号进行HRV的时域分析、频域分析的Matlab代码www.youwenfan.com/contentcnq/55064.html

五、扩展功能
  1. 呼吸耦合分析

    % 呼吸信号同步处理[resp_rate,phase]=respiratory_analysis(ecg,fs);
  2. 非线性分析

    % Poincaré图[sd1,sd2]=poincare_plot(rr_intervals);
  3. 机器学习集成

    % 使用HRV特征训练分类模型features=[sdnn,rmssd,lf_hf_ratio];model=train_classifier(features,labels);

六、注意事项
  1. 数据质量验证:需检查QRS波群形态(使用ECG诊断工具箱)

  2. 采样率要求:建议≥250Hz(MIT-BIH标准)

  3. 临床验证:需与专业医疗设备(如Holter)对比


参考文献

ECG信号预处理与R波检测算法优化

HRV时域频域特征计算方法

基于Welch方法的功率谱估计

运动伪影消除技术

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 23:54:08

Vllm-v0.11.0模型托管方案:云端GPU+自动伸缩,比自建便宜60%

Vllm-v0.11.0模型托管方案&#xff1a;云端GPU自动伸缩&#xff0c;比自建便宜60% 你是不是也是一家初创公司的技术负责人&#xff0c;正为上线AI服务而发愁&#xff1f;想快速推出产品&#xff0c;却发现搭建和维护GPU集群的成本高得吓人——采购显卡、部署环境、监控运维、应…

作者头像 李华
网站建设 2026/5/23 15:58:34

Qwen-Image-2512-ComfyUI中文生图能力实测,细节拉满

Qwen-Image-2512-ComfyUI中文生图能力实测&#xff0c;细节拉满 1. 引言&#xff1a;为何选择Qwen-Image-2512-ComfyUI进行中文生图测试&#xff1f; 近年来&#xff0c;多模态大模型在图文生成领域取得了显著进展&#xff0c;但大多数主流模型对中文语义的理解和文本渲染仍存…

作者头像 李华
网站建设 2026/5/20 15:38:30

告别整图重绘!Qwen-Image-Layered让局部修改更精准

告别整图重绘&#xff01;Qwen-Image-Layered让局部修改更精准 1. 引言&#xff1a;AI图像编辑的“一致性难题” 在当前主流的AI图像生成系统中&#xff0c;一旦图像完成生成&#xff0c;其内容便以整体像素形式固化。当用户希望对图像进行局部修改——例如更换人物服装、调整…

作者头像 李华
网站建设 2026/5/20 14:38:26

OpenCode避坑指南:解决AI连接失败的5个常见问题

OpenCode避坑指南&#xff1a;解决AI连接失败的5个常见问题 1. 引言&#xff1a;为什么AI连接总是失败&#xff1f; 在使用 OpenCode 构建本地 AI 编程助手的过程中&#xff0c;许多开发者都曾遇到过“AI 连接失败”这一令人困扰的问题。尽管 opencode 镜像集成了 vLLM 和 Qw…

作者头像 李华
网站建设 2026/5/24 9:55:13

NotaGen实战案例:如何用2块钱完成商业配乐小样

NotaGen实战案例&#xff1a;如何用2块钱完成商业配乐小样 你有没有遇到过这样的情况&#xff1f;广告公司突然接到一个急单&#xff0c;客户明天就要看视频样片&#xff0c;但背景音乐还没着落。传统方式找作曲师定制一首配乐&#xff0c;至少要等两三天&#xff0c;价格动辄…

作者头像 李华
网站建设 2026/5/21 15:36:29

通义千问2.5快速入门:3步搞定云端部署,没技术也能玩

通义千问2.5快速入门&#xff1a;3步搞定云端部署&#xff0c;没技术也能玩 你是不是也经常听说“大模型”“AI助手”这些词&#xff0c;感觉很厉害&#xff0c;但一看到命令行、代码、配置文件就头大&#xff1f;别担心&#xff0c;今天这篇文章就是为你量身打造的——哪怕你…

作者头像 李华