IIRFilters::EllipticFilter Function

Overload List

#SignatureDescription
1double EllipticFilter(int Order, double PassRipple, double StopRipple, const DewArray<double> &CutoffFreq, TFilterType FilterType, bool Analog, TVec *z, TVec *p, double &k, TIirFrequencyTransform IirFrequencyTransform = TIirFrequencyTransform::ftStateSpaceAnalog);Design Elliptic IIR filter.
2double EllipticFilter(int Order, double PassRipple, double StopRipple, const DewArray<double> &CutoffFreq, TFilterType FilterType, bool Analog, TVec *Num, TVec *Den, TIirFrequencyTransform IirFrequencyTransform = TIirFrequencyTransform::ftStateSpaceAnalog);The resulting transfer function is returned in the numerator/denumerator form with num and den.
3double EllipticFilter(int Order, double PassRipple, double StopRipple, const DewArray<double> &CutoffFreq, TFilterType FilterType, bool Analog, TVec *sos, TIirFrequencyTransform IirFrequencyTransform = TIirFrequencyTransform::ftStateSpaceAnalog);The resulting transfer function is returned in the second order section form stored in the sos variable.
4double EllipticFilter(int Order, double PassRipple, double StopRipple, const DewArray<double> &CutoffFreq, TFilterType FilterType, bool Analog, TMtx *A, TVec *B, TVec *C, double &d);The resulting transfer function is returned in the state-space form with A,B,C,D variables.

Overload 1: double EllipticFilter(int Order, double PassRipple, double StopRipple, const DewArray<double> &CutoffFreq, TFilterType FilterType, bool Analog, TVec *z, TVec *p, double &k, TIirFrequencyTransform IirFrequencyTransform = TIirFrequencyTransform::ftStateSpaceAnalog);

Design Elliptic IIR filter.

#NameTypeDescription
1Orderint
2PassRippledouble
3StopRippledouble
4CutoffFreqconst DewArray<double> &
5FilterTypeTFilterType
6Analogbool
7zTVec *
8pTVec *
9kdouble &
10IirFrequencyTransform = TIirFrequencyTransform::ftStateSpaceAnalogTIirFrequencyTransform
Remarks:

Design Elliptic filter of Order with CutoffFreq frequencies and of FilterType type. Set Analog to True, to request an analog filter design in s-plane or set it to false to obtain a digital filter design in z-plane. CutoffFreq must be in range between 0 and 1 (Sampling frequency = 2) in case of a digital filter design.

IIrFrequencyTransform specifies when and how will the frequency band transformation be applied. PassRipple defines the passband ripple in dB and StopRipple defines the stopband ripple in dB. The resulting transfer function is returned in the zero-pole form, with z,p,k variables.

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

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

void Example()
{
    Vector z, p, num, den, FreqFr, Response;
    int Order;
    double k, Bw, Wc;
    DewArray<double> WcArray; //modified 3dB frequency

    WcArray.SetLength(1);
    Order = EllipticOrder(DewArray<double>{5.0/15, 6.0/15}, 0.1, 40, TFilterType::ftLowpass, WcArray, false);
    EllipticFilter(Order, 0.1, 40, WcArray, TFilterType::ftLowpass, false, num, den);
    FrequencyResponse(num, den, Response, 64);
    FreqFr = Ramp(Response.Length, TMtxFloatPrecision::mvDouble, 0, 30*0.5/Response.Length);
}
Declared in Dew::Signal::Units::IIRFilters · Dew.Signal/Units.IIrFilters.h · Cross-compiler

Overload 2: double EllipticFilter(int Order, double PassRipple, double StopRipple, const DewArray<double> &CutoffFreq, TFilterType FilterType, bool Analog, TVec *Num, TVec *Den, TIirFrequencyTransform IirFrequencyTransform = TIirFrequencyTransform::ftStateSpaceAnalog);

The resulting transfer function is returned in the numerator/denumerator form with num and den.

#NameTypeDescription
1Orderint
2PassRippledouble
3StopRippledouble
4CutoffFreqconst DewArray<double> &
5FilterTypeTFilterType
6Analogbool
7NumTVec *
8DenTVec *
9IirFrequencyTransform = TIirFrequencyTransform::ftStateSpaceAnalogTIirFrequencyTransform
Declared in Dew::Signal::Units::IIRFilters · Dew.Signal/Units.IIrFilters.h · Cross-compiler

Overload 3: double EllipticFilter(int Order, double PassRipple, double StopRipple, const DewArray<double> &CutoffFreq, TFilterType FilterType, bool Analog, TVec *sos, TIirFrequencyTransform IirFrequencyTransform = TIirFrequencyTransform::ftStateSpaceAnalog);

The resulting transfer function is returned in the second order section form stored in the sos variable.

#NameTypeDescription
1Orderint
2PassRippledouble
3StopRippledouble
4CutoffFreqconst DewArray<double> &
5FilterTypeTFilterType
6Analogbool
7sosTVec *
8IirFrequencyTransform = TIirFrequencyTransform::ftStateSpaceAnalogTIirFrequencyTransform
Remarks:

The sos variable can be passed directly to the IirInitBQ digital filter initialization routine. Second order section form delivers substantially higher numerical stability and range than filtering with num/den form used by the IirInit function.

Declared in Dew::Signal::Units::IIRFilters · Dew.Signal/Units.IIrFilters.h · Cross-compiler

Overload 4: double EllipticFilter(int Order, double PassRipple, double StopRipple, const DewArray<double> &CutoffFreq, TFilterType FilterType, bool Analog, TMtx *A, TVec *B, TVec *C, double &d);

The resulting transfer function is returned in the state-space form with A,B,C,D variables.

#NameTypeDescription
1Orderint
2PassRippledouble
3StopRippledouble
4CutoffFreqconst DewArray<double> &
5FilterTypeTFilterType
6Analogbool
7ATMtx *
8BTVec *
9CTVec *
10ddouble &
Examples
#include "MtxExpr.h"
#include "Units.MtxExpr.h"
#include "Units.IIrFilters.h"
#include "Units.SignalUtils.h"

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

void Example()
{
    Vector z(0);
    Vector p(0);
    Vector num(0);
    Vector den(0);
    Vector Response(0);

    DewArray<double> WcArray(1);
    int Order; //design a fifth order filter.

    Order = EllipticOrder(DewArray<double>{5.0/15, 6.0/15}, 0.1, 40, TFilterType::ftLowpass, WcArray, false);  //design analog protype
    EllipticFilter(Order, 0.1, 40, WcArray, TFilterType::ftLowpass, false, num, den, TIirFrequencyTransform::ftStateSpaceAnalog);

    FrequencyResponse(num, den, Response, 32, false, TSignalWindowType::wtRectangular, 0);

    Vector FreqFr = Ramp(Response.Length, TMtxFloatPrecision::mvDouble, 0, 30*0.5 / Response.Length); //X axis
}
See Also: IirFilter, IIRFilters::ButterFilter, IIRFilters::ChebyshevIFilter, IIRFilters::ChebyshevIIFilter, IIRFilters::BesselFilter, IIRFilters::EllipticAnalog, Bilinear, IIRFilters::EllipticOrder
Declared in Dew::Signal::Units::IIRFilters · Dew.Signal/Units.IIrFilters.h · Cross-compiler