procedure ChebyshevIIAnalog(Order: Integer; StopRipple: Double; z: TVec; p: TVec; out k: Double);
Design an analog Chebyshev type II (inverse Chebyshev) lowpass prototype filter of order Order with StopRipple dB of equiripple attenuation in the stopband, cutoff fixed at 1 rad/s. Returns zero-pole-gain with finite imaginary-axis zeros: |H(jomega)|^2=1/(1+[varepsilon^2 T_n^2(1/omega)]^(-1)), varepsilon=1/(sqrt(10^(R_s/10)-1)), z_k=j/(cos((2k-1)pi)/2n). The magnitude is maximally flat in the passband and equiripple in the stopband; at the stopband edge omega=1 it equals 10^(-R_s/20) where R_s=StopRipple. Domain: 1 <= Order <= MaxIirOrder, StopRipple>0 dB. Poles satisfy Re(p_k)<0 (stable). z and p must share precision or an exception is raised.
| # | Name | Type | Description |
|---|---|---|---|
| 1 | Order | Integer | |
| 2 | StopRipple | Double | scalar |
| 3 | z | TVec | source TVec |
| 4 | p | TVec | source TVec |
| 5 | k | Double |
Result: stored in self (calling object)
Design analog Chebyshev type II lowpass prototype filter of order Order. Place the resulting
transfer function in zero-pole form in Z (zeros), P (poles) and K (gain). Ripple defines the StopRipple (dB) of the stopband.The cutoff frequency of the prototype filter is preset to 1 rad/sec, the unit circle.
Chebyshevs type II filters have poles and zeros and are equiripple in the stopband. The design formulas are found in [1] p. 232:
Wr
Zeros: z[k] = j* --------------------- cos((2*k-1)/(2*n)*Pi)
Poles: p[k] = s[k] + j*W[k] Wr*a[k]
s[k] = ----------------- a[k]^2 + b[k]^2
-Wr*b[k]
W[k] = ----------------- a[k]^2 + b[k]^2
a[k] = -sinh(Phi)sin((2*k-1)*Pi/(2*n)) b[k] = cosh(Phi)*cos((2*k-1)*Pi/(2*n)) sinh(phi) = 0.5(v - 1/v) cosh(phi) = 0.5*(v + 1/v) v = (A + (A^2 - 1)^0.5)^(1/n), A = 1/sr^2 n - order of the filter k = 1,...,n
Wr - stopband edge
sr - stopband ripple
References:
[1] "Theory and application of digital signal processing, Lawrence R. Rabiner and Bernard Gold. Prentice-Hall, 1975".
uses MtxExpr, Math387, MtxVec, SignalUtils, MtxVecTee, MtxVecEdit, IirFilters,
LinearSystems;
procedure TForm1.Button1Click(Sender: TObject);
var z,p, num,den, FreqFr,Response: Vector;
Order: integer;
k,Wc,BW: double;
begin
Order := 5; //design a fifth order filter.
ChebyshevIIAnalog(Order,20,z,p,k); //design analog protype
Wc := Sqrt(2*3);
BW := 3-2;
LowpassToBandpass(z,p,k,WC,BW); //frequency transformation in s-domain
ZeroPoleToTransferFun(num,den,z,p,k);
FreqFr.Length := 1000; //Define the frequency grid (logarithmic)
LogRamp(FreqFr,-1,1); //between 0.1 (=10^(-1)) and 10 (=10^1) rad/sec
FrequencyResponseS(num,den,FreqFr,Response); //Laplace
DrawIt(Response); //Y axis linear, X axis logarithmic;
end;