DewDSPMasterNET
LowpassToBandpass Routines
Summary
Frequency transformation from a lowpass to a bandpass filter in s-domain.

Unit
LinearSystems

Declaration
Procedure LowpassToBandpass(a: TMtx; b, c: TVec; var d: TSample; CenterFreq, BW: TSample);

Description
Convert a lowpass filter prototype in state space form to a bandstop filter.
Categories
IIR filter design routines
 See Also 
[1] "Theory and application of digital signal processing, Lawrence R. Rabiner and Bernard Gold. Prentice-Hall, 1975". 
LowpassToLowpass 
LowpassToBandstop 
LowpassToHighPass 
LowpassToLowpassZ 
LowpassToBandpassZ 
LowpassToBandstopZ 
LowpassToHighPassZ 

Example 1

Design an analog bandpass filter, where the passband is defined with Wl = 0.2 rad/sec, Wu = 0.6 rad/sec
uses MtxExpr, Math387, MtxVec, MtxVecTee, MtxVecEdit, LinearSystems, IirFilters, SignalUtils; procedure TForm1.Button1Click(Sender: TObject); var z,p, num,den, FreqFr,Response: Vector; Order: integer; k,Wc,BW: TSample; begin 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 DrawIt(Response); //Y axis linear, X axis logarithmic end;
#include "MtxVecCPP.h" //MtxVecCPP.cpp must be included in the project #include "MtxVecEdit.hpp" #include "MtxVecTee.hpp" #include "SignalUtils.hpp" #include "IirFilters.hpp" #include "LinearSystems.hpp" void __fastcall TForm1::BitBtn1Click(TObject *Sender) { 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 DrawIt(Response); //Y axis linear, X axis logarithmic }
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); Vector FreqFr = new Vector(0); double k,Wc,BW; double FS = 2; int Order = 5; //design a fifth order filter. IIRFilters.EllipticAnalog(Order,0.2,40,z,p,out k); //design analog protype Wc = Math.Sqrt(0.2*0.6); BW = 0.6 - 0.2; LinearSystems.LowpassToBandpass(z,p,ref k,Wc,BW); //frequency transformation in s-domain LinearSystems.ZeroPoleToTransferFun(num,den,z,p,k); //Define the frequency grid (logarithmic) FreqFr.Length = 1000; SignalUtils.LogRamp(FreqFr,-1,1); //between 0.1 (=10^(-1)) and 10 (=10^1) rad/sec SignalUtils.FrequencyResponseS(num,den,FreqFr,Response,0); //Laplace TeeChart.DrawIt(Response,"Frequency response",false); //Y axis linear, X axis logarithmic }


Declaration
Procedure LowpassToBandpass(z, p: TVec; var k: TSample; CenterFreq, Bw: TSample);

Description
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^2 + Wu*Wl s --> ------------- s(Wu - Wl) 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.

Copyright 2008 Dew Research
http://www.dewresearch.com