You are here: Symbol Reference > IIRFilters Namespace > Functions > IIRFilters.ChebyshevIIAnalog Function
DSP Master VCL
ContentsIndex
PreviousUpNext
IIRFilters.ChebyshevIIAnalog Function

Design analog Chebyshev type I IIR prototype filter.

Pascal
procedure ChebyshevIIAnalog(Order: integer; StopRipple: double; const z: TVec; const p: TVec; out k: double);

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".

Design an analog bandpass filter with passband between 2 and 3 rad/sec and with 20dB ripple in the stopband. 

 

 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;

 

    #include "MtxExpr.hpp"
#include "MtxVecEdit.hpp"
#include "MtxVecTee.hpp"
#include "SignalUtils.hpp"
#include "IirFilters.hpp"
#include "LinearSystems.hpp"

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  sVector z,p, num,den, FreqFr, Response;
  int   Order;
  double k,Wc,BW;

  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;
}
Copyright (c) 1999-2025 by Dew Research. All rights reserved.
What do you think about this topic? Send feedback!