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

Estimate the order a butterworth IIR filter.

Pascal
function ButterOrder(const BEdges: array of double; PassRipple: double; StopRipple: double; FilterType: TFilterType; var CutoffFreq: array of double; Analog: boolean = False): integer;

Returns the order of a butterworth type IIR filter. Bedg array must contain the band edges of the transition region(s) sorted in ascending order. PassRipple defines the ripple of the passband and StopRipple defines the ripple of the stopband. The length of the CutoffFreq array must be equal to one half of the length of the BEdg array and must match the specified FilterType. The routine returns the estimated order as a result and fill's the CutoffFreq array. This array can then be passed to the ButterFilter routine.

Design an analog lowpass filter with transition band between 2 and 6 rad/sec and with at least 40dB attenuation at the end of the transition band and. The passband should not have more then 0.2dB ripple. 

 

 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,BW: double;
     WcArray: array of double; //modified 3dB frequency
 begin
     SetLength(WcArray,1);
     Order := ButterOrder([2,6],0.2,40,ftLowpass,WcArray,True);
     ButterAnalog(Order,z,p,k);  //design analog protype
     LowpassToLowpass(z,p,k,WcArray[0]);  //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, WcArray;
    int Order;
    double k,Wc,BW;

    WcArray.Size(1);
    Order = ButterOrder(OPENARRAY(double,(2,6)),0.2,40, ftLowpass, WcArray.PValues1D(0), WcArray.Length - 1 ,true);
    ButterAnalog(Order,z,p,k);  //design analog protype
    LowpassToLowpass(z,p,k,WcArray[0]);  //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!