You are here: Symbol Reference > Dew.Signal Namespace > LinearSystems Class > LinearSystems Methods > MatchedZTransform Method
Dew DSP for .NET
Contents
PreviousUpNext
LinearSystems.MatchedZTransform Method

Transform the zeros and poles of a filter in s-domain to z-domain.

C#
public MatchedZTransform(TVec z, TVec p, double FS);

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.

  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,BW;
     double FS = 2;
     int Order = 5; //design a fifth order filter.

     IIRFilters.BesselAnalog(Order,z,p,out k);  //design analog protype
     Wc = 0.5;
     LinearSystems.LowpassToLowpass(z,p,ref k,Wc);  //frequency transformation in s-domain
     LinearSystems.MatchedZTransform(z, p, FS);
     k = k/LinearSystems.ComputeGain(z,p,1);
     z.Size(p.Length,false);
     z.SetVal(-1); //add missing zeros at -1
     LinearSystems.ZeroPoleToTransferFun(num,den,z,p,k);
     SignalUtils.FrequencyResponse(num,den,Response,64,false,TSignalWindowType.wtRectangular,0); //zero padding set to 64
     TeeChart.DrawIt(20*MtxExpr.Log10(MtxExpr.Abs(Response)),"Magnitude",false);
     TeeChart.DrawIt(MtxExpr.PhaseSpectrum(Response)*(180/Math.PI),"Phase",false);
  }
What do you think about this topic? Send feedback!
Copyright (c) 1999-2010 by Dew Research. All rights reserved.