Main Content

Model and Analyze Microstrip Diplexer using Open Loop Resonator

This example shows how to model and analyze a microstrip diplexer with the open loop resonator using RF PCB Toolbox.

The diplexer represents the simplest form of a multiplexer. It allows a simultaneous transmission and reception of signals by using a single antenna. Diplexers are the key components in microwave communication systems, such as radar systems, cellular phones, and satellite communication systems to reduce the size and the mass of the whole device.

This example models and analyzes a microstrip diplexer using two band-pass filters for the Industrial Scientific Medical (ISM) applications at 5.8 GHz and the WIMAX applications at 3.17 GHz to 4.2 GHz bands, along with a matching network by using open loop resonators and with the good arrangement of the transmission feed lines.

The Section 1 shows the analysis of open loop bandpass filters at 3.28 GHz and 5.8 GHz respectively and the section 2 describes the microstrip diplexer and scattering parameter behavior with the designed dimensions used [1].

Create and Analyze Open Loop Bandpass Filters

This section will show the analysis of open loop bandpass filters designed at 5.8 GHz and 3.28 GHz with the designed dimensions in [1].

The schematic of the open loop resonator is show below:

Create the variable for the substrate

% Dimensions of the substrate
h = 1.6e-3;      % Height of the substrate
er = 4.4;        % Dielectric constant
tand = 0.025;    % Loss tangent

Create Bandpass Filter at 5.86 GHz

Create the variable to set the dimensions in [1] of the open loop filter that is designed at 5.8 GHz.

W1_f1 = 0.75e-3; W2_f1 = 0.75e-3; S1_f1 = 0.2e-3; S2_f1 = 0.2e-3;
L1_f1 = 7.6e-3;  L3_f1 = 1.35e-3;  L4_f1 = 6.2e-3; S3_f1 = 0.7e-3;

Pass the variables with the dimensions at 5.8 Ghz to the function CreateOpenLoopFilter and visualize it.

[OpenLoop_Filter1, pcb_fiter1] = CreateOpenLoopFilter(W1_f1,W2_f1,S1_f1,S2_f1,L1_f1,L3_f1,L4_f1,S3_f1,h,er,tand);
figure; show(pcb_fiter1);

Figure contains an axes object. The axes object with title pcbComponent element, xlabel x (mm), ylabel y (mm) contains 7 objects of type patch, surface. These objects represent PEC, feed, FR4.

Analyze the behaviour of open loop filter at 5.86 GHz using sparameters.

spar_filter1 = sparameters(pcb_fiter1,linspace(4.5e9,7e9,51));
figure; rfplot(spar_filter1,1,1);
hold on;  rfplot(spar_filter1,2,1);

Figure contains an axes object. The axes object with xlabel Frequency (GHz), ylabel Magnitude (dB) contains 2 objects of type line. These objects represent dB(S_{11}), dB(S_{21}).

Create Bandpass Filter at 3.28 GHz

Create the variable to set the dimensions in [1] of the open loop filter that is designed at 3.28 GHz.

W1_f2 = 0.75e-3; W2_f2 = 0.75e-3; S1_f2 = 0.2e-3; S2_f2 = 0.2e-3;
L1_f2 = 8.5e-3;  L3_f2 = 1.3e-3; L4_f2 = 12.5e-3; S3_f2 = 0.5e-3;

Pass the variables with the dimensions at 3.28 GHz to the function CreateOpenLoopFilter and visualize it.

[OpenLoop_Filter2, pcb_fiter2] = CreateOpenLoopFilter(W1_f2,W2_f2,S1_f2,S2_f2,L1_f2,L3_f2,L4_f2,S3_f2,h,er,tand);
figure; show(pcb_fiter2);

Figure contains an axes object. The axes object with title pcbComponent element, xlabel x (mm), ylabel y (mm) contains 7 objects of type patch, surface. These objects represent PEC, feed, FR4.

Analyze the behavior of open loop filter at 3.28 GHz using sparameters.

spar_filter2 = sparameters(pcb_fiter2,linspace(2.5e9,4.5e9,51));
figure; rfplot(spar_filter2,1,1);
hold on;  rfplot(spar_filter2,2,1);

Figure contains an axes object. The axes object with xlabel Frequency (GHz), ylabel Magnitude (dB) contains 2 objects of type line. These objects represent dB(S_{11}), dB(S_{21}).

Create and Analyze Microstrip Diplexer Using Open Loop Bandpass Filter

Model the microstrip diplexer using the open loop filters designed in section 1 with the proper arrangement of filter along with transmission feed lines.

shapeFilter1 = copy(OpenLoop_Filter1);
shapeFilter2 = copy(pcb_fiter2.Layers{1});
shapeFilter2 = rotateZ(shapeFilter2,90);
shapeFilter2 = rotateZ(shapeFilter2,180);
L1_filter2   = 8.5e-3; 
L1 = L1_f1;
W1 = W1_f1;
S1 = S1_f1;
trnsfac = -(L1+L1+S1)/2;
shapeFilter2 = translate(shapeFilter2,[trnsfac+W1/2,L1_filter2-W1/4,0]);

Lport3 = 5e-3;
t = 1.5e-3;
port3 = traceRectangular("Length",W1,"Width",Lport3,"Center",[-t,-Lport3/2]);

diplexer = shapeFilter1+shapeFilter2+port3;

pcb_diplexer = pcbComponent;
h = 1.6e-3;      % Height of the substrate
er = 4.4;        % Dielectric constant
tand = 0.025;    % Loss tangent
gndL1 = 21e-3;
gndW1 = 25e-3;
gndL = L1_f1+L1_f1+S1_f1; % GroundPlaneLength
pcb_diplexer.BoardThickness = h;

gnd = traceRectangular("Length",gndL1,"Width",gndW1,"Center",[0,6e-3]);
sub = dielectric("Name",{'FR4'},"EpsilonR",er,"LossTangent",tand,"Thickness",h);
pcb_diplexer.BoardShape = gnd;
pcb_diplexer.Layers = {diplexer,sub,gnd};
pcb_diplexer.FeedDiameter = W1/2;
pcb_diplexer.FeedLocations = [-t,-Lport3,3,1;-gndL/2+W1/2,2*L1_filter2-W1/4,3,1;gndL/2,0,3,1];

figure; show(pcb_diplexer);

Figure contains an axes object. The axes object with title pcbComponent element, xlabel x (mm), ylabel y (mm) contains 14 objects of type patch, surface. These objects represent PEC, feed, FR4.

Analyze the sparameters of diplexer

spar = sparameters(pcb_diplexer,[linspace(2e9,4e9,51),linspace(4.01e9,8e9,51)]);
figure; rfplot(spar,1,1);
hold on; rfplot(spar,1,2);
hold on; rfplot(spar,1,3);
hold on; rfplot(spar,2,3);

Figure contains an axes object. The axes object with xlabel Frequency (GHz), ylabel Magnitude (dB) contains 4 objects of type line. These objects represent dB(S_{11}), dB(S_{12}), dB(S_{13}), dB(S_{23}).

The simulated insertion loss is about 2.38 dB for the Rx filter and 0.9 dB for the Tx filter. The return loss in the upper and lower filter is about 16.47 dB and 15.89 dB, respectively. The isolation between the two channels is greater than 25 dB. Several transmissions zeros near the pass bands located at 2.72 GHz, 3.68 GHz, 5.96 GHz and 7.28 GHz respectively are obtained.

CreateOpenLoopFilter is the function that creates open loop filter shape and the pcbComponent with different dimensions.

function [OpenLoopShape, OpenLoopPcbComp] = CreateOpenLoopFilter(W1,W2,S1,S2,L1,L3,L4,S3,h,er,tand)
rec1 = traceRectangular("Length",L4,"Width",L3,"Center",[0,W1/2+S2+W2+L3/2]);
rec2 = traceRectangular("Length",L4+(2*W2),"Width",L3+(2*W2),"Center",[0,W1/2+S2+(L3+(2*W2))/2]);
split1 = traceRectangular("Length",S3,"Width",W2+0.01*L3,"Center",[0,W1/2+S2+W2+L3+W2/2]);
openLoop1 = (rec2-rec1)-split1;

% input/output line
mline = traceRectangular("Length",L1+L1+S1,"Width",W1,"Center",[0,0]);
FeedSplit = traceRectangular("Length",S1,"Width",W1,"Center",[0,0]);
feed = mline-FeedSplit;
OpenLoopShape = openLoop1+feed;

% Create the variables to define the substrate dimensions

gndL = L1+L1+S1; % GroundPlaneLength
gndW = 15e-3;    % GroundPlaneWidth

pcb = pcbComponent;
pcb.BoardThickness = h;
gnd = traceRectangular("Length",gndL,"Width",gndW,"Center",[0,0]);
sub = dielectric("Name",{'FR4'},"EpsilonR",er,"LossTangent",tand,"Thickness",h);
pcb.BoardShape = gnd;
pcb.Layers = {OpenLoopShape,sub,gnd};
pcb.FeedDiameter = W1/2;
pcb.FeedLocations = [-gndL/2,0,1,3;gndL/2,0,1,3;];
OpenLoopPcbComp = pcb;
end

Reference

[1]. A. Chinig, A. Errkik, L .El Abdellaoui, A. Tajmouati "Design of a Microstrip Diplexer and Triplexer Using Open Loop Resonators," Journal of Microwaves, Optoelectronics and Electromagnetic Applications, Vol. 15, No. 2, June 2016.