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

Design analog Butterworth type IIR prototype filter.

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

Design analog butterworth lowpass 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. 277):


                   k0
H(s) = -------------------------
       (s - s[1])*...*(s - s[n])


The poles of the filter are located at

s[k] := Expj(Pi*(0.5+(2*k-1)/(2*n)));

n = order of filter
k = 1,...,n
k0 = gain
 

 

The magnitude response is down 3dB at the cutoff frequency. 

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 frequency at 3 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.
    ButterAnalog(Order,z,p,k);  //design analog protype
    Wc := 3;
    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.
  ButterAnalog(Order,z,p,k);  //design analog protype
  Wc = 3;
  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-2024 by Dew Research. All rights reserved.
What do you think about this topic? Send feedback!