LinearSystems.LowpassToBandstopZ Method

Overload List

#SignatureDescription
1void LowpassToBandstopZ(TVec Num, TVec Den, Double Freq, Double BW, Double PrototypeFreq)Apply frequency band transformation from lowpass to bandstop in the z-domain.
2void LowpassToBandstopZ(TVec z, TVec p, ref Double k, Double Freq, Double BW, Double PrototypeFreq)The function returns modified z (zeros), p (poles) and k (gain).

Overload 1: void LowpassToBandstopZ(TVec Num, TVec Den, Double Freq, Double BW, Double PrototypeFreq)

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

#NameTypeDescription
1NumTVecsource TVec
2DenTVecsource TVec
3FreqDoublescalar
4BWDoublescalar
5PrototypeFreqDoublescalar

Result: stored in self (calling object)

Remarks:

Freq is the center frequency of the stopband with width BW 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, BW 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) -> (a2 - a1 z^(-1) + z^(-2))/(1 - a1 z^(-1) + a2 z^(-2)) beta = (cos((w2 + w1)/2))/(cos((w2 - w1)/2)) k1 = tan((w2 - w1)/2)tan(wc/2) a1 = (2 beta)/(k1 + 1), a2 = (1 - k1)/(k1 + 1)

wc - old cutoff frequency
w2 - desired upper cutoff frequency
w1 - desired lower 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

Overload 2: void LowpassToBandstopZ(TVec z, TVec p, ref Double k, Double Freq, Double BW, Double PrototypeFreq)

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

#NameTypeDescription
1zTVecsource TVec
2pTVecsource TVec
3kDouble (ref)output
4FreqDoublescalar
5BWDoublescalar
6PrototypeFreqDoublescalar

Result: stored in self (calling object)

Examples
using Dew.Math;
using Dew.Math.Editors;
using Dew.Math.Units;
using Dew.Signal;
using Dew.Signal.Units;
using Dew.Math.Tee;
using Dew.Signal.Tee;

private void button1_Click(object sender, EventArgs e)
{

    Vector z = new Vector(0);
    Vector p = new Vector(0);
    Vector num = new Vector(0);
    Vector den = new Vector(0);
    Vector Response = new Vector(0);
    double k, Wc;
    double FS = 2;
    int Order = 4; //design a fourth order filter.

    IIRFilters.EllipticAnalog(Order,0.1,30, z, p, out k);  //design analog protype
    LinearSystems.Bilinear(z, p, ref k, FS,true);
    double w1 = 0.2; //start of the stopband at 0.2Hz.
    double w2 = 0.5; //stop of the stopband at 0.5Hz.
    Wc = Math.Sqrt(w1*w2); //center frequency of the stopband
    double BW = w2-w1;  //passband width
    LinearSystems.LowpassToBandPStopZ(z, p, ref k, Wc, BW, LinearSystems.BilinearUnwarp(1,FS));
    LinearSystems.ZeroPoleToTransferFun(num,den, z, p, k);
    SignalUtils.FrequencyResponse(num, den, Response, 64, false, TSignalWindowType.wtRectangular, 0); //zero padding set to 64

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

    MtxVecTee.DrawIt(Response, "Frequency response", false);
    //MtxVecTee.DrawIt(20 * MtxExpr.Log10(MtxExpr.Abs(Response)), "Magnitude", false);
    //MtxVecTee.DrawIt(MtxExpr.PhaseSpectrum(Response) * (180 / Math.PI), "Phase", false);
}
See Also: LinearSystems.Bilinear, LinearSystems.RationalSubstitution, LinearSystems.LowpassToBandstop, LinearSystems.LowpassToLowpassZ, LinearSystems.LowpassToHighpassZ, LinearSystems.LowpassToBandpassZ