数字滤波器 群延时
Matlab中计算:
在matlab中,filterdesigner 工具中,任何设计出来的滤波器,可直接查看其群延迟波形,不管 FIR 滤波器 还是 IIR 滤波器
在MATLAB中,计算FIR滤波器的群延迟(group delay)可以通过几种不同的方法来实现。一种简单的方法是使用filter函数和grpdelay函数,其中grpdelay函数可以直接计算数字滤波器的群延迟。
以下是一个使用grpdelay函数计算FIR滤波器群延迟的例子:
| % 假设我们有一个FIR滤波器的系数b | |
| b = [1 2 3 2 1]; % 示例FIR滤波器系数 | |
| % 计算滤波器的群延迟 | |
| [delay, freqz] = grpdelay(b, 1, length(b)-1); | |
| % 绘制群延迟图 | |
| figure; | |
| plot(freqz/pi, delay); | |
| xlabel('Normalized Frequency (\times\pi rad/sample)'); | |
| ylabel('Group Delay (samples)'); | |
| title('Group Delay of FIR Filter'); | |
| grid on; |
在这个例子中,grpdelay函数接受三个参数:滤波器系数b,采样频率(这里假设为1),以及频率向量的范围(这里从0到length(b)-1,表示滤波器的阶数减1)。函数返回群延迟delay和对应的归一化频率freqz。
请注意,grpdelay函数返回的是在每个频率点上的群延迟值。归一化频率是以π为单位的,即freqz/pi。
如果你想要手动计算群延迟,你可以使用滤波器的频率响应来计算相位响应,然后通过对相位响应求导得到群延迟。但是,通常使用grpdelay函数会更加方便和准确。
还要注意的是,对于IIR滤波器,群延迟的计算可能会更加复杂,因为IIR滤波器通常不具有线性相位。在这种情况下,你可能需要采用其他方法来估计或计算群延迟。
matlab中 help grpdelay 可查看相关的示例, 如下:

FIR滤波器群延时


CIC滤波器群延时
根据推导以及计算CIC滤波器的群延迟为:
N=(n/2)*(D+1),
其中n为滤波器级数,D为滤波器抽取插值倍速,由下图(D+1)容易理解,为什么是n/2目前还无法理解,以后再来补充。

补充如下:
-
qq_396989592024.02.061
n是级联的滤波器个数。每个滤波器的时延是 (阶数+1)/2,(fir滤波器性质,因其系数奇或偶对称性质)。总时延 N = n*(阶数+1)/2 -
-
北京理工大学_刘人杰作者回复qq_39698959前天 09:33
您好,还是有些疑问:每个滤波器的时延是 (阶数+1)/2,目前还是不太懂这个二分之一是从何而来的,请再解释一下,谢谢。 -
北京理工大学_刘人杰作者回复qq_396989592024.02.17
奥,里面还用了直接二型那种系数对称,所以是二分之一的时延,懂了,谢谢您。
-
参考链接
群延迟函数(group delay function)&群延迟滤波器
【STM32F429的DSP教程】第41章 FIR滤波器的群延迟(重要)


浙公网安备 33010602011771号