数字滤波器 群延时

Matlab中计算:

  在matlab中,filterdesigner 工具中,任何设计出来的滤波器,可直接查看其群延迟波形,不管 FIR  滤波器 还是 IIR 滤波器

在MATLAB中,计算FIR滤波器的群延迟(group delay)可以通过几种不同的方法来实现。一种简单的方法是使用filter函数和grpdelay函数,其中grpdelay函数可以直接计算数字滤波器的群延迟。

以下是一个使用grpdelay函数计算FIR滤波器群延迟的例子:

matlab复制代码
  % 假设我们有一个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.06
      1
      n是级联的滤波器个数。每个滤波器的时延是 (阶数+1)/2,(fir滤波器性质,因其系数奇或偶对称性质)。总时延 N = n*(阶数+1)/2
      • burse_liu
        北京理工大学_刘人杰作者回复qq_39698959前天 09:33
        您好,还是有些疑问:每个滤波器的时延是 (阶数+1)/2,目前还是不太懂这个二分之一是从何而来的,请再解释一下,谢谢。
      • burse_liu
        北京理工大学_刘人杰作者回复qq_396989592024.02.17
        奥,里面还用了直接二型那种系数对称,所以是二分之一的时延,懂了,谢谢您。

 

参考链接

群延迟函数(group delay function)&群延迟滤波器

CIC滤波器群延迟

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

 

posted @ 2024-02-28 14:42  博客园—哆啦A梦  阅读(1460)  评论(0)    收藏  举报