Design analog Elliptic type IIR prototype filter.
Design analog elliptic prototype filter of order Order. Place the resulting transfer function in zero-pole form in Z (zeros), P (poles) and K (gain). PassRipple defines the ripple (dB) of the passband and StopRipple defines the ripple of the stopband (dB). The cutoff frequency of the prototype filter is preset to 1 rad/sec. For pole and zero specifications see [1] p. 187.
Example 1
Design an analog bandstop filter with stopband between 1 and 3 rad/sec and with 20dB ripple in the stopband and 0.1dB in the passband.
uses MtxExpr, Math387, MtxVec, SignalUtils, MtxVecTee, MtxVecEdit, IirFilters,
LinearSystems;
procedure TForm42.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.1,20,z,p,k); //design analog protype
Wc := Sqrt(1*3);
BW := 3-1;
LowpassToBandstop(z,p,k,Wc,BW); //frequency transformation in s-domain
ZeroPoleToTransferFun(num,den,z,p,k);
FreqFr.Length := 1000; //Define the frequency grid (logarithmic)
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.1,20,z,p,k); //design analog protype
Wc = Sqrt(1*3);
BW = 3-1;
LowpassToBandstop(z,p,k,Wc,BW); //frequency transformation in s-domain
ZeroPoleToTransferFun(num,den,z,p,k);
FreqFr->Length = 1000; //Define the frequency grid (logarithmic)
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;
int Order = 5; //design a fifth order filter.
IIRFilters.EllipticAnalog(Order,0.1,20,z, p, out k); //design analog protype
Wc = Math.Sqrt(3*1); //cutoff frequency
double BW = 3 - 1;
LinearSystems.LowpassToBandstop(z, p, ref k, Wc,BW);
LinearSystems.ZeroPoleToTransferFun(num, den, z, p, k);
FreqFr.Length = 1000;
SignalUtils.LogRamp(FreqFr, -1, 1);
SignalUtils.FrequencyResponseS(num, den, FreqFr, Response, 0);
TeeChart.DrawIt(Response, "Frequency response", false);
}