LinearSystems::LowpassToBandpass Function

Overload List

#SignatureDescription
1void LowpassToBandpass(TVec *z, TVec *p, double &k, double CenterFreq, double BW);Frequency transformation from a lowpass to a bandpass filter in s-domain.
2void LowpassToBandpass(TMtx *a, TVec *b, TVec *c, double &D, double CenterFreq, double BW);Convert a lowpass filter prototype in state space form to a bandstop filter.

Overload 1: void LowpassToBandpass(TVec *z, TVec *p, double &k, double CenterFreq, double BW);

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

#NameTypeDescription
1zTVec *
2pTVec *
3kdouble &
4CenterFreqdouble
5BWdouble
Remarks:

Transform a lowpass filter prototype in zero-pole form to bandpass filter, where the passband of width BW is centered around the frequency CenterFreq. Assumed sampling frequency is 2. The transformation is defined as ([1], p. 258): s -> (s^2 + W_u W_l)/(s (W_u - W_l))

Wl - lower cutoff frequency
Wu - upper 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 lowpass 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.Math387.h"
#include "Units.IIrFilters.h"
#include "Units.LinearSystems.h"
#include "Units.SignalUtils.h"

using namespace Dew;
using namespace Dew::Math;
using namespace Dew::Math::Units::Math387;
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 = Sqrt(0.2*0.6);
    BW = 0.6-0.2;
    LowpassToBandpass(z, p, k, Wc, BW);  //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 LowpassToBandpass(TMtx *a, TVec *b, TVec *c, double &D, double CenterFreq, double BW);

Convert a lowpass filter prototype in state space form to a bandstop filter.

#NameTypeDescription
1aTMtx *
2bTVec *
3cTVec *
4Ddouble &
5CenterFreqdouble
6BWdouble
Examples
#include "MtxExpr.h"
#include "Units.Math387.h"
#include "Units.IIrFilters.h"
#include "Units.LinearSystems.h"
#include "Units.SignalUtils.h"

using namespace Dew;
using namespace Dew::Math;
using namespace Dew::Math::Units::Math387;
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, BW;
    double FS = 2;
    int Order = 5; //design a fifth order filter.

    EllipticAnalog(Order, 0.2, 40, z, p, k);  //design analog protype
    Wc = Sqrt(0.2*0.6);
    BW = 0.6 - 0.2;
    LowpassToBandpass(z, p, k, Wc, BW);  //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::LowpassToHighpass, LinearSystems::LowpassToLowpassZ, LinearSystems::LowpassToBandpassZ, LinearSystems::LowpassToBandstopZ, LinearSystems::LowpassToHighpassZ
Declared in Dew::Signal::Units::LinearSystems · Dew.Signal/Units.LinearSystems.h · Cross-compiler