Main Content

Design, visualize and explore Inverse Chebyshev filter - II

This example shows how to design a fourth-order inverse Chebyshev low-pass filter with stopband frequency of 10000 rad/sec, and epsilon of 0.01 (please see the reference section) using rffilter. This rffilter could be used in a circuit or in a rfbudget object.

The rffilter object is used to design a RF filter. A filter requires a minimum set for parameters to completely define it.

The parameters to design an inverse Chebyshev filter can be one of the following:

  • Filter order, Passband frequency, Passband and Stopband Attenuation

  • Passband and Stopband frequencies, Passband and Stopband Attenuation

  • Filter order, Stopband frequency, Stopband Attenuation

Design Filter

N           = 4;                                    % Filter order
Fs          = 1000/(2*pi);                          % Stopband frequency
epsilon     = 0.01;             
Rs          = 10*log10((1+epsilon^2)/epsilon^2);    % Stopband attenuation

Use the first set of parameters to define the filter.

r = rffilter('FilterType','InverseChebyshev','ResponseType','Lowpass',  ...
    'Implementation','Transfer function','FilterOrder',N,               ...
    'PassbandFrequency',Fs,'PassbandAttenuation',Rs,                    ...
    'StopbandAttenuation',Rs);

Note: Alternative, you can also use the third set of parameters to design the same filter:

r = rffilter('FilterType','InverseChebyshev','ResponseType','Lowpass',  ...
'Implementation','Transfer function','FilterOrder',N,                   ...
'StopbandFrequency',Fs,'StopbandAttenuation',Rs);

The limitation of this parameter set is that it assumes the passband attenuation to be fixed at 10*log10(2) dB.

Visualize magnitude response, phase response, and phase delay of filter

frequencies = linspace(0,2*Fs,1001);
rfplot(r, frequencies);

Optionally, you can also use Signal Processing Toolbox to visualize the analog filter using:

freqs(numerator{2,1},denominator)

Find zeros, poles, and gain

[z,p,k] = zpk(r);

You can obtain zeros, poles, and gain of Transfer function (S21) by:

format long g
zeros_21 = z{2,1}
zeros_21 = 4×1 complex

                          0 +      1082.39220029239i
                          0 -      1082.39220029239i
                          0 +      2613.12592975275i
                          0 -      2613.12592975275i

poles_21 = p                % Same denominator for S11, S12, S21 and S22
poles_21 = 4×1 complex

          -171.158733950657 +      476.096694464131i
          -171.158733950657 -      476.096694464131i
          -504.530434776367 +      240.786480832184i
          -504.530434776367 -      240.786480832184i

k_21     = k{2,1}
k_21 = 
       0.00999950003749688

View transfer function in factorized form

View these factor forms directly from the filter r.

disp('Numerator of Transfer function as factors:');
Numerator of Transfer function as factors:
r.DesignData.Numerator21
ans = 2×3

                         1                         0          1171572.87525381
       0.00999950003749688                         0          68280.8572899443

disp('Denominator of Transfer function as factors:');
Denominator of Transfer function as factors:
r.DesignData.Denominator
ans = 2×3

                         1          342.317467901314          255963.374687264
                         1          1009.06086955273          312529.088967178

Alternatively, use |zpk| from Control System Toolbox to view the transfer function in factorized form.

G_s = zpk(zeros_21,poles_21,k_21)
G_s =
 
     0.0099995 (s^2 + 1.172e06) (s^2 + 6.828e06)
  -------------------------------------------------
  (s^2 + 1009s + 3.125e05) (s^2 + 342.3s + 2.56e05)
 
Continuous-time zero/pole/gain model.

References

[1] Paarmann, L. D. Design and Analysis of Analog Filters: A Signal Processing Perspective. SECS 617. Boston: Kluwer Academic Publishers, 2001.