IIRFilters::ChebyshevIAnalog Function

void ChebyshevIAnalog(int Order, double PassRipple, TVec *z, TVec *p, double &k);

Design an analog Chebyshev type I lowpass prototype filter of order Order with PassRipple dB of equiripple in the passband, cutoff fixed at 1 rad/s. Returns zero-pole-gain (z empty, all zeros at infinity): |H(jomega)|^2=1/(1+varepsilon^2 T_n^2(omega)), varepsilon=sqrt(10^(R_p/10)-1), where T_n is the order-n Chebyshev polynomial and R_p=PassRipple. The magnitude is equiripple in [0,1][0,1] and monotone beyond; at the passband edge omega=1 it equals 10^(-R_p/20). Domain: 1 <= Order <= MaxIirOrder, PassRipple>0 dB. Poles satisfy Re(p_k)<0 (stable). z and p must share precision or an exception is raised.

#NameTypeDescription
1Orderint
2PassRippledouble
3zTVec *
4pTVec *
5kdouble &
Remarks:

Design analog Chebyshev type I lowpass prototype filter of order Order. Place the resulting transfer function in zero-pole form in Z (zeros), P (poles) and K (gain). PassRipple defines the ripple of the passband (dB). The cutoff frequency of the prototype filter is preset to 1 rad/sec, the unit circle. Chebyshevs type I filters are all-pole designs and are equiripple in the passband. The filter has all zeros in infinity. The design formulas are found in [1] p. 232:

Poles: p[k] = s[k] + j*W[k] s[k] = -sinh(Phi)sin((2*k-1)*Pi/(2*n)) W[k] = cosh(Phi)*cos((2*k-1)*Pi/(2*n)) sinh(phi) = 0.5(v - 1/v) cosh(phi) = 0.5*(v + 1/v) 1 + (1 + eps^2)^0.5 v = ( --------------------- )^(1/n) eps n - order of the filter k = 1,...,n

References:

[1] "Theory and application of digital signal processing, Lawrence R. Rabiner and Bernard Gold. Prentice-Hall, 1975".

Examples
#include "MtxExpr.h"
#include "Units.IIrFilters.h"
#include "Units.LinearSystems.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::LinearSystems;
using namespace Dew::Signal::Units::SignalUtils;

void Example()
{
    Vector z(0);
    Vector p(0);
    Vector num(0);
    Vector den(0);
    Vector Response(0);
    Vector FreqFr(0);
    double k, Wc;
    int Order = 5; //design a fifth order filter.

    ChebyshevIAnalog(Order, 0.2, z, p, k);  //design analog protype
    Wc = 2; //cutoff frequency
    LowpassToLowpass(z, p, k, Wc);
    ZeroPoleToTransferFun(num, den, z, p, k);
    FreqFr.Length = 1000;
    LogRamp(FreqFr, -1, 1);

    FrequencyResponseS(num, den, FreqFr, Response, 0);
}
See Also: IIRFilters::ChebyshevIIFilter, LowpassToLowpass, Bilinear
Declared in Dew::Signal::Units::IIRFilters · Dew.Signal/Units.IIrFilters.h · Cross-compiler