LinearSystems::LowpassToHighpass Function

Overload List

#SignatureDescription
1void LowpassToHighpass(TVec *z, TVec *p, double &k, double Freq);Frequency transformation from a lowpass to a highpass filter in s-domain.
2void LowpassToHighpass(TMtx *A, TVec *B, TVec *C, double &D, double Freq);Transform a lowpass filter prototype in state space form to highpass filter.

Overload 1: void LowpassToHighpass(TVec *z, TVec *p, double &k, double Freq);

Frequency transformation from a lowpass to a highpass filter in s-domain.

#NameTypeDescription
1zTVec *
2pTVec *
3kdouble &
4Freqdouble
Remarks:

Transform a lowpass filter prototype in zero-pole form to a highpass filter, where the new cutoff frequency is Freq. Assumed sampling frequency is 2. The transformation is defined as ([1], p. 258): s -> W_u/s

Wu - new cutoff frequency

The routine also adds zeros at 0. It adds one zero, if the lowpass filter order is odd and already has zeros. If the filter does not have zeros, it adds sufficient zeros at 0 to match the order of the filter.

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

    Order = 5; //design a fifth order filter.
    EllipticAnalog(Order, 0.2, 40, z, p, k);  //design analog protype
    Wc = 0.2;
    LowpassToHighpass(z, p, k, Wc);  //frequency transformation in s-domain
    ZeroPoleToTransferFun(num, den, z, p, k);
    //Define the frequency grid (logarithmic)
    FreqFr.Length = 1000;
    LogRamp(FreqFr, -1, 1); //between 0.1 (=10^(-1)) and 10 (=10^1) rad/sec
    FrequencyResponseS(num, den, FreqFr, Response); //Laplace
}
Declared in Dew::Signal::Units::LinearSystems · Dew.Signal/Units.LinearSystems.h · Cross-compiler

Overload 2: void LowpassToHighpass(TMtx *A, TVec *B, TVec *C, double &D, double Freq);

Transform a lowpass filter prototype in state space form to highpass filter.

#NameTypeDescription
1ATMtx *
2BTVec *
3CTVec *
4Ddouble &
5Freqdouble
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;
    double FS = 2;
    int Order = 5; //design a fifth order filter.

    EllipticAnalog(Order, 0.2, 40, z, p, k);  //design analog protype
    Wc = 0.2;
    LowpassToHighpass(z, p, k, Wc);  //frequency transformation in s-domain
    ZeroPoleToTransferFun(num, den, z, p, k);
    //Define the frequency grid (logarithmic)
    FreqFr.Length = 1000;
    LogRamp(FreqFr, -1, 1); //between 0.1 (=10^(-1)) and 10 (=10^1) rad/sec
    FrequencyResponseS(num, den, FreqFr, Response, 0); //Laplace
}
See Also: LinearSystems::LowpassToLowpass, LinearSystems::LowpassToBandstop, LinearSystems::LowpassToBandpass, LinearSystems::LowpassToLowpassZ, LinearSystems::LowpassToBandpassZ, LinearSystems::LowpassToBandstopZ, LinearSystems::LowpassToHighpassZ
Declared in Dew::Signal::Units::LinearSystems · Dew.Signal/Units.LinearSystems.h · Cross-compiler