Спроектируйте, Визуализируйте и Исследуйте Обратный Чебышевский фильтр - я

В этом примере показано, как определить передаточную функцию для инверсии пятого порядка Чебышев фильтр lowpass с затуханием полосы пропускания на 1 дБ, частотой среза 1 рад/секунда и минимальным затуханием 50 дБ в полосе задерживания. Определите амплитудный ответ в 2 рад/секунда [1].

rffilter object используется, чтобы спроектировать Фильтр RF. Фильтр требует, чтобы минимальный набор параметров для него был полностью задан. Обратитесь к таблице в rffilter страница документации, которая отражает этот набор обязательных параметров. Каждый набор параметров приводит к своему соответствующему синтаксису. Введите эти параметры как пары "имя-значение" к rffilter спроектировать заданный фильтр. Обратите внимание на то, что параметры, которые требуются, но не заданы, принимают значения по умолчанию.

После инициализации rffilter объект, свойство DesignData содержит полное решение спроектированного фильтра. Это - структура, которая содержит поля, такие как вычисленные разложенные на множители полиномы для конструкции передаточной функции.

Спроектируйте Чебышевский фильтр Типа II

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.

l = 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));
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] Эллис, Майкл Г. Электронный анализ фильтра и синтез. Бостон: дом Artech, 1994.

Для просмотра документации необходимо авторизоваться на сайте