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);

Figure contains an axes object. The axes object contains 2 objects of type patch. This object represents PEC.

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.Layers         = {filt1,d,gnd};
LPF.BoardThickness = 0.508e-3;
LPF.BoardShape     = gnd;
LPF.FeedDiameter   = PortLineW/2;
LPF.FeedLocations  = [0,0,1,3;GPL1,0,1,3];
figure,show(LPF); 

Figure contains an axes object. The axes object with title pcbComponent element contains 7 objects of type patch, surface. These objects represent PEC, feed, Teflon.

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);

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent dB(S_{11}), dB(S_{21}), dB(S_{12}), dB(S_{22}).

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);

Figure contains an axes object. The axes object contains 2 objects of type patch. This object represents PEC.

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.Layers         = {filt2,d,gnd};
HPF.BoardThickness = 0.508e-3;
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);

Figure contains an axes object. The axes object with title pcbComponent element contains 13 objects of type patch, surface. These objects represent PEC, feed, Teflon.

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);

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent dB(S_{11}), dB(S_{21}), dB(S_{12}), dB(S_{22}).

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);

Figure contains an axes object. The axes object contains 2 objects of type patch. This object represents PEC.

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.Layers         = {filtcasc,d,gnd};
casc.BoardThickness = 0.508e-3;
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);

Figure contains an axes object. The axes object with title pcbComponent element contains 13 objects of type patch, surface. These objects represent PEC, feed, Teflon.

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);

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent dB(S_{11}), dB(S_{21}), dB(S_{12}), dB(S_{22}).

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);

Figure contains an axes object. The axes object contains 2 objects of type patch. This object represents PEC.

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.Layers         = {compfiltShape1,d,gnd};
compfilt1.BoardThickness = 0.508e-3;
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);

Figure contains an axes object. The axes object with title pcbComponent element contains 15 objects of type patch, surface. These objects represent PEC, feed, Teflon.

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

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

Figure contains an axes object and an object of type uicontrol. The axes object with title Dielectric volume contains 2655 objects of type patch, surface.

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);

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent dB(S_{11}), dB(S_{21}), dB(S_{12}), dB(S_{22}).

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);

Figure contains an axes object. The axes object contains 2 objects of type patch. This object represents PEC.

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.Layers         = {compfiltShape2,d,gnd};
compfilt2.BoardThickness = 0.508e-3;
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);

Figure contains an axes object. The axes object with title pcbComponent element contains 11 objects of type patch, surface. These objects represent PEC, feed, Teflon.

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

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

Figure contains an axes object and an object of type uicontrol. The axes object with title Dielectric volume contains 2013 objects of type patch, surface.

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);

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent dB(S_{11}), dB(S_{21}), dB(S_{12}), dB(S_{22}).

References

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