心电信号预处理代码MATLAB
时间: 2023-07-03 08:28:14 浏览: 248
以下是一份基于MATLAB的心电信号预处理代码,其中包括了信号滤波、去噪、降采样和特征提取等操作:
```matlab
% 加载心电信号数据
load ecg_data.mat
% 信号滤波:使用50Hz陷波滤波器和低通滤波器
fs = 1000; % 采样频率
f0 = 50; % 陷波滤波器的截止频率
[b,a] = iirnotch(f0/(fs/2),f0/10/(fs/2)); % 50Hz陷波滤波器
ecg_filtered = filtfilt(b,a,ecg_data); % 应用陷波滤波器
fc = 35; % 低通滤波器的截止频率
[b,a] = butter(2,fc/(fs/2)); % 2阶巴特沃斯低通滤波器
ecg_filtered = filtfilt(b,a,ecg_filtered); % 应用低通滤波器
% 去噪:使用小波去噪
level = 4; %小波分解级数
wname = 'sym8'; %小波基函数
ecg_denoised = wden(ecg_filtered,'modwtsqtwolog','s','mln',level,wname);
% 降采样:将采样频率降为200Hz
fs_new = 200; % 新的采样频率
ecg_downsampled = resample(ecg_denoised,fs_new,fs);
% 特征提取:提取QRS波群
[qrs_amp_raw,qrs_i_raw,delay,ecg_filtered] = pan_tompkin(ecg_downsampled,fs_new,0);
% 可视化结果
subplot(2,1,1);
plot(ecg_data);
title('原始心电信号');
xlabel('时间(s)');
ylabel('幅值');
subplot(2,1,2);
plot(ecg_downsampled);
hold on;
plot(qrs_i_raw,qrs_amp_raw,'ro');
title('预处理后的心电信号');
xlabel('时间(s)');
ylabel('幅值');
legend('滤波后的信号','QRS波群');
```
需要注意的是,上述代码中使用了`ecg_data.mat`数据文件作为示例数据,如果要使用自己的心电信号数据,需要将数据加载到`ecg_data`变量中。此外,还需要安装`signal processing toolbox`和`biosignal processing toolbox`工具箱才能运行上述代码。
阅读全文