LinearSystems::LowpassToLowpassZ Function

Overload List

#SignatureDescription
1void LowpassToLowpassZ(TVec *Num, TVec *Den, double Freq, double PrototypeFreq);Apply frequency band transformation from lowpass to lowpass in the z-domain.
2void LowpassToLowpassZ(TVec *z, TVec *p, double &k, double Freq, double PrototypeFreq);The function returns modified z (zeros), p (poles) and k (gain).

Overload 1: void LowpassToLowpassZ(TVec *Num, TVec *Den, double Freq, double PrototypeFreq);

Apply frequency band transformation from lowpass to lowpass in the z-domain.

#NameTypeDescription
1NumTVec *
2DenTVec *
3Freqdouble
4PrototypeFreqdouble
Remarks:

Freq is the cutoff frequency of the new filter. The function returns modified num and den. PrototypeFreq is the cutoff frequency of the prototype lowpass filter after it has been mapped to z-domain. Freq and PrototypeFreq must be between 0 and 1 (Sampling frequency = 2). The transformation is defined with the following mapping ([1] p. 260 and [2] p. 434, [3] p. 352): z^(-1) -> (z^(-1) - a)/(1 - a z^(-1)) a = (sin((wc - wn)/2))/(sin((wc + wn)/2))

wc - old cutoff frequency
wn - new (desired) cutoff frequency

References:

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

[2] Discrete-time signal processing, Oppenheim and Schafer, Prentice-Hall, 1989

[3] Digital signal processing, Vinay K. Ingle and John G. Proakis, Brooks-Cole, 2000

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, p, num, den, Response;
    int Order;
    double k, Wc;

    Order = 4;//design a fourth order filter.
    EllipticAnalog(Order, 0.1, 30, z, p, k);  //design analog protype
    Bilinear(z, p, k, 2); //bilinear with sampling frequency 2Hz.
    Wc = 0.5;   //desired cutoff at 0.5 Hz.

    LowpassToLowpassZ(z, p, k, Wc, BilinearUnwarp(1)); //move cutoff to 0.5 Hz.
    ZeroPoleToTransferFun(num, den, z, p, k);

    //Alternative:
    //       ...
    //      ZeroPoleToTransferFun(num, den, z, p, k);
    //      LowpassToLowpassZ(num, den, Wc, BilinearUnwarp(1)); //move cutoff to 0.5 Hz.

    FrequencyResponse(num, den, Response, 64);
}
Declared in Dew::Signal::Units::LinearSystems · Dew.Signal/Units.LinearSystems.h · Cross-compiler

Overload 2: void LowpassToLowpassZ(TVec *z, TVec *p, double &k, double Freq, double PrototypeFreq);

The function returns modified z (zeros), p (poles) and k (gain).

#NameTypeDescription
1zTVec *
2pTVec *
3kdouble &
4Freqdouble
5PrototypeFreqdouble
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);
    double k, Wc;
    double FS = 2;
    int Order = 4; //design a fifth order filter.

    EllipticAnalog(Order, 0.1, 30, z, p, k);  //design analog protype
    Bilinear(z, p, k, FS, true);
    Wc = 0.5;
    LowpassToLowpassZ(z, p, k, Wc, BilinearUnwarp(1, FS));
    ZeroPoleToTransferFun(num, den, z, p, k);
    FrequencyResponse(num, den, Response, 64, false, TSignalWindowType::wtRectangular, 0); //zero padding set to 64

    //Alternative:
    //            ...
    //            ZeroPoleToTransferFun(num, den, z, p, k);
    //            LowpassToLowpassZ(num, den, Wc, BilinearUnwarp(1, FS));

}
See Also: LinearSystems::Bilinear, LinearSystems::RationalSubstitution
Declared in Dew::Signal::Units::LinearSystems · Dew.Signal/Units.LinearSystems.h · Cross-compiler