毫米波雷达探测目标的距离、速度和角度,其中距离和角度和天线设计相关性较强。天线增益越高,则根据雷达方程可知探测距离越远;天线波束越窄,则角度分辨率越高;天线副瓣/旁瓣越低,则干扰越少,虚假目标越少。
天线的性能直接影响雷达性能,现代的毫米波雷达几乎都使用阵列天线。阵列天线是根据电磁波在空间相互干涉的原理,把具有相同结构、相同尺寸的基本天线单元按照一定规律排列在一起组成的。
综合来看,毫米波雷达使用阵列天线的目标是获得增益高、波束窄、旁瓣低的空间方向图,比较理想的天线辐射方向图如下图1-1所示,而图1-2所示的方向图则比较一般,因为出现较高的旁瓣和栅瓣。
图1-1 理想方向图
图1-2 一般的方向图
因此,阵列天线设计的目标是通过空间布局、激励幅度、激励相位的优化设计,获得理想的辐射特性,包括阵列天线方向图、半功率波束宽度、增益和效率、旁瓣电平等。
阵列天线最容易想到的就是均匀排布,比如均匀直线排布、均匀平面排布等。空间上均匀排布的阵列天线旁瓣较高,可以通过调整每个阵元的激励幅度来获得低旁瓣。经典的激励幅度(馈电)分布有二项式分布、高斯分布、切比雪夫分布和泰勒分布等。
32阵元均匀间距直线阵列使用不同的馈电分布的结果如下,资料可以参考《阵列天线理论与工程应用》。
图2-1 不同的馈电分布
图2-2 不同馈电分布的接收波束形成
图2-1和2-2是32阵元等间距排布,但激励幅度(馈电)分布不同的仿真结果,可以看到,相比馈电均匀分布的情况,图2-1中的四种馈电分布形成的波束旁瓣均有明显的降低。
图2-1中二项式分布和高斯分布部分阵元馈电幅度较小,不适合实际使用;另外,图2-2中二项式分布和高斯分布的主瓣波束展宽较多,亦不适合实际使用,综上,切比雪夫和泰勒综合是较优的激励幅度优化方法,但只适用于均匀阵列。
平面阵列也可以通过阵元的幅度控制,获得更好的增益和旁瓣水平。除了均匀分布馈电,这里使用了高斯分布、切比雪夫分布和泰勒分布等。下面使用24×24的二维平面阵列天线进行仿真,给出不同馈电的分布和不同馈电分布下的波束形成结果。
这里使用MATLAB仿真了均匀分布、高斯分布、切比雪夫分布和泰勒分布的馈电结果,格子的大小和颜色代表了强度,每张图的右侧是相应的尺度。
图2-3 均匀分布平面阵列馈电
图2-4 高斯分布平面阵列馈电
图2-5 切比雪夫分布平面阵列馈电
图2-6 泰勒分布平面阵列馈电
不同馈电分布的平面阵列天线三维空间波束和俯视图的MATLAB仿真结果如下,可以看到相比于均匀分布,高斯分布、切比雪夫分布、泰勒分布的主瓣波束均有不同程度展宽,旁瓣也有明显降低。
图2-7 不同馈电分布的平面阵列波束方向图
图2-8 不同馈电分布的平面阵列波束方向图俯视图
在方位和俯仰0°方向做切面,可以得到俯仰面和方位面的方向图,MATLAB仿真结果如下,可以看到,图2-9和图2-10中,高斯分布、切比雪夫分布和泰勒分布的旁瓣均明显降低,同时主瓣略有展宽。
图2-9 不同馈电分布的俯仰切面方向图
图2-10 不同馈电分布的方位切面方向图
实际的毫米波雷达通常使用非等间距的稀疏阵列天线,这样可以显著降低硬件成本,同时对毫米波雷达探测性能的影响很小。
特斯拉的4D雷达天线如下图所示,发射和接收使用了不同的疏状天线,如果把疏状天线看成一个子阵,方向图函数为,那么二维平面阵列的方向图可以看作N个子阵方向图的叠加:
在接收时,可以对所有通道的数据做幅相加权合成不同的接收波束,则上式可以写为
其中,是不同通道的幅相加权系数。
图3-1 特斯拉4D雷达天线
每个子阵中,疏状天线的方向图由M个阵元的方向图叠加得到,可以用公式表示如下
其中是单个阵元的方向图,是不同阵元的激励,设计不同的激励可以得到不同的方向图,如下图3-2和图3-3所示。
图3-2 典型疏状天线
(a)E面方向图
(b) H面方向图
图3-3 疏状天线方向图
阵列天线的布局和激励强度分布对方向图、旁瓣等均有较大影响,解析式的方法已经不适用,可以考虑智能搜索算法进行优化,比如遗传算法、模拟退火算法、粒子群优化算法等,这些内容将在后续博文介绍。
直线阵列的馈电分布和方向图仿真的MATLAB代码如下,平面阵列的仿真代码量较大,博文不作分享,如有需要可私信交流。
- % 均匀线阵波束形成
- % 使用不同的激励权重仿真
- clear; clc; close all;
-
- % 构造阵列和信号
- N = 32; % 线阵长度
- array_uni = 0:1:N-1; % 同样孔径下的均匀阵列
- theta = 0; % 目标角度
- d = 0.5; % 阵列均匀间隔d
- A_uni = exp(-1i*2*pi*d*sind(theta).*array_uni.'); % 导向矢量
- x_uni = A_uni; % 无噪声
- % snr = 20; % 信噪比
- % x_uni = awgn(A_uni,snr); % 添加噪声
-
- % 构造不同馈电的分布
- bino_distri = GetBinoDistri(N); % 二项式分布,需要保证N>1
- sigma = 4;
- gauss_distri = GetGaussDistri(N,sigma); % 高斯分布,需要保证N>1
- psll = -20;
- cheb_distri = chebwin(N,-psll)'; % N是阵列单元个数,psll即我们希望的副瓣电平
- cheb_distri = cheb_distri/max(cheb_distri);
- taylor_distri = taylorwin(N,2,psll)';
- taylor_distri = taylor_distri/max(taylor_distri);
-
- figure;
- plot(bino_distri,'o');hold on;
- plot(gauss_distri,'o');hold on;
- plot(cheb_distri,'o');hold on;
- plot(taylor_distri,'o');hold on;
- legend('二项式分布','高斯分布','切比雪夫','泰勒综合');
- title('归一化馈电分布');
-
-
- % 使用dbf扫描
- thetascan = linspace(-90,90,1024);
- a_uni = exp(1i*2*pi*d*sind(thetascan).'*array_uni);
- p_uni = x_uni.'*a_uni.';
- p_uni = 20*log10(abs(p_uni)./max(abs(p_uni)));
- % 实际波束指向角度和理论偏差,这里不太关注
- % [max_value,index] = max(p_uni);
- % theta_est = thetascan(index);
- % est_error = abs(theta_est - theta);
- % 二项式分布
- p_uni_bino = bino_distri.*x_uni.'*a_uni.';
- p_uni_bino = 20*log10(abs(p_uni_bino)./max(abs(p_uni_bino)));
- % 高斯分布
- p_uni_gauss = gauss_distri.*x_uni.'*a_uni.';
- p_uni_gauss = 20*log10(abs(p_uni_gauss)./max(abs(p_uni_gauss)));
- % 高斯分布
- p_uni_cheb = cheb_distri.*x_uni.'*a_uni.';
- p_uni_cheb = 20*log10(abs(p_uni_cheb)./max(abs(p_uni_cheb)));
- % 高斯分布
- p_uni_taylor = taylor_distri.*x_uni.'*a_uni.';
- p_uni_taylor = 20*log10(abs(p_uni_taylor)./max(abs(p_uni_taylor)));
-
- figure;
- plot(thetascan,p_uni);hold on;
- plot(thetascan,p_uni_bino);hold on;
- plot(thetascan,p_uni_gauss);hold on;
- plot(thetascan,p_uni_cheb);hold on;
- plot(thetascan,p_uni_taylor);hold on;
- plot([theta,theta],ylim,'m-.');
- legend('均匀分布','二项式分布','高斯分布','切比雪夫','泰勒综合','波束指向');
- ylim([-60,0]);
- xlabel('theta/°');ylabel('amplitude/dB');
- title('DBF结果');
- % title(['DBF结果 SNR = ' num2str(snr)]);
-
- % 计算二项式分布幅度
- function bino_distri = GetBinoDistri(N)
- bino_distri = zeros(1,N);
- for k = 1:1:N
- bino_distri(k) = factorial(N)/(factorial(k)*factorial(N-k)); % 根据公式计算
- end
- bino_distri = bino_distri/max(bino_distri); % 归一化
- end
-
-
- % 计算二项式分布幅度
- function gauss_distri = GetGaussDistri(N,sigma)
- gauss_distri = zeros(1,N);
- u = (1+N)/2;
- const1 = 1/(sigma*sqrt(2*pi));
- const2 = (2*sigma^2);
- for k = 1:1:N
- gauss_distri(k) = const1*exp(-(k-u)^2/const2); % 根据公式计算
- end
- gauss_distri = gauss_distri/max(gauss_distri); % 归一化
- end