微波技术基础——单枝节匹配的计算机解(MATLAB)

发布时间 2023-10-18 22:15:14作者: Backsingles

一、实验目的

使用计算机程序计算单枝节匹配的问题,得到传输线段长度\overline{l_A}和枝节长度\overline{l_B}

二、实验思路

设归一化负载阻抗为Z_l=r_l+jx_l,通过传输线长度的阻抗为

\overline{Z_{in}}=\frac{\left( r_l+jx_l \right) +jt}{1+j\left( r_l+jx_l \right) t}

其中t=\tan \left( 2\pi \cdot l_A \right)

于是可以得到传输线长度的导纳为

\overline{Y_{in}}=\frac{1}{Z^_{in}}=\frac{\left( 1-x_lt \right) +jr_lt}{r_l+j\left( x_l+t \right)}=g_{in}+jb_{in}

很容易得到

\left\{ \begin{array}{l} g_{in}=\frac{r_l\left( 1-x_lt \right) +r_lt\left( x_l+t \right)}{r_l^2+\left( x_l+t \right) ^2}=\frac{r_l\left( 1+t^2 \right)}{r_l^2+\left( x_l+t \right) ^2}\\ b_{in}=\frac{r_l^2t-\left( 1-x_lt \right) \left( x_l+t \right)}{r_l^2+\left( x_l+t \right) ^2}\\ \end{array} \right.

又因为并联枝节的匹配条件是

\left\{ \begin{array}{l} g_{in}=1\\ \bar{Y}_s=-jb_{in}\\ \end{array} \right.

解得

t=\left\{ \begin{array}{l} \frac{x_l\pm \sqrt{r_l\left[ \left( r_l-1 \right) ^2+x_l^2 \right]}}{r_l-1},r_l\ne 1\\ -\frac{1}{2}x_l,\infty \ r_l=1\\ \end{array} \right.

\overline{Y_s}=-j\frac{x_lt^2+\left( r_l^2+x_l^2-1 \right) t-x_l}{r_l^2+\left( x_l+t \right) ^2}

同时可以得到传输线段长度\overline{l_A}和枝节长度\overline{l_B}的解

\overline{l_A}=\left\{ \begin{array}{l} \arctan \left( t \right) /360,\,\,t\ge 0\\ \left[ \arctan \left( t \right) +180 \right] /360,\,\,t<0\\ \end{array} \right.

\overline{l_B}=\left\{ \begin{array}{l} \arctan \left( \frac{1}{b_{in}} \right) /360,\,\,\overline{b_{in}}\ge 0\\ \left[ \arctan \left( \frac{1}{b_{in}} \right) +180 \right] /360,\,\,\overline{b_{in}}<0\\ \end{array} \right.

三、实验代码

function Single_branch_matching()
    % 创建图形化界面
    fig = figure('Position', [200, 200, 600, 400], 'Name', '单枝节匹配', 'NumberTitle', 'off');
    
    % 标题
    title = uicontrol(fig, 'Style', 'text', 'String', '单枝节匹配', 'Position', [200, 350, 200, 30], 'FontSize', 20);
    
    % 输入框和标签
    wavelength_label = uicontrol(fig, 'Style', 'text', 'String', '请输入波长:', 'Position', [100, 280, 120, 20], 'FontSize', 10);
    wavelength_input = uicontrol(fig, 'Style', 'edit', 'Position', [230, 280, 100, 20]);
    
    z0_label = uicontrol(fig, 'Style', 'text', 'String', '请输入特征阻抗:', 'Position', [100, 240, 120, 20], 'FontSize', 10);
    z0_input = uicontrol(fig, 'Style', 'edit', 'Position', [230, 240, 100, 20]);
    
    z_label = uicontrol(fig, 'Style', 'text', 'String', '请输入阻抗值:', 'Position', [100, 200, 120, 20], 'FontSize', 10);
    r_input = uicontrol(fig, 'Style', 'edit', 'Position', [230, 200, 50, 20]);
    j_label = uicontrol(fig, 'Style', 'text', 'String', '+j', 'Position', [280, 200, 20, 20], 'FontSize', 10);
    x_input = uicontrol(fig, 'Style', 'edit', 'Position', [300, 200, 50, 20]);
    
    % 计算按钮
    calculate_button = uicontrol(fig, 'Style', 'pushbutton', 'String', '计算', 'Position', [230, 150, 100, 30], 'Callback', @calculate);
    
    % 结果标签
    result_label = uicontrol(fig, 'Style', 'text', 'String', '', 'Position', [100, 100, 400, 30], 'FontSize', 12);
    
    function calculate(~, ~)
        % 获取输入参数
        wavelength = str2double(get(wavelength_input, 'String'));
        z0 = str2double(get(z0_input, 'String'));
        r = str2double(get(r_input, 'String'));
        x = str2double(get(x_input, 'String'));
        
        % 归一化阻抗值
        r_l = r / z0;
        x_l = x / z0;
        
        if r_l == 1
            % 如果负载阻抗的实部等于特性阻抗,则只有一个根,对应一组解
            t = -0.5 * x_l;
            
            % 计算枝节位置
            if t >= 0
                d = wavelength * atan(t) / (2 * pi);
            else
                d = wavelength * (atan(t) + pi) / (2 * pi);
            end
            
            % 计算枝节长度
            b_in = (r_l^2 * t - (1 - x_l * t) * (x_l + t)) / (r_l^2 + (x_l + t)^2);
            
            if b_in >= 0
                l = atan(1 / b_in) / (2 * pi);
            else
                l = (atan(1 / b_in) + pi) / (2 * pi);
            end
            
            % 输出结果
            result = ['d = ', num2str(d, '%.6f'), ', l = ', num2str(l, '%.6f')];
            set(result_label, 'String', result);
        else
            % 结果为两个根,对应两组解
            t1 = (x_l + sqrt(r_l * ((r_l - 1)^2 + x_l^2))) / (r_l - 1);
            t2 = (x_l - sqrt(r_l * ((r_l - 1)^2 + x_l^2))) / (r_l - 1);
            
            % 计算枝节位置
            if t1 >= 0
                d1 = wavelength * atan(t1) / (2 * pi);
            else
                d1 = wavelength * (atan(t1) + pi) / (2 * pi);
            end
            
            if t2 >= 0
                d2 = wavelength * atan(t2) / (2 * pi);
            else
                d2 = wavelength * (atan(t2) + pi) / (2 * pi);
            end
            
            % 计算枝节长度
            b_in_1 = (r_l^2 * t1 - (1 - x_l * t1) * (x_l + t1)) / (r_l^2 + (x_l + t1)^2);
            b_in_2 = (r_l^2 * t2 - (1 - x_l * t2) * (x_l + t2)) / (r_l^2 + (x_l + t2)^2);
            
            if b_in_1 >= 0
                l1 = wavelength * atan(1 / b_in_1) / (2 * pi);
            else
                l1 = wavelength * (atan(1 / b_in_1) + pi) / (2 * pi);
            end
            
            if b_in_2 >= 0
                l2 = wavelength * atan(1 / b_in_2) / (2 * pi);
            else
                l2 = wavelength * (atan(1 / b_in_2) + pi) / (2 * pi);
            end
            
            % 输出结果
            result = ['d1 = ', num2str(d1, '%.6f'), ', l1 = ', num2str(l1, '%.6f'), ' | d2 = ', num2str(d2, '%.6f'), ', l2 = ', num2str(l2, '%.6f')];
            set(result_label, 'String', result);
        end
    end
end

 四、实验结果