DewDSPMasterNET
ChebyshevIAnalog Routine
Summary
Design analog Chebyshev type I IIR prototype filter.

Unit
IIRFilters

Declaration
Procedure ChebyshevIAnalog(Order: integer; PassRipple: TSample; z, p: TVec; out k: TSample);

Description
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
Categories
IIR filter design routines
 See Also 
[1] "Theory and application of digital signal processing, Lawrence R. Rabiner and Bernard Gold. Prentice-Hall, 1975". 
ChebyshevIIFilter 
LowpassToLowpass 
Bilinear 

Example 1

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: TSample; 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 "MtxVecCPP.h" //MtxVecCPP.cpp must be included in the project #include "MtxVecEdit.hpp" #include "MtxVecTee.hpp" #include "SignalUtils.hpp" #include "IirFilters.hpp" #include "LinearSystems.hpp" void __fastcall TForm1::BitBtn1Click(TObject *Sender) { Vector 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; }
using Dew.Math; using Dew.Math.Editors; using Dew.Math.Units; using Dew.Signal; using Dew.Signal.Units; using Dew.Math.Tee; using Dew.Signal.Tee; private void button1_Click(object sender, EventArgs e) { Vector z = new Vector(0); Vector p = new Vector(0); Vector num = new Vector(0); Vector den = new Vector(0); Vector Response = new Vector(0); Vector FreqFr = new Vector(0); double k, Wc; int Order = 5; //design a fifth order filter. IIRFilters.ChebyshevIAnalog(Order,0.2,z, p, out k); //design analog protype Wc = 2; //cutoff frequency LinearSystems.LowpassToLowpass(z, p, ref k, Wc); LinearSystems.ZeroPoleToTransferFun(num, den, z, p, k); FreqFr.Length = 1000; SignalUtils.LogRamp(FreqFr, -1, 1); SignalUtils.FrequencyResponseS(num, den, FreqFr, Response, 0); TeeChart.DrawIt(Response, "Frequency response", false); }

Copyright 2008 Dew Research
http://www.dewresearch.com