补偿 FIR 滤波器引入的延迟

本文通过一个示例说明了在使用有限脉冲响应滤波器对信号(如心电图)进行滤波时,如何处理引入的延迟问题。通过设计一个低通滤波器消除高频噪声,然后利用grpdelay函数确定滤波器的延迟量。通过对滤波后的信号进行时移,可以有效地对齐原始信号和滤波信号,从而减少滞后影响。
摘要由CSDN通过智能技术生成

        对信号进行滤波会引入延迟。这意味着相对于输入,输出信号在时间上有所偏移。此示例说明如何抵消这种影响。

        有限脉冲响应滤波器经常将所有频率分量延迟相同的时间量。这样,我们就很容易通过对信号进行时移处理来针对延迟进行校正。

        以 500 Hz 的频率对心电图读数采样,采样时间为 1 秒。添加随机噪声。重置随机数生成器以获得可再现性。

Fs = 500;
N = 500;
rng default

xn = ecg(N)+0.25*randn([1 N]);
tn = (0:N-1)/Fs;

使用滤波器阻挡 75 Hz 以上的频率,以消除一部分噪声。使用designfilt设计一个阶数为 70 的滤波器。

nfilt = 70;
Fst = 75;

d = designfilt('lowpassfir','FilterOrder',nfilt, ...
               'CutoffFrequency',Fst,'SampleRate',Fs);

        对信号进行滤波并绘图。与原始信号相比,结果更平滑,但存在滞后。

xf = filter(d,xn);

plot(tn,xn)
hold on, plot(tn,xf,'-r','linewidth',1.5), hold off
title 'Electrocardiogram'
xlabel 'Time (s)', legend('Original Signal','Filtered Signal')

        如图所示: 

        使用 grpdelay 检查滤波器造成的延迟是否等于滤波器阶数的一半。

grpdelay(d,N,Fs)

        如图所示:

delay = mean(grpdelay(d))


delay = 35

        对滤波后的信号进行时移以对齐数据。删除信号的前delay个样本。删除原始采样点和时间向量的最后delay个采样点。

tt = tn(1:end-delay);
sn = xn(1:end-delay);

sf = xf;
sf(1:delay) = [];

        对信号绘图,并验证它们是否对齐。

plot(tt,sn)
hold on, plot(tt,sf,'-r','linewidth',1.5), hold off
title 'Electrocardiogram'
xlabel('Time (s)'), legend('Original Signal','Filtered Shifted Signal')

        如图所示:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值