SignalUtils.IirFilter Method

Overload List

#SignatureDescription
1procedure IirFilter(const Src: TCplx; out Dst: TCplx; var IIRState: TIirState);Filter data with an IIR filter.
2procedure IirFilter(const Src: TSCplx; out Dst: TSCplx; var IIRState: TIirState);
3procedure IirFilter(const Data: TVec; const Num: TVec; const Den: TVec; LinearPhase: Boolean);Filter Data and place the result back in Data.
4procedure IirFilter(const Src: TVec; const Dst: TVec; var IIRState: TIirState);Filter data with an IIR filter.
5procedure IirFilter(const Data: TVec; var IIRState: TIirState; LinearPhase: Boolean);Filter data with an IIR filter.
6procedure IirFilter(Src: Double; out Dst: Double; var IIRState: TIirState);Filter data with an IIR filter.
7procedure IirFilter(Src: Single; out Dst: Single; var IIRState: TIirState);

Overload 1: procedure IirFilter(const Src: TCplx; out Dst: TCplx; var IIRState: TIirState);

Filter data with an IIR filter.

#NameTypeDescription
1SrcTCplx
2DstTCplx
3IIRStateTIirState

Result: stored in self (calling object)

Remarks:

Filters sample Src and places complex output of the filter in Dst.

Overload 2: procedure IirFilter(const Src: TSCplx; out Dst: TSCplx; var IIRState: TIirState);

#NameTypeDescription
1SrcTSCplx
2DstTSCplx
3IIRStateTIirState

Result: stored in self (calling object)

Overload 3: procedure IirFilter(const Data: TVec; const Num: TVec; const Den: TVec; LinearPhase: Boolean);

Filter Data and place the result back in Data.

#NameTypeDescription
1DataTVec
2NumTVec
3DenTVec
4LinearPhaseBoolean

Result: stored in self (calling object)

Remarks:

The Iir filter is defined with a transfer function. Num is numerator and Den is denominator. Set LinearPhase to True to double filter attenuation and ensure no phase distortion and no phase delay (except for the initial transition regions).

See Also: SignalUtils.SavGolayFilter, OptimalFir.RemezImpulse, SignalUtils.FirInit, SignalUtils.IirInit, SignalUtils.IirFree

Overload 4: procedure IirFilter(const Src: TVec; const Dst: TVec; var IIRState: TIirState);

Filter data with an IIR filter.

#NameTypeDescription
1SrcTVec
2DstTVec
3IIRStateTIirState

Result: stored in self (calling object)

Remarks:

Filter data in Src and place the result in Dst. IirState must be initialized with a call to IirInit.

Note
Use this routine for filtering of streaming data.

Examples
uses MtxExpr, Math387, MtxVec, SignalUtils, MtxVecTee, MtxVecEdit, IIRFilters;

procedure TForm42.Button1Click(Sender: TObject);
var b,c,Response,Response1,num,den: Vector;
State: TIirState;
n,i: integer;
begin
    Tone(b,300,6/300,0,1);

    //   Alternative: try gaussian noise
    //    b := RandGauss(300);

    c.Size(b);
    ChebyshevIFilter(6,0.2,[0.6],ftLowpass,false,num,den);
    FillChar(State,SizeOf(State),0);
    IirInit(num,den,State);
    try
        //Alternative 1, IIR streaming
        n := 10;
        for i := 0 to (b.Length div n) - 1 do
    begin
        b.SetSubRange(i*n,n);
        c.SetSubRange(i*n,n);
        IirFilter(b,c,State);
    end;

    //Alternative 2 single block filter (does not require TIirState)
    //                c.Copy(b);
    //                IirFilter(c,num,den,True);

    //Alternative 3 single block
    //                c.Copy(b);
    //                IirFilter(c,State);

    c.SetFullRange;
    b.SetFullRange;
    DrawIt([b,c],['Original signal','Filtered signal']);
    FrequencyResponse(b,nil,Response,8,True,wtHanning);
    FrequencyResponse(c,nil,Response1,8,True,wtHanning);
    DrawIt([Response,Response1],['Orig. signal','Filtered']);
finally
    IirFree(State);
end;
end;

Overload 5: procedure IirFilter(const Data: TVec; var IIRState: TIirState; LinearPhase: Boolean);

Filter data with an IIR filter.

#NameTypeDescription
1DataTVec
2IIRStateTIirState
3LinearPhaseBoolean

Result: stored in self (calling object)

Remarks:

Filter Data and place the result back in Data. Use this routine for filtering of non-consecutive blocks of data. Set LinearPhase to True to double filter attenuation and ensure no phase distortion and no phase delay.

Overload 6: procedure IirFilter(Src: Double; out Dst: Double; var IIRState: TIirState);

Filter data with an IIR filter.

#NameTypeDescription
1SrcDoublescalar
2DstDouble
3IIRStateTIirState

Result: stored in self (calling object)

Remarks:

Filters sample Src and places real valued output of the filter in Dst.

Overload 7: procedure IirFilter(Src: Single; out Dst: Single; var IIRState: TIirState);

#NameTypeDescription
1SrcSinglescalar
2DstSingle
3IIRStateTIirState

Result: stored in self (calling object)