方向图传播因子-函数编写
- 和差比幅法单脉冲测角原理
- 代码
- 仿真结果
- 参数说明
和差比幅法单脉冲测角原理
有关单脉冲测角和差比幅法的原理已经在博文单脉冲测角-和差比幅法中详细介绍了,我们在实际仿真的时候,往往需要在给定来波方向下方向图转化因子(directional pattern propagation fac-tor ,DPPF)的输出,它的输入是来波方向,输出即波束形成之后的系数——方向图转化因子,它表示阵列下经过各阵元加权求和后对某一个来波方向的信号的影响。
在编程的时候,往往希望采用模块化的结构,我将求方向图转化因子的过程编写为了一个函数,供参考。这个函数中除了能输出DPPF之外,还可以绘制和差波束方向图、单脉冲比鉴角曲线、一次函数法拟合曲线以及在该来波方向下的拟合值。
由于差波束比幅法的单脉冲比MRC为:
M
R
C
=
Δ
(
φ
)
Σ
(
φ
)
=
∣
a
H
(
φ
l
)
a
(
φ
)
∣
−
∣
a
H
(
φ
r
)
a
(
φ
)
∣
∣
w
Σ
H
a
(
φ
)
∣
MRC=\frac{\Delta(\varphi)}{\Sigma(\varphi)}=\frac{\left| a^H(\varphi_l)a(\varphi) \right|-\left| a^H(\varphi_r)a(\varphi) \right|}{\left| w^H_{\Sigma}a(\varphi)\right|}
MRC=Σ(φ)Δ(φ)=
wΣHa(φ)
aH(φl)a(φ)
−
aH(φr)a(φ)
可以看到,和波束和两个相减的波束都是取幅度,所以该函数中也取了幅度。
代码
该函数MonopulseSumDiffFactor的代码如下:
function [sumFactor,diffFactor,fitSlope]=MonopulseSumDiffFactor(elementNum,thetaDseire,thetaMain,thetaDOA,plotEnableHigh)
% 该函数用于单脉冲测角-和差比幅法的方向图仿真和方向图传播因子的生成
% Author:huasir 2023.11.20 @Beijing
% Input :
% * elementNum: 阵元数
% * thetaDseire:和波束的指向角度
% * thetaDOA:来波的DOA
% * thetaMain:3dB主瓣宽度,theta_main = 2theta_mbs
% * 在该宽度内形成对称的两个波束,实际的波束宽度可以更小
% * plotEnableHigh: 绘图控制符,1:打开绘图,0:关闭绘图
% Output :
% * sumFactor:和波束方向图传播因子
% * diffFactor:差波束方向图传播因子
% * fitSlope: 拟合斜率
N = elementNum; %阵元数
theta = (-90:0.1:90); %观测角度范围
theta0 = thetaDseire; %波形形成的方向
thetaL = thetaDseire-1/2*thetaMain; %用于构造差波束的波束1的角度
thetaR = thetaDseire+1/2*thetaMain; %用于构造差波束的波束2的角度,thetaL和thetaR关于theta0对称
theta0 = theta0*pi/180; %弧度换算为角度
theta = theta*pi/180; %弧度换算为角度;
thetaL = thetaL*pi/180; %弧度换算为角度
thetaR = thetaR*pi/180; %弧度换算为角度
d_lembda = 1/2; %阵元间距比波长,一般采用半波长
%% 构造和差波束
a = exp(j*2*pi*d_lembda*(0:N-1)'*sin(theta)); %导向矢量
wSigma = exp(j*2*pi*d_lembda*(0:N-1)'*sin(theta0)); %和波束权向量
wDeltaL = exp(j*2*pi*d_lembda*(0:N-1)'*sin(thetaL)); %用于构造差波束的波束1的权向量
wDeltaR = exp(j*2*pi*d_lembda*(0:N-1)'*sin(thetaR)); %用于构造差波束的波束2的权向量
ySigma = abs(wSigma'*a); %和波束
yDelta = abs(wDeltaL'*a)-abs(wDeltaR'*a); %差波束
%% 绘制和差波束
if plotEnableHigh==1
figure;
plot(theta*180/pi,20*log10(ySigma/max(ySigma)),'linewidth',1); %绘制和波束
hold on;
plot(theta*180/pi,20*log10(yDelta/max(yDelta)),'linewidth',1); %绘制差波束
legend('和波束','差波束');
xlabel('方位角/°');ylabel('归一化功率方向图/dB');
axis tight;% axistight 使得图形框图靠近数据
grid on; %添加栅格线
ylim([-30, 0]); % 为了限制y值范围,使得图像显示的更加合理
title(sprintf('阵元数:%d,波束方向:%.0f°',N,theta0))%添加图题
end
%% 提取主瓣区域附近的和差波束,并计算单脉冲比
thetaL = thetaDseire-1/2*thetaMain %用于构造差波束的波束1的角度
thetaR = thetaDseire+1/2*thetaMain %用于构造差波束的波束2的角度,thetaL和thetaR关于theta0对称
m1 = round((thetaL-(-90))/0.1+1); %截取主瓣内部分区域对应的下标
m2 = round((thetaR-(-90))/0.1+1); %截取主瓣内部分区域对应的下标
MRC = yDelta(m1:m2)./ySigma(m1:m2); %%计算单脉冲比
%% 绘制单脉冲比曲线
if plotEnableHigh==1
figure;
plot((thetaL:0.1:thetaR),MRC,'linewidth',1);
set(gca,'XTick',[thetaL:1:thetaR]); %设置要显示的坐标轴的刻度
xlabel('角度(°)');ylabel('和差比幅');
axis tight;% axistight 使得图形框图靠近数据
grid on; %添加栅格线
title('单脉冲比曲线');
end
%% 拟合为一次函数y=kx+b
p = polyfit(MRC,(thetaL:0.1:thetaR),1); % x为单脉冲比,y为角度,第3个输入参数'1'表示拟合为1次函数,返回的p是一个包含两个元素的向量,分别是参数k和b
%% 绘制拟合效果图
yFit = polyval(p,MRC); % 由拟合函数计算得到的角度
if plotEnableHigh==1
figure;
plot((thetaL:0.1:thetaR),MRC,'o','linewidth',1); %点图
hold on; %保持绘图窗口,在此基础上继续绘图
plot(yFit,MRC,'linewidth',1); %拟合出的一次函数
set(gca,'XTick',[-5:1:5]); %设置要显示的坐标轴的刻度
xlabel('角度(°)');ylabel('和差比幅');
axis tight;% axistight 使得图形框图靠近数据
grid on; %添加栅格线
title('拟合效果图');
end
%% 输出指定角度下来波的方向图转化因子
tempTheta = thetaDOA; %任意取一个角度
tempTheta = tempTheta*pi/180; %角度转化为弧度
aTheta = exp(j*2*pi*d_lembda*(0:N-1)'*sin(tempTheta)); %导向矢量
ySum = abs(wSigma'*aTheta); %和波束的方向图转化因子
yDiff = abs(wDeltaL'*aTheta)-abs(wDeltaR'*aTheta); %差波束的方向图转化因子
% tempMRC = yDiff/ySum
%% 传递参数
sumFactor = ySum; %和波束的方向图传递因子
diffFactor = yDiff; %差波束的方向图传递因子
fitSlope = p(1); %拟合一次函数的斜率,(yDiff/ySum)*p(1)即为输出的角度
fprintf('由拟合曲线得到的角度为%.2f\n',(yDiff/ySum)*p(1));
end
仿真结果
编写主函数进行调用
clear all;close all;clc;
N = 8; %阵元数
theta0 = 0; %波形形成的方向
thetaMian = 10; %
DOA = 2;
plotEnableHigh = 1;
[sumFactor,diffFactor,fitSlope]=MonopulseSumDiffFactor(N,theta0,thetaMian,DOA,plotEnableHigh);
绘制出来的和差波束、单脉冲比曲线以及拟合图如下:
参数说明
由拟合曲线得到的角度为1.92°,与2°相差不大。这里的差波束是由两个波束相减得到的,这两个波束指向的角度位于和波束两侧,一左一右,一般而言,这两个角度得位于主瓣内,关于主瓣的计算方式可以参考博文波束形成中的主瓣宽度 ,其计算公式如下。
对于常见的均匀线性阵列结构,阵元间距
d
=
1
/
2
λ
d=1/2\lambda
d=1/2λ的情况下,可以得到主波束宽度为:
θ
m
b
s
=
2
θ
0.5
=
50.7
λ
N
1
/
2
λ
c
o
s
θ
Δ
(
∘
)
=
101.4
N
c
o
s
θ
Δ
(
∘
)
\theta{mbs}=2\theta_{0.5}=\frac{50.7\lambda }{ N1/2\lambda cos\theta_{\Delta}}(^\circ)=\frac{101.4 }{ Ncos\theta_{\Delta}}(^\circ)
θmbs=2θ0.5=N1/2λcosθΔ50.7λ(∘)=NcosθΔ101.4(∘)
对于本仿真而言,
θ
Δ
=
0
°
\theta_{\Delta}=0°
θΔ=0°,
N
=
8
N=8
N=8,可以得到主瓣宽度为:
θ
m
b
s
=
2
θ
0.5
=
50.7
λ
N
1
/
2
λ
c
o
s
θ
Δ
(
∘
)
=
101.4
N
c
o
s
θ
Δ
(
∘
)
=
101.4
8
≈
12.
6
∘
\theta{mbs}=2\theta_{0.5}=\frac{50.7\lambda }{ N1/2\lambda cos\theta_{\Delta}}(^\circ)=\frac{101.4 }{ Ncos\theta_{\Delta}}(^\circ)=\frac{101.4}{8}\approx12.6^{\circ}
θmbs=2θ0.5=N1/2λcosθΔ50.7λ(∘)=NcosθΔ101.4(∘)=8101.4≈12.6∘
这里我们取更小的角度,取10°,所以形成差波束的两个角度分别为-5°和5°。