DSP Master VCL
|
Transform the zeros and poles of a filter in s-domain to z-domain.
Transform the zeros Z and poles P of a filter from s-domain to z-domain, where FS is the sampling frequency. The transformation is defined as ([1], p. 224):
s + a --> 1 - z^(-1)*e^(-a/FS)
FS - sampling frequency
a - pole or zero
If the analog system has zeros with center frequencies greater then half the sampling frequency, their z-plane positions will be greatly aliased [1]. The transformation has the advantage of not affecting the phase response of the original transfer function.
References:
[1] Theory and application of digital signal processing, Lawrence R. Rabiner and Bernard Gold. Prentice-Hall, 1975
A bessel analog lowpass filter is converted to z-domain by using the matched Z transform. The analog filter has a normalized cutoff frequency at 1 rad/sec.
uses MtxExpr, Math387, MtxVec, MtxVecTee, MtxVecEdit, LinearSystems, IirFilters, SignalUtils; 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 := 0.5; //request a cutoff at 0.5 rad/sec LowpassToLowpass(z,p,k,Wc); MatchedZTransform(z,p,2); //Sampling frequency = 2 k := k/ComputeGain(z,p,1); z.Size(p.Length,false); z.SetVal(-1); //add missing zeros at -1 ZeroPoleToTransferFun(num,den,z,p,k); FrequencyResponse(num,den,Response,64); //zero padding set to 64 DrawIt(20*Log10(Abs(Response)),'Magnitude'); DrawIt(PhaseSpectrum(Response)*(180/Pi),'Phase'); 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 = 0.5; //request a cutoff at 0.5 rad/sec LowpassToLowpass(z,p,k,Wc); MatchedZTransform(z,p,2); //Sampling frequency = 2 k = k/ComputeGain(z,p,1); z.Size(p.Length,false); z.SetVal(-1); //add missing zeros at -1 ZeroPoleToTransferFun(num,den,z,p,k); FrequencyResponse(num,den,Response,64); //zero padding set to 64 DrawIt(20*Log10(Abs(Response)),"Magnitude",false); DrawIt(PhaseSpectrum(Response)*(180/PI),"Phase",false); }
Copyright (c) 1999-2025 by Dew Research. All rights reserved.
|
What do you think about this topic? Send feedback!
|