В этом примере показано, как определить передаточную функцию для обратного фильтра нижних частот пятого порядка Чебышева с затуханием полосы пропускания 1 дБ, частотой отсечки 1 рад/с и минимальным затуханием 50 дБ в полосе отсечки. Определите амплитудную характеристику при 2 рад/с [1].
rffilter object используется для проектирования радиочастотного фильтра. Для полного определения фильтра требуется минимальный набор параметров. См. таблицу в rffilter страница документации, которая отражает этот набор требуемых параметров. Каждый набор параметров приводит к соответствующему синтаксису. Введите эти параметры как пары имя-значение в rffilter для проектирования указанного фильтра. Обратите внимание, что требуемые, но не определенные параметры принимают значения по умолчанию.
После инициализации rffilter объект, свойство DesignData содержит полное решение разработанного фильтра. Это структура, которая содержит такие поля, как вычисленные факторизованные многочлены для построения передаточной функции.
N = 5; % Filter order Fp = 1/(2*pi); % Passband cutoff frequency Ap = 1; % Passband attenuation As = 50; % Stopband attenuation
Использовать rffilter для создания требуемого фильтра. Единственным типом реализации для Inverse Chebyshev является Transfer function.
r = rffilter('FilterType','InverseChebyshev','ResponseType','Lowpass', ... 'Implementation','Transfer function','FilterOrder',N, ... 'PassbandFrequency',Fp,'StopbandAttenuation',As, ... 'PassbandAttenuation',Ap);
Использовать tf функция для формирования полиномов передаточной функции.
[numerator, denominator] = tf(r); format long g
Отображение Numerator21 полиномиальных коэффициентов.
disp('Numerator polynomial coefficients of Transfer function');Numerator polynomial coefficients of Transfer function
disp(numerator{2,1}); Columns 1 through 3
0.0347736250821381 0 0.672768334081369
Columns 4 through 5
0 2.6032214373595
Показать коэффициенты многочлена Знаменателя.
disp('Denominator polynomial coefficients of Transfer function');Denominator polynomial coefficients of Transfer function
disp(denominator);
Columns 1 through 3
1 3.81150884154936 7.2631952221038
Columns 4 through 6
8.61344575257214 6.42982763112227 2.6032214373595
При необходимости используйте панель инструментов системы управления для визуализации всех функций передачи.
G_s = tf(numerator,denominator)
G_s =
From input 1 to output...
s^5
1: --------------------------------------------------------
s^5 + 3.812 s^4 + 7.263 s^3 + 8.613 s^2 + 6.43 s + 2.603
0.03477 s^4 + 0.6728 s^2 + 2.603
2: --------------------------------------------------------
s^5 + 3.812 s^4 + 7.263 s^3 + 8.613 s^2 + 6.43 s + 2.603
From input 2 to output...
0.03477 s^4 + 0.6728 s^2 + 2.603
1: --------------------------------------------------------
s^5 + 3.812 s^4 + 7.263 s^3 + 8.613 s^2 + 6.43 s + 2.603
s^5
2: --------------------------------------------------------
s^5 + 3.812 s^4 + 7.263 s^3 + 8.613 s^2 + 6.43 s + 2.603
Continuous-time transfer function.
frequencies = linspace(0,1,1001); Sparam = sparameters(r, frequencies);
Примечание: S-параметры вычисляют передаточную функцию с использованием квадратичных (lowpass/high pass) или квартических (bandpass/bandstop) факторизованных форм. Эти факторы используются для построения полиномов. Полиномиальная форма является численно нестабильной для большего порядка фильтрации, поэтому предпочтительной формой является факторизованная квадратичная/квартическая форма. Эти факторизованные части присутствуют в r. Данные проектирования. Например, к числителю 21 можно обратиться, используя r. DesignData. Numerator21.
l = rfplot(Sparam,2,1);

freq = 2/(2*pi); hold on; setrfplot('noengunits',false);
Примечание.Для использования rfplot и печати на одной фигуре используйте setrfplot. Для получения информации введите help setrfplot в командной строке.
plot(freq*ones(1,101),linspace(-120,20,101)); setrfplot('engunits',false); [~,freq_index]= min(abs(frequencies-freq)); datatip(l,'DataIndex',freq_index);

С помощью метода datatip было установлено, что величина 2 рад/с равна -36,59 дБ.
Вычислите точное значение 2 рад/сек.
S_freq = sparameters(r,freq);
As_freq = 20*log10(abs(rfparam(S_freq,2,1)));
sprintf('Amplitude response at 2 rad/sec is %d dB',As_freq)ans = 'Amplitude response at 2 rad/sec is -3.668925e+01 dB'
Fs = r.DesignData.Auxiliary.Wx*r.PassbandFrequency;
sprintf('Stopband frequency at -%d dB is: %d Hz',As, Fs)ans = 'Stopband frequency at -50 dB is: 3.500241e-01 Hz'
[1] Эллис, Майкл Г. Электронный анализ и синтез фильтров. Бостон: Artech House, 1994.