Main Content

Microstrip Composite Bandpass Filters for Ultra-Wideband (UWB) Wireless Communications

This example shows how to design and analyze a Low Pass Filter(LPF), High Pass Filter(HPF), and cascade responses of the LPF and HPF as well as two variations of a composite filter as shown in the paper[1].

The following steps are needed to create a filter:

1) Create the Geometry of the filter using RF PCB Shapes. Create a rectangle for the ground plane.

2) Use the pcbComponent and build the PCB stack. Set the BoardShape property of pcbComponent which will set the shape of the dielectric substrate.

3) Assign the filter shape, dielectric, and ground plane to the Layers property of pcbComponent.

4) Set the FeedLocations and FeedDiameter. If the design has Vias then set the ViaLocations and ViaDiameter.

5) Analyze the structure

Create Variables

Define the variables required to create the geometry for all the filter designs

PortLineL = 3e-3;
PortLineW = 1.6e-3;

Low Pass Filter

Create the variables and assign the values given in the paper[1]. Use the traceRectangular shape to create all the rectangles as shown in the figure and join them to create the filter structure. Visualize the structure using the show function.

Whi = 0.2e-3;
Wlo = 3.2e-3;
L1  = 1.02e-3;
L2  = 2.67e-3;
L3  = 2e-3;
L4  = 3.2e-3;
L5  = 2.09e-3;

a = traceRectangular('Length',PortLineL,'Width',PortLineW,'Center',[PortLineL/2,0]);
b = traceRectangular('Length',L1,'Width',Whi,'Center',[PortLineL+L1/2,0]);
c = traceRectangular('Length',L2,'Width',Wlo,'Center',[PortLineL+L1+L2/2,0]);
d = traceRectangular('Length',L3,'Width',Whi,'Center',[PortLineL+L1+L2+L3/2,0]);
e = traceRectangular('Length',L4,'Width',Wlo,'Center',[PortLineL+L1+L2+L3+L4/2,0]);
f = traceRectangular('Length',L5,'Width',Whi,'Center',[PortLineL+L1+L2+L3+L4+L5/2,0]);
g = traceRectangular('Length',L4,'Width',Wlo,'Center',[PortLineL+L1+L2+L3+L4+L5+L4/2,0]);
h = traceRectangular('Length',L3,'Width',Whi,'Center',[PortLineL+L1+L2+L3+L4+L5+L4+L3/2,0]);
i = traceRectangular('Length',L2,'Width',Wlo,'Center',[PortLineL+L1+L2+L3+L4+L5+L4+L3+L2/2,0]);
j = traceRectangular('Length',L1,'Width',Whi,'Center',[PortLineL+L1+L2+L3+L4+L5+L4+L3+L2+L1/2,0]);
k = traceRectangular('Length',PortLineL,'Width',PortLineW,'Center',[PortLineL+L1+L2+L3+L4+L5+L4+L3+L2+L1+PortLineL/2,0]);
filt1 = a+b+c+d+e+f+g+h+i+j+k;
figure,show(filt1);

Create the PCB Stack of the filter using the pcbComponent object. Assign the filter shape, dielectric, and groundplane to the Layers property. Set the BoardThickness to 0.508 mm and assign the BoardShape to the ground plane. Set the FeedDiameter and FeedLocations. Visualize the PCB.

LPF                = pcbComponent;
d                  = dielectric('Teflon');
d.EpsilonR         = 2.2;
d.Thickness        = 0.508e-3;
GPL1               = PortLineL+L1+L2+L3+L4+L5+L4+L3+L2+L1+PortLineL;
GPW                = 20e-3;
gnd                = traceRectangular('Length',GPL1,'Width',GPW,'Center',[GPL1/2,0]);
LPF.BoardThickness = 0.508e-3;
LPF.Layers         = {filt1,d,gnd};
LPF.BoardShape     = gnd;
LPF.FeedDiameter   = PortLineW/2;
LPF.FeedLocations  = [0,0,1,3;GPL1,0,1,3];
figure,show(LPF); 

Use sparameters function to calculate the S-Parameters of the filter and plot them using the rfplot function.

spar1 = sparameters(LPF,linspace(0.1e9,16e9,51));
figure;
rfplot(spar1);

High Pass Filter

Create the variables and assign the values given in the paper[1]. Use the traceRectangular shape to create all the rectangles as shown in the figure and join them to create the filter structure. Visualize the structure using the show function.

Lstub = 6.35e-3;
Wstub = 0.238e-3
Wstub = 2.3800e-04
Linv  = 6.07e-3;
Winv  = 1.8e-3;
a = traceRectangular('Length',PortLineL,'Width',PortLineW,'Center',[PortLineL/2,0]);
b = traceRectangular('Length',Linv,'Width',Winv,'Center',[PortLineL+Linv/2,0]);
c = traceRectangular('Length',Linv+0.04e-3,'Width',Winv,'Center',[PortLineL+Linv+Linv/2+0.04e-3/2,0]);
d = traceRectangular('Length',PortLineL+0.1e-3,'Width',PortLineW,'Center',[PortLineL+Linv+Linv+PortLineL/2-0.1e-3/2,0]);
e = traceRectangular('Length',Wstub,'Width',Lstub,'Center',[PortLineL+Wstub/2,-Lstub/2-PortLineW/2]);
f = traceRectangular('Length',Wstub,'Width',Lstub,'Center',[PortLineL+Linv+Wstub/2,-Lstub/2-PortLineW/2]);
g = traceRectangular('Length',Wstub,'Width',Lstub,'Center',[PortLineL+Linv+Linv+Wstub/2,-Lstub/2-PortLineW/2]);
filt2 = a+b+c+d+e+f+g;
figure;
show(filt2);

Create the PCB Stack of the filter using the pcbComponent. Assign the filter shape, dielectric, and groundplane to the Layers property. Set the BoardThickness to 0.508 mm and assign the BoardShape to the ground plane. Set the FeedDiameter and FeedLocations. Visualize the PCB.

HPF                = pcbComponent;
d                  = dielectric('Teflon');
d.EpsilonR         = 2.2;
d.Thickness        = 0.508e-3;
GPL2               = PortLineL+Linv+Linv+PortLineL;
GPW                = 20e-3;
gnd                = traceRectangular('Length',GPL2,'Width',GPW,'Center',[GPL2/2,0]);
HPF.BoardThickness = 0.508e-3;
HPF.Layers         = {filt2,d,gnd};
HPF.BoardShape     = gnd;
HPF.FeedDiameter   = PortLineW/2;
HPF.FeedLocations  = [0,0,1,3;GPL2,0,1,3];
HPF.ViaLocations   = [PortLineL+Wstub/2,-PortLineW/2-Lstub+0.2e-3,1,3;PortLineL+Linv+Wstub/2,-PortLineW/2-Lstub+0.2e-3,1,3;PortLineL+Linv+Linv+Wstub/2,-PortLineW/2-Lstub+0.2e-3,1,3];
HPF.ViaDiameter    = Wstub/2;
figure;
show(HPF);

Use sparameters function to calculate the S-Parameters of the filter and plot them using the rfplot function.

spar2 = sparameters(HPF,linspace(0.1e9,20e9,41));
figure;
rfplot(spar2);

Cascaded Filter Response

Cascade the LPF and HPF created above and create a ground plane so that it supports the cascaded shape.

filt12   = translate(copy(filt1),[-GPL1,0,0]);
filtcasc = filt12+filt2;
figure,show(filtcasc);

Create the PCB Stack of the filter using the pcbComponent. Create the groundplane using the traceRectangular shape. Assign the filter shape, dielectric, and groundplane to the Layers property. Set the BoardThickness to 0.508 mm and assign the BoardShape to the ground plane. Set the FeedDiameter and FeedLocations. Visualize the PCB.

casc                = pcbComponent;
d                   = dielectric('Teflon');
d.EpsilonR          = 2.2;
d.Thickness         = 0.508e-3;
GPL  = GPL1+GPL2;
GPW  = 20e-3;
gnd  = traceRectangular('Length',GPL,'Width',GPW,'Center',[(-GPL1+GPL2)/2,0]);
GPL3                = PortLineL+Linv+Linv+PortLineL;
casc.BoardThickness = 0.508e-3;
casc.Layers         = {filtcasc,d,gnd};
casc.BoardShape     = gnd;
casc.FeedDiameter   = PortLineW/2;
casc.FeedLocations  = [-GPL1,0,1,3;GPL3,0,1,3];
casc.ViaLocations   = [PortLineL+Wstub/2,-PortLineW/2-Lstub+0.2e-3,1,3;PortLineL+Linv+Wstub/2,-PortLineW/2-Lstub+0.2e-3,1,3;PortLineL+Linv+Linv+Wstub/2,-PortLineW/2-Lstub+0.2e-3,1,3];
casc.ViaDiameter    = Wstub/2;
figure;
show(casc);

Use the sparameters function to calculate the S-Parameters and plot the parameters using the rfplot function

spar3 = sparameters(casc,linspace(0.1e9,14e9,31));
figure;
rfplot(spar3);

Composite Filter Type 1

Create the variables and assign the values given in the paper[1]. Use the traceRectangular shape to create all the rectangles as shown in the figure and join them to create the filter structure. Visualize the structure using the show function.

L11 = 0.3e-3;
L12 = 0.73e-3;
L2  = 2.48e-3;
L31 = 2.07e-3;
L32 = 0.59e-3;
L4  = 3.28e-3;
Lstub1 = 2.4e-3;
Lstub2 = 2.4e-3;
a = traceRectangular('Length',PortLineL,'Width',PortLineW,'Center',[PortLineL/2,0]);
b = traceRectangular('Length',L11+L12,'Width',Whi,'Center',[PortLineL+(L11+L12)/2,0]);
c = traceRectangular('Length',L2,'Width',Wlo,'Center',[PortLineL+L11+L12+L2/2,0]);
d = traceRectangular('Length',L31+L32,'Width',Whi,'Center',[PortLineL+L11+L12+L2+(L31+L32)/2,0]);
e = traceRectangular('Length',L4,'Width',Wlo,'Center',[PortLineL+L11+L12+L2+(L31+L32)+L4/2,0]);
f = traceRectangular('Length',L31+L32,'Width',Whi,'Center',[PortLineL+L11+L12+L2+(L31+L32)+L4+(L31+L32)/2,0]);
g = traceRectangular('Length',L2,'Width',Wlo,'Center',[PortLineL+L11+L12+L2+(L31+L32)+L4+(L31+L32)+L2/2,0]);
h = traceRectangular('Length',L11+L12,'Width',Whi,'Center',[PortLineL+L11+L12+L2+(L31+L32)+L4+(L31+L32)+L2+(L11+L12)/2,0]);
i = traceRectangular('Length',PortLineL,'Width',PortLineW,'Center',[PortLineL+L11+L12+L2+(L31+L32)+L4+(L31+L32)+L2+(L11+L12)+PortLineL/2,0]);
j = traceRectangular('Length',Wstub,'Width',Lstub1,'Center',[PortLineL+L11,-Lstub1/2-Whi/2]);
k = traceRectangular('Length',Wstub,'Width',Lstub1,'Center',[PortLineL+L11+L12+L2+L31,-Lstub1/2-Whi/2]);
l = traceRectangular('Length',Wstub,'Width',Lstub1,'Center',[PortLineL+L11+L12+L2+L31+L32+L4+L32,Lstub1/2+Whi/2]);
m = traceRectangular('Length',Wstub,'Width',Lstub1,'Center',[PortLineL+L11+L12+L2+L31+L32+L4+L32+L31+L2+L12,Lstub1/2+Whi/2]);
compfiltShape1 = a+b+c+d+e+f+g+h+i+j+k+l+m;
figure;
show(compfiltShape1);

Create the PCB Stack of the filter using the pcbComponent. Assign the filter shape, dielectric, and groundplane to the Layers property. Set the BoardThickness to 0.508 mm and assign the BoardShape to the ground plane. Set the FeedDiameter and FeedLocations. Visualize the PCB.

compfilt1 = pcbComponent;
d    = dielectric('Teflon');
d.EpsilonR  = 2.2;
d.Thickness = 0.508e-3;
GPL2 = PortLineL+2*(L11+L12)+2*(L31+L32)+2*L2+L4+PortLineL;
GPW  = 20e-3;
gnd  = traceRectangular('Length',GPL2,'Width',GPW/2,'Center',[(GPL2)/2,0]);
compfilt1.BoardThickness = 0.508e-3;
compfilt1.Layers         = {compfiltShape1,d,gnd};
compfilt1.BoardShape     = gnd;
compfilt1.FeedDiameter   = PortLineW/2;
compfilt1.FeedLocations  = [0,0,1,3;GPL2,0,1,3];
compfilt1.ViaLocations   = [PortLineL+L11,-Whi/2-Lstub1+0.1e-3,1,3;PortLineL+L11+L12+L2+L31,-Whi/2-Lstub1+0.1e-3,1,3;PortLineL+L11+L12+L2+L31+L32+L4+L32,Whi/2+Lstub1-0.1e-3,1,3;PortLineL+L11+L12+L2+L31+L32+L4+L32+L31+L2+L12,Whi/2+Lstub1-0.1e-3,1,3];
compfilt1.ViaDiameter    = Wstub/2;
figure;
show(compfilt1);

Use the mesh function to generate a manual mesh with a MaxEdgeLength as 1 mm.

figure;
mesh(compfilt1,'MaxEdgeLength',1.2e-3);

Use sparameters function to calculate the S-Parameters of the filter and plot them using the rfplot function.

spar4 = sparameters(compfilt1,linspace(0.1e9,14e9,31));
figure;
rfplot(spar4);

Composite Filter Type 2

Create the variables and assign the values given in the paper[1]. Use the traceRectangular shape to create all the rectangles as shown in the figure and join them to create the filter structure. Visualize the structure using the show function.

Whi = 0.2e-3;
Wlo = 3.2e-3;
L1  = 0.85e-3;
L2  = 3.22e-3;
L3  = 1.54e-3;
L4  = 3.39e-3;
L5  = 2.27e-3;
Lstub1 = 3.45e-3;
a  = traceRectangular('Length',PortLineL,'Width',PortLineW,'Center',[PortLineL/2,0]);
b  = traceRectangular('Length',L1,'Width',Whi,'Center',[PortLineL+L1/2,0]);
c  = traceRectangular('Length',L2,'Width',Wlo,'Center',[PortLineL+L1+L2/2,0]);
l = traceRectangular('Length',Wstub,'Width',Lstub1,'Center',[PortLineL+L1+L2+L3/2,Lstub1/2+Whi/2]);
d  = traceRectangular('Length',L3,'Width',Whi,'Center',[PortLineL+L1+L2+L3/2,0]);
e  = traceRectangular('Length',L4,'Width',Wlo,'Center',[PortLineL+L1+L2+L3+L4/2,0]);
f  = traceRectangular('Length',L5,'Width',Whi,'Center',[PortLineL+L1+L2+L3+L4+L5/2,0]);
g  = traceRectangular('Length',L4,'Width',Wlo,'Center',[PortLineL+L1+L2+L3+L4+L5+L4/2,0]);
m = traceRectangular('Length',Wstub,'Width',Lstub1,'Center',[PortLineL+L1+L2+L3+L4+L5+L4+L3/2,Lstub1/2+Whi/2]);
h  = traceRectangular('Length',L3,'Width',Whi,'Center',[PortLineL+L1+L2+L3+L4+L5+L4+L3/2,0]);
i  = traceRectangular('Length',L2,'Width',Wlo,'Center',[PortLineL+L1+L2+L3+L4+L5+L4+L3+L2/2,0]);
j  = traceRectangular('Length',L1,'Width',Whi,'Center',[PortLineL+L1+L2+L3+L4+L5+L4+L3+L2+L1/2,0]);
k  = traceRectangular('Length',PortLineL,'Width',PortLineW,'Center',[PortLineL+L1+L2+L3+L4+L5+L4+L3+L2+L1+PortLineL/2,0]);
compfiltShape2 = a+b+c+d+e+f+g+h+i+j+k+l+m;
figure;
show(compfiltShape2);

Create the PCB Stack of the filter using the pcbComponent. Assign the filter shape, dielectric, and groundplane to the Layers property. Set the BoardThickness to 0.508 mm and assign the BoardShape to the ground plane. Set the FeedDiameter and FeedLocations. Visualize the PCB.

compfilt2 = pcbComponent;
d = dielectric('Teflon');
d.EpsilonR  = 2.2;
d.Thickness = 0.508e-3;
GPL1 = PortLineL+L1+L2+L3+L4+L5+L4+L3+L2+L1+PortLineL;
GPW  = 20e-3;
gnd  = traceRectangular('Length',GPL1,'Width',GPW/2,'Center',[GPL1/2,0]);
compfilt2.BoardThickness = 0.508e-3;
compfilt2.Layers         = {compfiltShape2,d,gnd};
compfilt2.BoardShape     = gnd;
compfilt2.FeedDiameter   = PortLineW/2;
compfilt2.FeedLocations  = [0,0,1,3;GPL1,0,1,3];
compfilt2.ViaLocations   = [PortLineL+L1+L2+L3/2,Lstub1+Whi/2-0.2e-3,1,3;PortLineL+L1+L2+L3+L4+L5+L4+L3/2,Lstub1+Whi/2-0.2e-3,1,3];
compfilt2.ViaDiameter    = Wstub/2;
figure;
show(compfilt2);

Use the mesh function to generate a manual mesh with a MaxEdgeLength as 1.5 mm.

figure;
mesh(compfilt2,'MaxEdgeLength',1.5e-3);

Use sparameters function to calculate the S-Parameters of the filter and plot them using the rfplot function.

spar5 = sparameters(compfilt2,linspace(0.5e9,14e9,41));
figure;
rfplot(spar5);

References

1) Ching-Luh Hsu, Fu-Chieh Hsu and Jen-Tsai Kuo, Microstrip Bandpass Filters for Ultra-Wideband (UWB) Wireless Communications.