DSP Master VCL
|
Design analog Bessel type IIR prototype filter.
Design analog Bessel prototype filter of order Order. Place the resulting transfer function in zero-pole form in Z (zeros), P (poles) and K (gain). The cutoff frequency of the prototype filter is preset to 1 rad/sec. The filter has all zeros in infinity. The transfer function is defined as([1], p. 230):
d0
H(s) = --------
Bn(s)
(2*n)! n
d0 = ------- , Bn(s) = Sum(d[k]*s^k), k = 0,...,n
2^n*n! k=0
(2*n-k)!
d[k] = -------------- , n = order of the filter
2^(n-k)*(n-k)!
Filter poles must be scaled with d0^(1/n)
Roots of the Bessel polynomial Bn(s) are found with the PolyRoots routine. Bessel lowpass filters are charachterized by the property that the group delay is maximally flat at the origing of the s-plane. ([1], p. 228).
References:
[1] Theory and application of digital signal processing, Lawrence R. Rabiner and Bernard Gold. Prentice-Hall, 1975.
Design an analog lowpass filter with cutoff at 1.1 rad/sec.
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. BesselAnalog(Order,z,p,k); //design analog protype Wc := 1.1; LowpassToLowpass(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. BesselAnalog(Order,z,p,k); //design analog protype Wc = 1.1; LowpassToLowpass(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!
|