news 2026/6/10 17:12:29

基于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/6/10 14:21:22

VibeThinker-1.5B技术亮点解析:密集型模型的设计哲学

VibeThinker-1.5B技术亮点解析&#xff1a;密集型模型的设计哲学 1. 引言&#xff1a;小参数模型的推理突破 近年来&#xff0c;大语言模型的发展呈现出参数规模不断扩大的趋势。然而&#xff0c;高昂的训练与推理成本限制了其在边缘设备和资源受限场景中的广泛应用。在此背景…

作者头像 李华
网站建设 2026/6/10 10:52:27

Live Avatar CLI模式进阶:命令行参数自定义与脚本化部署

Live Avatar CLI模式进阶&#xff1a;命令行参数自定义与脚本化部署 1. 引言 Live Avatar 是由阿里巴巴联合多所高校共同开源的数字人生成模型&#xff0c;旨在通过文本、图像和音频输入驱动高保真虚拟人物视频的生成。该模型基于14B参数规模的DiT&#xff08;Diffusion Tran…

作者头像 李华
网站建设 2026/6/10 11:07:52

AI智能二维码工坊步骤详解:H级容错二维码生成实战案例

AI智能二维码工坊步骤详解&#xff1a;H级容错二维码生成实战案例 1. 引言 1.1 业务场景描述 在现代数字化服务中&#xff0c;二维码已成为信息传递、身份认证、支付跳转等场景的核心载体。然而&#xff0c;传统二维码生成工具普遍存在容错率低、识别不稳定、依赖外部服务等…

作者头像 李华