余割平方波束赋形设计的核心是通过定制天线辐射能量的空间分布,解决高空天线对地面 / 低空目标的 “均匀覆盖” 问题,其核心矛盾是 “斜距差异导致的接收功率不均”。因此,设计的核心需求是:让不同仰角(对应不同距离)的目标接收功率一致,实现 “无死角、无过强” 的均匀覆盖
一.理论依据
      要实现均匀覆盖,需通过天线增益(G(θ)的空间分布,补偿斜距 R 变化带来的功率衰减。这一过程可通过链路预算公式严格推导,是余割平方波束的 “理论基石”。
二.实现原理
      余割平方波束的 “赋形” 本质是通过天线结构设计,调整辐射能量的空间分布,使实际方向图逼近修正后的(csc²)目标模型。主流实现方案分为两类,核心逻辑均为 “能量分布调控”。
三.案例设计

% 16元直线阵余割平方赋形方向图设计

clear; clc; close all;

%% 参数设置

N = 16;                  % 阵元数量

d_lambda = 0.5;          % 阵元间距(波长)

theta_min = 10;          % 覆盖角度范围起始(度)

theta_max = 70;          % 覆盖角度范围结束(度)

theta_scan = 0;          % 波束扫描角度(度)

SLL_dB = -30;            % 目标副瓣电平(dB)

theta_res = 0.05;        % 角度分辨率(度)

% 参数合法性检查

if N <= 0 || d_lambda <= 0 || theta_min >= theta_max || SLL_dB >= 0

    error(‘输入参数不合法,请检查参数设置!’);

end

% 角度范围(弧度)

theta_deg = -90:theta_res:90;

theta = theta_deg * pi / 180;

theta_scan_rad = theta_scan * pi / 180;

%% 定义目标余割平方方向图

G_target = zeros(size(theta));

for i = 1:length(theta)

    if theta_deg(i) >= theta_min && theta_deg(i) <= theta_max

        if abs(sin(theta(i))) < 1e-6

            G_target(i) = 1e12;  % 避免无穷大

        else

            G_target(i) = 1 / (sin(theta(i))^2);

        end

        % 边缘平滑

        if theta_deg(i) < theta_min + 3

            alpha = (theta_deg(i) – theta_min) / 3;

            G_target(i) = G_target(i) * alpha + G_target(i)*0.2*(1-alpha);

        elseif theta_deg(i) > theta_max – 3

            alpha = (theta_max – theta_deg(i)) / 3;

            G_target(i) = G_target(i) * alpha + G_target(i)*0.2*(1-alpha);

        end

    elseif theta_deg(i) > theta_max

        G_target(i) = 0.2 * exp(-0.2*(theta_deg(i)-theta_max));

    else

        if theta_deg(i) < 3

            G_target(i) = 0.05 * exp(0.1*(theta_deg(i)+3));

        else

            G_target(i) = 0.2 * exp(-0.2*(theta_min-theta_deg(i)));

        end

    end

end

G_target = G_target / max(G_target);

G_target_dB = 20 * log10(G_target + eps);

%% 定义优化函数

obj_fun = @(x) array_optimization_function(x, N, d_lambda, theta, …

    theta_scan_rad, G_target, theta_min, theta_max, SLL_dB, theta_res);

%% 初始值设置

amplitude_init = taylorwin(N, -SLL_dB);

amplitude_init = amplitude_init / max(amplitude_init);

amplitude_init = amplitude_init’;  % 转为行向量

phase_init = 0.02 * (1:N) – 0.02*(N+1)/2;

x0 = [amplitude_init, phase_init];

% 关键修复:定义变量下界(lb)和上界(ub)

lb = [zeros(1, N), -ones(1, N)*pi];  % 幅度≥0,相位≥-π

ub = [ones(1, N), ones(1, N)*pi];    % 幅度≤1,相位≤π

%% 优化参数设置

options = optimoptions(‘fmincon’, …

    ‘Display’, ‘iter’, …

    ‘MaxFunctionEvaluations’, 3e6, …

    ‘MaxIterations’, 3e4, …

    ‘TolFun’, 1e-10, …

    ‘TolX’, 1e-10, …

    ‘Algorithm’, ‘sqp’, …

    ‘OptimalityTolerance’, 1e-10, …

    ‘ConstraintTolerance’, 1e-10);

%% 执行优化

try

    [x_opt, fval, exitflag, output] = fmincon(obj_fun, x0, [], [], [], [], …

        lb, ub, [], options);  

    if exitflag <= 0

        warning(‘优化未正常收敛!退出标志: %d’, exitflag);

        disp(‘优化输出信息:’);

        disp(output);

    end

余割平方波束赋形设计原理

catch ME

    error(‘优化过程出错: %s’, ME.message);

end

%% 提取优化结果

amplitude_opt = x_opt(1:N);

phase_opt = x_opt(N+1:2*N);

if any(isnan(amplitude_opt)) || any(isnan(phase_opt))

    error(‘优化结果包含NaN值,请检查目标函数’);

end

%% 计算方向图并分析

AF = array_factor(N, d_lambda, theta, theta_scan_rad, amplitude_opt, phase_opt);

AF_normalized = AF / max(AF);

AF_dB = 20 * log10(abs(AF_normalized) + eps);

main_lobe_mask = theta_deg >= theta_min – 8 & theta_deg <= theta_max + 8;

sidelobe_mask = ~main_lobe_mask;

left_sidelobe_mask = sidelobe_mask & (theta_deg < theta_min – 8);

right_sidelobe_mask = sidelobe_mask & (theta_deg > theta_max + 8);

max_left_sidelobe = max(AF_dB(left_sidelobe_mask));

max_right_sidelobe = max(AF_dB(right_sidelobe_mask));

max_sidelobe = max([max_left_sidelobe, max_right_sidelobe]);

%% 结果显示

fprintf(‘优化完成!n’);

fprintf(‘目标副瓣电平: %.2f dBn’, SLL_dB);

fprintf(‘实际左侧最大副瓣: %.2f dBn’, max_left_sidelobe);

fprintf(‘实际右侧最大副瓣: %.2f dBn’, max_right_sidelobe);

fprintf(‘实际最大副瓣: %.2f dBn’, max_sidelobe);

%% 绘制方向图

figure;

plot(theta_deg, AF_dB, ‘LineWidth’, 1.5);

hold on;

plot(theta_deg, G_target_dB, ‘r–‘, ‘LineWidth’, 1.2);

plot([theta_min, theta_min], [min(AF_dB), max(AF_dB)], ‘k–‘);

plot([theta_max, theta_max], [min(AF_dB), max(AF_dB)], ‘k–‘);

plot(theta_deg, ones(size(theta_deg)) * SLL_dB, ‘g–‘);

xlabel(‘角度 (度)’);

ylabel(‘归一化增益 (dB)’);

title(’16元直线阵余割平方方向图’);

grid on;

xlim([-90, 90]);

ylim([min(AF_dB)-5, 5]);

legend(‘优化方向图’, ‘目标方向图’, ‘覆盖起点’, ‘覆盖终点’, ‘目标副瓣’);

%% 子函数:计算阵列因子

function AF = array_factor(N, d_lambda, theta, theta_scan, amplitude, phase)

    AF = zeros(size(theta));

    k = 2 * pi;

    d = d_lambda;

    for n = 0:N-1

        phase_diff = k * d * n * (sin(theta) – sin(theta_scan)) + phase(n+1);

        AF = AF + amplitude(n+1) * exp(1i * phase_diff);

    end

end

%% 子函数:优化目标函数

function fval = array_optimization_function(x, N, d_lambda, theta, theta_scan, …

    G_target, theta_min, theta_max, SLL_dB, theta_res)

    amplitude = x(1:N);

    phase = x(N+1:2*N);

    if any(amplitude < 0) || any(amplitude > 1)

        fval = 1e10;

        return;

    end

    AF = array_factor(N, d_lambda, theta, theta_scan, amplitude, phase);

    AF_normalized = abs(AF) / max(abs(AF) + eps);

    AF_dB = 20 * log10(AF_normalized + eps);

    theta_deg = theta * 180 / pi;

    main_lobe_mask = theta_deg >= theta_min & theta_deg <= theta_max;

    error_weights = ones(size(AF_normalized));

    error_weights(main_lobe_mask) = 5.0;

    error_main_lobe = sum(((AF_normalized – G_target).^2) .* error_weights);

    sidelobe_mask = ~main_lobe_mask;

    sidelobe_values = AF_dB(sidelobe_mask);

    sidelobe_penalty = sum(max(0, sidelobe_values – SLL_dB).^4) * 50;

    amplitude_smooth_penalty = sum(diff(amplitude).^2) * 0.5;

    phase_smooth_penalty = sum(diff(phase).^2) * 0.2;

    edge_penalty = (amplitude(1)^2 + amplitude(end)^2) * 2;

    fval = error_main_lobe + sidelobe_penalty + …

           amplitude_smooth_penalty + phase_smooth_penalty + edge_penalty;

    if isnan(fval) || isinf(fval)

        fval = 1e10;

    end

end

运行后设计结果如下: