В этом примере показано, как определить передаточную функцию для инверсии пятого порядка Чебышев фильтр lowpass с затуханием полосы пропускания на 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
объект создать желаемый фильтр. Единственным типом реализации для Обратного Чебышева является 'Передаточная функция'.
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
Опционально, используйте Control System Toolbox, чтобы визуализировать все передаточные функции.
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/highpass), или биквадратный (bandpass/bandstop) разложил на множители формы. Эти факторы используются, чтобы создать полиномы. Полиномиальная форма численно неустойчива для большего порядка фильтра, таким образом, предпочтительная форма является разложенными на множители квадратичными/биквадратными формами. Эти разложенные на множители части присутствуют в r. DesignData. Например, к numerator21 можно получить доступ с помощью r.DesignData.Numerator 21.
rfplot(Sparam,2,1)
freq = 2/(2*pi); hold on; setrfplot('noengunits',false);
Примечание: Чтобы использовать rfplot и график на той же фигуре используют setrfplot. Введите 'справку setrfplot' в командном окне для получения информации.
plot(freq*ones(1,101),linspace(-120,20,101));
% Using the datacursor the magnitude at 2 rad/sec is found to be -36.59 dB
Оцените точное значение в 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, 1994.