如何在Python或MATLAB中对ECG信号实现上下采样至300Hz
ECG信号采样率统一至300Hz的实现方案
以下分别给出Python和MATLAB的实现方法:
Python实现
使用scipy库的信号处理模块完成重采样操作,代码如下:
import numpy as np from scipy.signal import resample, resample_poly # 输入参数定义:ecg_500为500Hz原始信号数组,ecg_257为257Hz原始信号数组 fs1_original = 500 fs2_original = 257 fs_target = 300 # 第一路500Hz下采样至300Hz # 方式1:FFT重采样,适用于所有比例场景 len1_original = len(ecg_500) len1_target = int(np.round(len1_original * fs_target / fs1_original)) ecg_300_ch1 = resample(ecg_500, len1_target) # 方式2:多相滤波重采样,仅适用于有理比例场景(300/500=3/5),效率更高、波形失真更小 # ecg_300_ch1 = resample_poly(ecg_500, up=3, down=5) # 第二路257Hz上采样至300Hz len2_original = len(ecg_257) len2_target = int(np.round(len2_original * fs_target / fs2_original)) ecg_300_ch2 = resample(ecg_257, len2_target)
小提示:如果对ECG波形保真要求高,可在重采样前先对原始信号做0.5~40Hz的带通滤波,避免重采样过程引入混叠或高频噪声。
MATLAB实现
使用MATLAB内置的resample函数即可完成操作,该函数默认自带线性相位抗混叠FIR滤波器,对ECG这类相位敏感的生物信号适配性好:
fs1_original = 500; fs2_original = 257; fs_target = 300; % 第一路500Hz下采样至300Hz,直接传入上下采样有理系数 ecg_300_ch1 = resample(ecg_500, 3, 5); % 第二路257Hz上采样至300Hz ecg_300_ch2 = resample(ecg_257, 300, 257);
小提示:重采样后可通过对比两路信号的时间轴范围,验证重采样长度是否匹配,避免时间对齐偏差。
内容的提问来源于stack exchange,提问作者Wiqi Khan
相关产品推荐
相关产品推荐

