В настоящее время я работаю с коэффициентами БИХ-фильтра. Итак, теперь я хочу стать немного более гибким, так как довольно обременительно вводить множество фильтров в конструктор фильтров, а затем копировать каждое значение, чтобы преобразовать представление с фиксированной точкой в шестнадцатеричное.
Поэтому я планировал написать сценарий. У меня проблема: я не могу найти функцию Matlab, которая предоставляет значения так же, как это делает разработчик фильтра. Для БИХ-фильтра 8-го порядка конструктор выводит значения для каждой секции с коэффициентом усиления, 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, если в этом нет необходимости, я хотел бы спросить вас, знаете ли вы функцию, которая дает мне информацию, как это делает конструктор фильтров.