Matlab滤波器设计,通过群延迟

信息处理 matlab 过滤器设计
2022-02-12 23:08:24

我测量了滤波器的群延迟和 S 参数。S 参数采用以下形式,以试金石文件的形式呈现。

!Agilent Technologies,N5242A,MY49421489,A.09.33.09
!Agilent N5242A: A.09.33.09
日期: 2012 年 3 月 22 日星期四 19:50:06
!更正: S11(Full 2 Port(1,2))
! S21(Full 2 Port(1,2))
!S12(Full 2 Port(1,2))
!S22(Full 2 Port(1,2))
!S2P 文件:测量:S11、S21、S12、S22:Hz S dB R 50
1450000000 -0.44925556 132.79056 -43.664959 42.970737 -43.609634 45.291161 -0.41757283 131.60133

滤波器的群延迟数据如下所示:

!CSV A.01.01 !日期:3 月 22 日星期四
!来源:标准
BEGIN CH1_DATA
Freq(Hz) S21 延迟
1.45E+09 -2.02E-08
1.45E+09 -1.32E-08
1.45E+09 -1.77 E-08
1.45E+09 -1.70E-08
1.45E+09 -1.56E-08
1.45E+09 -1.36E-08
1.45E+09 -1.20E-08

我想做的是使用 MATLAB 模拟群延迟对特定波形的影响。我尝试使用 fdesign.arbgrpdelay 来插入我的群延迟数据并以某种方式观察这将如何影响波形,但我收到以下错误:

使用 fdesign.abstracttype/superdesign 时出错(第 96 行) 必须将设计选项指定为结构或参数值对。

Error in fdesign.abstracttype/design (line 11) varargout{1} = superdesign(this, varargin{:});

Error in allpassfilterarbitrarygrpdly (line 413) Hgd = design(hgd,'iirlpnorm','Weights','MaxPoleRadius',0.95);

我也尝试使用 fdatool 但我找不到通过更改组延迟来设计滤波器的方法。在所有可用的设计中,群延迟都是平坦的。

有谁知道我如何使用 matlab 中的群延迟测量来模拟滤波器的群延迟?

2个回答

最终的解决方案是在模拟 Matlab 函数的群延迟中匹配输入向量。这意味着在 Matlab 中作为输入给出的频率和群延迟向量应该是短的,而不是只要我必须给出,并且完全相同长度(这是有道理的)。最棘手的部分是找到适合并运行模拟的长度。

看看fdesign.arbgrpdelay

那里的例子是:

创建一个任意群延迟滤波器,将高频波包延迟大约 100 个样本。

他们给出了代码:

N = 18;
f = 0:.1:1;
gd = ones(size(f));
% Delay pi/2 radians/sample by 100 samples
gd(6) = 100;
d = fdesign.arbgrpdelay(N,f,gd);
Hd = design(d,'iirlpnorm','MaxPoleRadius',0.9);
% Visualize the group delay
fvtool(Hd,'analysis','grpdelay');