补偿滤波器带来的延迟和失真
对信号进行滤波会产生延迟。这意味着输出信号相对于输入在时间上移位。
当位移为常数时,可以通过及时移动信号来修正延迟。
有时滤波器对某些频率分量的延迟比对其他频率分量的延迟更大。这种现象叫做相位失真。为了补偿这种影响,可以使用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滤波器。
nir = 70;Fst = 75;Firf = designfilt(“lowpassfir”,“FilterOrder”Nfir,...“CutoffFrequency”置,“SampleRate”Fs);
对信号进行滤波并绘制图像。结果比原来的平滑,但落后于它。
Xf = filter(firf,xn);情节(tn, xn、tn、xf)标题“心电图”包含“时间(s)”传奇(“原始”,“冷杉过滤”网格)
使用grpdelay
检查由滤波器引起的延迟是否等于滤波器顺序的一半。
grpdelay (firf N Fs)
延迟= mean(grpdelay(firf))
延迟= 35
排列数据。通过移除第一个信号来移动过滤后的信号延迟
样本。删除最后一个延迟
原向量和时间向量的样本。
Tt = tn(1:end-delay);Sn = xn(1:end-delay);Sf = xf;Sf(1:延迟)= [];
绘制信号并验证它们是否对齐。
情节(tt、锡、tt、科幻)标题“心电图”包含(“时间(s)”)传说(原始信号的,“滤波移位信号”网格)
使用7阶IIR滤波器重复计算。
Niir = 7;Iir = designfilt(“lowpassiir”,“FilterOrder”Niir,...“HalfPowerFrequency”置,“SampleRate”Fs);
过滤信号。过滤后的信号比原始信号更清晰,但相对于原始信号有时间上的滞后。由于滤波器的非线性相位也会引起失真。
Xfilter = filter(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)在Plot (tn,xfilter) Plot (tn,xfiltfilt)标题“心电图”包含“时间(s)”传奇(“原始”,“过滤”,“filtfilt”)轴([0.25 0.55 -1 1.5]