SignalUtils::IirInitBQ Function

void IirInitBQ(TVec *sos, TIirState &IIRState, bool ComplexData);

Initialize an IIR filter with second order sections.

#NameTypeDescription
1sosTVec *
2IIRStateTIirState &
3ComplexDatabool
Remarks:

Initialize an IIR filter by initializing the IirState variable. Set ComplexData to True, if the data stream to be filtered will be complex. The Sos (real) vector variable contains second order sections as produced by the ZeroPoleToSOS function:

(B00, B10, B20, A00, A10, A20), (B01, B11, B21, A01, A11, A21), (.... ),...

B - numerator sections array A - denumarator sections array

Using second order sections to compute an IIR filter results in higher numerical accuracy and greater filter stability at a slightly higher cost on performance.

Examples
#include "MtxExpr.h"
#include "Units.IIrFilters.h"
#include "Units.SignalUtils.h"

using namespace Dew;
using namespace Dew::Math;
using namespace Dew::Signal;
using namespace Dew::Signal::Units::IIRFilters;
using namespace Dew::Signal::Units::SignalUtils;

void Example()
{
    Vector b(0);
    Vector c(0);
    Vector sos(0);
    Vector Response1(0);
    Vector Response2(0);
    TIirState state;
    int n;
    int i;

    Tone(b, 300, 6.0/300, 0, 1, false);

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

    ChebyshevIFilter(6, 0.2, DewArray<double>{0.6}, TFilterType::ftLowpass, false, sos, TIirFrequencyTransform::ftStateSpaceAnalog);
    IirInitBQ(sos, state, false);
    c.Copy(b);  //backup data
    IirFilter(c, state);  //apply filter to the data
    IirFree(state);   //free structure, if you dont require this IIR filter anymore

    FrequencyResponse(c, nullptr, Response1, 1, true, TSignalWindowType::wtHanning, 0);
    FrequencyResponse(b, nullptr, Response2, 1, true, TSignalWindowType::wtHanning, 0);
}
See Also: SignalUtils::SavGolayFilter, OptimalFir::RemezImpulse, SignalUtils::FirInit, SignalUtils::IirInit, SignalUtils::IirFree
Declared in Dew::Signal::Units::SignalUtils · Dew.Signal/Units.SignalUtils.h · Cross-compiler