使用 Matlab 接收与 Filter Designer 相同的系数

Using Matlab to receive the same coefficients as from the Filter Designer

我目前正在处理 IIR 滤波器系数。所以现在我想变得更灵活一点,因为在过滤器设计器中键入大量过滤器有点麻烦,然后复制每个值以将固定点表示形式转换为十六进制。

所以我打算写一个脚本。我遇到的问题是:我找不到以与过滤器设计器相同的方式提供值的 matlab 函数。对于 8 阶 IIR 滤波器,Designer 输出每个部分的值,包括增益、3 个分子值和 3 个分母值,如下图所示。

现在,我在 Matlab 中尝试使用:

fs = 50000;      %Hz
fnormalize = 2/fs;
fstop1 = 1000*fnormalize; %Hz
fstop2 = 8000*fnormalize;
f1filter = 3000*fnormalize; %Hz
f2filter = 4000*fnormalize; %Hz

filterOrdnung = 4;  %erzeugt (2 * filterOrdnung) Filterkoeffizienten
                    %weil Kombination zwei Tiefpässen. 
anzahlFilter = 1;   %Anzahl der zu berechnenden Filter zur Auswertung
schrittweiteVerschiebung = 10;  %Verschiebung in Hz
astop = 60;           %Verstärkung an den Bandgrenzen des Bandpasses
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
frequenzVektor = zeros(1,anzahlFilter);     %f - Vektor für Mittenfrequenz


[z, p, k] = cheby2(filterOrdnung, astop, [f1filter f2filter], 'bandpass'); 

[sos, g] = zp2sos(z,p,k);                                               %Output form:[b01,b11,b21,1,a11,a21
                                                                        %             b02,b12,b22,1,a12,a22
                                                                        %             b0N,b1N...........a2N]
    %Also:  1. Zeile: Nullstellen Filter 1, Polstellen Filter 1,
    %       2. Zeile: Nullstellen Filter 2, Polstellen Filter 2 etc..
sos_quant = zeros(8,6);
for i = 1:filterOrdnung
    for k = 1 : 6
        sos_quant(i,k) = quantizenumeric(sos(i,k),1,16,14,'fix');   
    end
end
fvtool(sos);

但我并没有在每个部分都获得收益。因为我不想在不必要的情况下更改我的 VHDL 模型,所以我想问你,你是否知道一个函数可以像 Filter Designer 那样为我提供信息。

您可以使用滤波器设计器为您生成 Matlab 代码。这应该与设计人员用来查找系数的代码完全相同。所以我假设系数也是相同的。

在过滤器设计器中:File -> Generate MATLAB code -> Filter design function

所以您可以自己检查代码的差异。