필터 지우기
필터 지우기

impedance matching single stub

조회 수: 10 (최근 30일)
Moza
Moza 2023년 11월 29일
답변: David Goodmanson 2023년 11월 30일
I am trying to plot the reflection coefficient magnitude from 1 to 3 GHz for a single stub Short circuit to get the result below.
I worked on the code but I am not getting the same result.
clear all;
close all;
clc;
f = linspace(1e9, 3e9, 2000);
omega = 2 * pi * f; % Angular frequency
Z0 = 50;
R_load = 60;
C_load = 0.995e-12;
Gamma1 = zeros(size(f));
Gamma2 = zeros(size(f));
c = 3e8;
lambda = c ./ f
l_stub1 = 0.110*(c./2e9);
l_stub2 = 0.260*(c./2e9);
for i = 1:length(f)
lambda = c / f(i); % Wavelength
beta = 2 * pi / lambda; % Phase constant
% Load impedance (complex due to capacitor)
ZL = R_load - 1i./(omega(i) * C_load)*l_stub1;
ZL1 = R_load - 1i./(omega(i) * C_load)*l_stub2;
% Stub impedances (short-circuited stub)
Z_stub1 = -1i * Z0 * tan(beta * l_stub1); % Solution #1
Z_stub2 = -1i * Z0 * tan(beta * l_stub2); % Solution #2
% Total impedance at the point where the stub connects
Z_total1 = 1 ./ (1./ZL + 1./Z_stub1);
Z_total2 = 1 ./ (1./ZL + 1./Z_stub2);
% Reflection coefficients
Gamma1(i) = (Z_total1 - Z0) / (Z_total1 + Z0);
Gamma2(i) = (Z_total2 - Z0) / (Z_total2 + Z0);
end
absGamma1 = abs(Gamma1);
absGamma2 = abs(Gamma2);
figure;
plot(f / 1e9, absGamma1, 'b', f / 1e9, absGamma2, 'r--');
xlabel('Frequency (GHz)');
ylabel('|Γ|');
title('Magnitude of Reflection Coefficient |Γ| versus Frequency');
legend('Solution #1', 'Solution #2');
grid on;

채택된 답변

David Goodmanson
David Goodmanson 2023년 11월 30일
Hi Moza,
You have most of it, but you need to add a step and change a sign error. The section terminated by R and C, I called that section A of length la, and the shorted section is section S of length ls.
At the point where the two lines connect, the impedance of section A is not ZL, which is at the right end of the line, but rather the impedance seen at left end of the line, which is
Za = Z0*(ZL + i*Z0*tan(beta*la))./(Z0 + i*ZL.*tan(beta*la)); (1)
and your shorted stub impedance has a sign error and should be
Zs = (i*Z0*tan(beta*ls)); (2)
I defined (same as what you have)
lambda0 = c/2e9; so
case 1 la = .110*lambda0; ls = .095*lambda0;
case 2 la = .260*lambda0; ls = .405*lambda0;
If you add the new Za and Zs in parallel and keep going you will reproduce the plots.
Incidentally, with vector f a for loop is unnecessary if enough .* and ./ are used, which it seems like you already have quite a few of but not all.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Visualization and Data Export에 대해 자세히 알아보기

제품


릴리스

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by