首页 > 其他分享 >【STM32F407的DSP教程】第41章 FIR滤波器的群延迟(重要)

【STM32F407的DSP教程】第41章 FIR滤波器的群延迟(重要)

时间:2022-10-08 14:32:21浏览次数:80  
标签:FIR 滤波器 滤波 DSP 41 pi sin 延迟

​​

第41章       FIR滤波器的群延迟(重要)

本章节为大家介绍FIR滤波器的群延迟问题。

41.1 FIR滤波器介绍

41.2 总结

 

41.1 FIR滤波后的群延迟

波形经过FIR滤波器后,输出的波形会有一定的延迟。对于线性相位的FIR,这个群延迟就是一个常数。但是实际应用中这个群延迟是多少呢? 关于群延迟的数值,filterDesigner工具箱会根据用户的配置计算好。

比如前面章节设计的28阶FIR高通,低通,带通和带阻滤波器的群延迟就是14,反映在实际的采样值上就是滤波后输出数据的第15个才是实际滤波后的波形数据起始点。

下面是群延迟采样点的位置:

【STM32F407的DSP教程】第41章       FIR滤波器的群延迟(重要)_数据

 

细心的读者可能发现全面做低通,高通,带通和带阻滤波后,输出的波形前面几个点感觉有问题,其实就是群延迟造成的。

为了更好的说明这个问题,下面再使用Matlab举一个低通和一个高通滤波的例子:信号由50Hz正弦波和200Hz正弦波组成,采样率1Kbps,截止频率125Hz,采样320个数据,采用函数fir1进行设计,滤波器阶数设置为28。下面是低通滤波器的Matlab代码,将原始信号从第一个点开始显示,而滤波后的信号从群延迟后的第15个点开始显示:

fs=1000;                  %设置采样频率 1K
N=320; %采样点数
n=0:N-1;
t=n/fs; %时间序列
f=n*fs/N; %频率序列

x1=sin(2*pi*50*t);
x2=sin(2*pi*200*t);
x=sin(2*pi*50*t)+sin(2*pi*200*t); %50Hz和200Hz正弦波混合

plot(n, x1, 'b'); %绘制信号x的波形
xlabel('时间');
ylabel('幅值');
title('原始信号和滤波后信号');
hold on;

b=fir1(28, 125/500); %获得滤波器系数,截止频率125Hz.
y=filter(b, 1, x);
plot(n(1:305), y(15:319), 'r');
legend('原始信号','滤波后信号');
grid on;

Matlab的运行结果如下:

【STM32F407的DSP教程】第41章       FIR滤波器的群延迟(重要)_高通滤波_02

 

可以看出,显示波形基本重合,这个说明14个采样点的群延迟是正确的。下面同样使用上面的那个例子实现一个高通滤波器,截止频率是125Hz,阶数同样设置为28,将原始信号从第一个点开始显示,而滤波后的信号从群延迟后的第15个点开始显示,Matlab运行代码如下:

fs=1000;                  %设置采样频率 1K
N=320; %采样点数
n=0:N-1;
t=n/fs; %时间序列
f=n*fs/N; %频率序列

x1=sin(2*pi*50*t);
x2=sin(2*pi*200*t);
x=sin(2*pi*50*t)+sin(2*pi*200*t); %50Hz和200Hz正弦波混合

plot(n, x2, 'b'); %绘制信号x的波形
xlabel('时间');
ylabel('幅值');
title('原始信号和滤波后信号');
hold on;

b=fir1(28, 125/500, 'high'); %获得滤波器系数,截止频率125Hz.
y=filter(b, 1, x);
plot(n(1:305), y(15:319), 'r');
legend('原始信号','滤波后信号');
grid on;

Matlab运行结果如下:

【STM32F407的DSP教程】第41章       FIR滤波器的群延迟(重要)_正弦波_03

 

可以看出,显示波形基本重合,这个说明14个采样点的群延迟也是是正确的。大家在使用FIR滤波器的时候一定要注意这个问题。

41.2 总结

本章节介绍的知识点比较重要,首次使用FIR容易在这个地方不理解。

 

微信公众号:armfly_com


标签:FIR,滤波器,滤波,DSP,41,pi,sin,延迟
From: https://blog.51cto.com/u_15785540/5737627

相关文章