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

Design analog Chebyshev type I IIR prototype filter.

Pascal
procedure ChebyshevIAnalog(Order: integer; PassRipple: double; const z: TVec; const p: TVec; out k: double);

Design analog Chebyshev type I lowpass prototype filter of order Order. Place the resulting transfer function in zero-pole form in Z (zeros), P (poles) and K (gain). PassRipple defines the ripple of the passband (dB). The cutoff frequency of the prototype filter is preset to 1 rad/sec, the unit circle. Chebyshevs type I filters are all-pole designs and are equiripple in the passband. The filter has all zeros in infinity. The design formulas are found in [1] p. 232:


Poles: p[k] = s[k] + j*W[k]

s[k] = -sinh(Phi)*sin((2*k-1)*Pi/(2*n))
W[k] =  cosh(Phi)*cos((2*k-1)*Pi/(2*n))

sinh(phi) =  0.5*(v - 1/v)
cosh(phi) =  0.5*(v + 1/v)

       1 + (1 + eps^2)^0.5
v = ( --------------------- )^(1/n)
              eps

n - order of the filter
k = 1,...,n
 

 

References:  

[1] "Theory and application of digital signal processing, Lawrence R. Rabiner and Bernard Gold. Prentice-Hall, 1975".

Design an analog highpass filter with cutoff frequency at 2 rad/sec with a 0.2dB ripple in the passband. 

 

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.
    ChebyshevIAnalog(Order,0.2,z,p,k);  //design analog protype
    Wc := 2;
    LowpassToHighpass(z,p,k,WC);  //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.
    ChebyshevIAnalog(Order,0.2,z,p,k);  //design analog protype
    Wc = 2;
    LowpassToHighpass(z,p,k,Wc);  //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!