Этот пример показывает, как определить передаточную функцию для обратного чебышевского фильтра lowpass пятого порядка с ослаблением полосы пропускания 1 дБ, частотой отключения 1 рад/с и минимальным ослаблением 50 дБ в полосе остановки. Определите амплитудную характеристику при 2 рад/с [1].
The 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
объект для создания необходимого фильтра. Единственным типом реализации для Обратного Чебышева является '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
Опционально используйте 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. Для примера к числителю 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);
Используя всплывающие подсказки, найдена амплитуда 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] Ellis, Michael G. Electronic Filter Analysis and Synthesis. Бостон: Артек Хаус, 1994.