对信号进行滤波会产生延迟。这意味着输出信号相对于输入信号在时间上发生了位移。
当移位不变时,可以通过及时移位信号来纠正延迟。
有时,滤波器对某些频率成分的延迟比其他的要多。这种现象称为相位畸变。为了补偿这种影响,您可以使用filtfilt
函数。
以500hz采样1秒的心电图读数。添加随机噪声。重置随机数生成器以获得可重复的结果
Fs = 500;N = 500;rng默认的xn = ecg(N)+0.1*randn([1 N]);tn = (0: n - 1) / Fs;
使用过滤器去除一些噪声,停止超过75赫兹的频率。使用designfilt
设计一个70阶FIR滤波器。
Nfir = 70;置= 75;firf = designfilt (“lowpassfir”,“FilterOrder”Nfir,...“CutoffFrequency”置,“SampleRate”Fs);
过滤信号并绘制它。结果比原来的更平滑,但落后了。
xf =过滤器(firf xn);情节(tn, xn、tn、xf)标题“心电图”包含“时间(s)”传奇(“原始”,“冷杉过滤”网格)
使用grpdelay
检查由滤波器引起的延迟等于滤波器阶数的一半。
grpdelay (firf N Fs)
延迟=意味着(grpdelay (firf))
延迟= 35
排列数据。将滤波后的信号移去第一个信号延迟
样本。删除最后一个延迟
样本的原始和时间向量。
tt = tn (1: end-delay);sn = xn (1: end-delay);科幻小说= xf;科幻小说(1:延迟)= [];
画出信号并确认它们对齐。
情节(tt、锡、tt、科幻)标题“心电图”包含(“时间(s)”)传说(原始信号的,“过滤信号转移”网格)
使用7阶IIR滤波器重复计算。
Niir = 7;iir = designfilt (“lowpassiir”,“FilterOrder”Niir,...“HalfPowerFrequency”置,“SampleRate”Fs);
过滤信号。滤波后的信号比原始信号更清晰,但与原始信号相比,其时间滞后。它也会由于滤波器的非线性相位而失真。
xfilter =过滤器(iir、xn);情节(tn、xn tn, xfilter)标题“心电图”包含“时间(s)”传奇(“原始”,“过滤”)轴([0.25 0.55 -1 1.5])网格
对滤波器引入的组延迟的观察表明,延迟是频率相关的。
grpdelay (iir, N, Fs)
使用以下方法对信号进行滤波filtfilt
.有效地消除了延迟和失真。使用filtfilt
当保持信号的相位信息完整是至关重要的。
xfiltfilt = filtfilt (iir、xn);情节(tn, xn)在情节(tn, xfilter)情节(tn, xfiltfilt)标题“心电图”包含“时间(s)”传奇(“原始”,“过滤”,“filtfilt”)轴([0.25 0.55 -1 1.5])网格