Main Content

This example shows how to determine the transfer function for a fifth-order inverse Chebyshev low-pass filter with 1 dB passband attenuation, cutoff frequency of 1 rad/sec, and a minimum attenuation of 50 dB in the stopband. Determine the amplitude response at 2 rad/sec [1].

The `rffilter object`

is used to design a RF Filter. A filter requires a minimum set of parameters for it to be completely defined. Refer to the table in the `rffilter`

documentation page which reflects this set of required parameters. Each set of parameters result in its corresponding syntax. Input these parameters as name-value pairs to `rffilter`

to design the specified filter. Note that the parameters which are required but are not defined assume default values.

After initialization of an `rffilter`

object, the property `DesignData`

contains the complete solution of the filter designed. It is a structure which contains fields such as the computed factorized polynomials for the construction of the transfer function.

N = 5; % Filter order Fp = 1/(2*pi); % Passband cutoff frequency Ap = 1; % Passband attenuation As = 50; % Stopband attenuation

Use `rffilter`

object to create a desired filter. The only implementation type for Inverse Chebyshev is 'Transfer function'.

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

Use `tf`

function to generate transfer function polynomials.

[numerator, denominator] = tf(r); format long g

Display Numerator21 polynomial coefficients.

`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

Display Denominator polynomial coefficients.

`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

Optionally, use Control System Toolbox to visualize all transfer functions.

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);

Note: S-parameters computes the transfer function using quadratic (lowpass/highpass) or quartic (bandpass/bandstop) factorized forms. These factors are used to construct the polynomials. The polynomial form is numerically unstable for larger filter order so the preferred form is the factorized quadratic/quartic forms. These factorized parts are present in r.DesignData. For example, the numerator21 can be accessed using r.DesignData.Numerator21.

l = rfplot(Sparam,2,1);

freq = 2/(2*pi); hold on; setrfplot('noengunits',false);

Note: To use rfplot and plot on the same figure use setrfplot. Type 'help setrfplot' in command window for information.

plot(freq*ones(1,101),linspace(-120,20,101)); setrfplot('engunits',false); [~,freq_index]= min(abs(frequencies-freq)); datatip(l,'DataIndex',freq_index);

Using the datatip, the magnitude at 2 rad/sec is found to be -36.59 dB.

Evaluate the exact value at 2 rad/sec.

```
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*. Boston: Artech House,
1994.