我正在尝试在 Matlab 中实现 IIR 带通。有两点我不明白。但首先,让我发布代码。
fs = 50000; %Hz
f1filter = 1000; %Hz
f2filter = 2000; %Hz
filterOrdnung = 6; %erzeugt (2 * filterOrdnung) Filterkoeffizienten
anzahlFilter = 5; %Anzahl der zu berechnenden Filter zur Auswertung
schrittweiteVerschiebung = 1000; %Verschiebung in Hz
astop = 20; %Verstärkung an den Bandgrenzen des Bandpasses
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
k = zeros(anzahlFilter, 1); %Vektor für Gain
z = zeros(2*filterOrdnung,anzahlFilter); %Matrix für
%Nullstellen
p = zeros(2*filterOrdnung, anzahlFilter); %Matrix für
%Polstellen
sos = zeros(anzahlFilter * filterOrdnung + (anzahlFilter - 1), 6); %Matrix für Filterkoeffizienten
[z(:,1), p(:,1), k(1,1)] = cheby2(filterOrdnung, astop, [((2*f1filter)/fs)...
((2*f2filter)/fs)]);
[sos(1:6,:), g] = zp2sos(z(:,1),p(:,1),k(1,1)); %Output form:[b01,b11,b21,1,a11,a21
% b02,b12,b22,1,a12,a22
% b0N,b1N...........a2N]
fvtool(sos(1:6, :),'Analysis','freq');
所以我想创建一个带宽为 1000Hz 到 2000Hz 的带通。滤波器阶数为 6 阶,截止衰减应为 20dB。我想要二阶表格的结构。(顺便说一句,是否有任何特定的 Matlab 函数来创建 IIR 滤波器作为 Directform II 结构的级联?)
我正在创建比我现在需要的更大的“sos”,因为我想创建几个不同的带通,但让我们只关注这个例子。
1)第一个问题:为什么我只有 6 阶 IIR 时会收到 12 个分子和 12 个分母的系数?在我读过的书中,对于 6 阶 IIR,我应该收到 7 个分子和 7 个分母系数,第一个分母系数 = 1。
2)在代码的头部,我声明 astop 为 20dB。cheby2 的 Matlab 文档告诉我,这是阻带的衰减。但是当我让代码运行并查看幅度时,通带的幅度约为20dB。我预计它是 0dB,而阻带应该是 -20dB。不过,规范的频率似乎是正确的。我希望我能很好地解释我的问题。
