二维平面阵列波束赋形原理和Matlab仿真

news/2024/6/16 20:58:42 标签: 人工智能, 自动驾驶, 目标检测, matlab, 物联网

1 波束赋形基本原理

        实现波束赋形的最基本的方法是对各个天线阵元的信号进行适当延迟后相加,使目标方向的信号同相叠加得到增强,而其他方向均有不同程度的削弱,该方法通常用于模拟信号.数字信号可以通过对各个天线阵元的信号乘以复加权系数后相加,如图1

图1 波束赋形基本原理

2 阵列信号模型

        将该天线阵放置于XYZ坐标中,阵面置于YOZ平面上,建立如图2所示的坐标系。阵面左下角天线位于坐标原点,将坐标原点阵元设为参考阵元,计算每个阵元相对于该参考阵元的入射波程差,从而来计算每个阵元接收的回波信号。

图2 天线三维坐标系

        设阵面上第i行第i列阵元Ai的直角坐标为,极坐标为,由于阵面在YOZ平面,所以,两坐标的关系可以表示为:

        

        目标S的直角坐标为,极坐标为,那么两坐标之间的关系可以表示为:

        

        极坐标用直角坐标表示即可得到:

        

        目标S与阵元Ai之间的距离为:

        

        那么,信号从目标S到达阵元Ai与到达阵面坐标原点阵元的波程差和相位差分别为:

        

        由此可得,信号从目标S到达阵面上第m行第n列的阵元与到达坐标原点阵元的波程差和相位差分别为

        

        

        其中λ为波长。

        将上式波程差带入导向矢量的定义式中,即可得第m行第n列阵元的导向矢量为:

        

        设坐标原点出阵元接收到的回波信号为s(t),则第m行第n列阵元接收到的目标回波信号为

        

        那么,平面阵天线系统接收目标回波信号经过模拟波束合成后进入主通道的信号为:

        

        上式即为仿真中所采用的回波信号模型。

3二维阵列波束赋形仿真

       根据上述理论推导可以仿真任意平面阵列的方向图,这里对两种典型的阵列(矩形平面阵列和圆形阵列)进行Matlab仿真,其余类型的阵列在此基础上修改即可。

3.1 矩形平面阵列

       Matlab仿真代码如下。

% 均匀面阵波束形成
clear;clc;close all;
dx = 0.5;                               % x方向阵元间距,这里表示0.5λ
dy = 0.5;                               % y方向阵元间距,这里表示0.5λ
theta0 = -10;                           % 目标俯仰角度,-90~90
phi0 = 10;                              % 目标方位角度,-90~90
alpha_x = 2*pi*sind(phi0)*cosd(theta0);      % x方向相位差
alpha_y = 2*pi*sind(theta0);           % y方向相位差        
M = 20;                                 % x方向阵元数
N = 20;                                 % y方向阵元数                      
X = (0:1:M-1)*dx;                          % x方向阵列排布
Y = (0:1:N-1)*dy;                          % y方向阵列排布
X2=kron(ones(1,N),X);
Y2=kron(Y,ones(1,M));

figure;
plot(X2,Y2,'.');axis equal;grid on;
title('天线阵');xlabel('距离(m)');ylabel('距离(m)');

ax = exp(1i*X*alpha_x);                 % x方向导向矢量
ay = exp(1i*Y*alpha_y);                 % y方向导向矢量
axy = kron(ax,ay);                      % 矩形阵面导向矢量


dtheta = 0.2;
dphi = 0.2;                                 % 扫描角度间隔
theta_scan = -90:dtheta:90;                 % 俯仰扫描角度,-90~90
phi_scan = -90:dphi:90;                     % 方位扫描角度,-90~90
theta_len = length(theta_scan);
phi_len = length(phi_scan);
beam = zeros(theta_len, phi_len);           % 初始化波束
for i = 1:1:theta_len
    for j = 1:1:phi_len
        theta = theta_scan(i);
        phi = phi_scan(j);
        Fx = exp(1i*X*2*pi*sind(theta)*cosd(phi));
        Fy = exp(1i*Y*2*pi*sind(phi));
        Fxy = kron(Fx,Fy); 
        beam(i,j) = abs(((axy.')'*(Fxy.')));
    end
end
beam_db = 20*log10(beam/max(max(beam)));

figure;
mesh(phi_scan, theta_scan, beam_db);
title('矩形面阵方向图');
xlabel('俯仰角');ylabel('方位角');zlabel('幅度(dB)');
axis([-100 100 -100 100 -80 10]);

figure;
imagesc(theta_scan,phi_scan,beam_db);
colorbar;axis tight;shading interp;
xlabel('俯仰角');ylabel('方位角');zlabel('幅度(dB)');
title('矩形面阵方向图俯视');

figure;
plot(theta_scan,beam_db(1+(phi0+90)/0.2,:));           % 对应方位角度切面
xlabel('俯仰角/度');ylabel('幅度/dB');
grid on;hold on;
plot([theta0,theta0],ylim,'m-.');
title('俯仰面方向图');
axis([-100 100 -80 0]);

figure;
plot(phi_scan,beam_db(:,1+(theta0+90)/0.2));           % 对应俯仰角度切面
xlabel('方位角/度');ylabel('幅度/dB');
grid on;hold on;
plot([phi0,phi0],ylim,'m-.');
title('方位面方向图');
axis([-100 100 -80 0]);

        仿真使用20*20平面阵,阵列排布如下。

       根据上述矩形面阵公式做仿真,得到下述的三维空间方向图。

       俯视图如下。

       根据对应方位角的切面得到俯仰面方向图。

        根据对应俯仰角的切面得到方位面方向图。

3.2 圆环阵列

        Matlab仿真代码如下。

% 均匀面阵波束形成
clear;clc;close all;
theta0 = 10;                            % 目标俯仰角度,-90~90
phi0 = 10;                              % 目标方位角度,-90~90
alpha_x = 2*pi*sind(theta0)*cosd(phi0);      % x方向相位差
alpha_y = 2*pi*sind(phi0);                   % y方向相位差        
R = 4;                                 % 半径为4λ
dangle = 10;
angle = 0:dangle:360;                   % 所有角度
X = R*cosd(angle);                          % x方向阵列排布
Y = R*sind(angle);                          % y方向阵列排布

figure;
plot(X,Y,'o');axis equal;grid on;
title('天线阵');xlabel('距离(m)');ylabel('距离(m)');

ax = exp(1i*X*alpha_x);                % x方向导向矢量
ay = exp(1i*Y*alpha_y);                % y方向导向矢量
axy = ax.*ay;               % 矩形阵面导向矢量


dtheta = 0.2;
dphi = 0.2;                                     % 扫描角度间隔
theta_scan = -90:dtheta:90;                     % 俯仰扫描角度,0~90
phi_scan = -90:dphi:90;                         % 方位扫描角度,-90~90
theta_len = length(theta_scan);
phi_len = length(phi_scan);
beam = zeros(theta_len, phi_len);       % 初始化波束
for i = 1:1:theta_len
    for j = 1:1:phi_len
        theta = theta_scan(i);
        phi = phi_scan(j);
        Fx = exp(1i*X*2*pi*sind(theta)*cosd(phi));
        Fy = exp(1i*Y*2*pi*sind(phi));
        Fxy = Fx.*Fy; 
        beam(i,j) = abs(((axy.')'*(Fxy.')));
    end
end
beam_db = 20*log10(beam/max(max(beam)));

figure;
mesh(phi_scan, theta_scan, beam_db);
title('圆形阵列方向图');
xlabel('俯仰角');ylabel('方位角');zlabel('幅度(dB)');
axis([-100 100 -100 100 -80 10]);

figure;
imagesc(theta_scan,phi_scan,beam_db);
colorbar;axis tight;shading interp;
xlabel('俯仰角');ylabel('方位角');zlabel('幅度(dB)');
title('圆形阵列方向图俯视');

figure;
plot(theta_scan,beam_db(1+(phi0+90)/0.2,:));           % 对应方位角度切面
xlabel('俯仰角/度');ylabel('幅度/dB');
grid on;hold on;
plot([theta0,theta0],ylim,'m-.');
title('俯仰面方向图');
axis([-100 100 -50 0]);

figure;
plot(phi_scan,beam_db(:,1+(theta0+90)/0.2));           % 对应俯仰角度切面
xlabel('方位角/度');ylabel('幅度/dB');
grid on;hold on;
plot([phi0,phi0],ylim,'m-.');
title('方位面方向图');
axis([-100 100 -40 0]);

        仿真使用圆形阵列,半径为4λ,间隔10°,阵列排布如下。

        根据上述圆形阵列公式做仿真,得到下述的三维空间方向图。

        俯视图如下。

        根据对应方位角的切面得到俯仰面方向图。

        根据对应俯仰角的切面得到方位面方向图。


http://www.niftyadmin.cn/n/5363877.html

相关文章

C++-模板基础

1. 泛型编程 大家在学习过程中一定写过swap函数吧,那么swap函数的可以写成很多种形式,因为形参的类型可以是任意类型,那么我们如果想用多种swap函数的话,就意味着我们必须写多个swap函数吗?不是的,C为了解…

代码随想录 Leetcode491. 非递减子序列

题目&#xff1a; 代码(首刷看解析 2024年2月3日&#xff09;&#xff1a; class Solution { private:vector<vector<int>> res;vector<int> path; public:void backtracking(vector<int>& nums, int startIndex) {if (path.size() > 1) {res.…

双非本科准备秋招(10.2)—— JVM3:垃圾收集器

垃圾收集器 分为七种&#xff0c;如下&#xff1a; 从功能的角度分为 1、串行&#xff1a;Serial、Serial Old 2、吞吐量优先&#xff1a;Parallel Scavenge、Parallel Old 3、响应时间优先&#xff1a;CMS 吞吐量优先VS响应时间优先 吞吐量运行用户代码时间/(运行用户代码…

GPT原始论文:Improving Language Understanding by Generative Pre-Training论文翻译

1 摘要 自然语理解包括文本蕴含、问题回答、语义相似性评估和文档分类等一系列多样化的任务。尽管大量未标注的文本语料库很丰富&#xff0c;但用于学习这些特定任务的标注数据却很稀缺&#xff0c;这使得基于区分性训练的模型难以充分发挥作用。我们展示了通过在多样化的未标…

C++棋类小游戏2

今天给大家带来我花了1周时间自创的小游戏的升级版&#xff0c;博主还是一名小学生&#xff0c;希望大家提提意见。这是我写的最长的C代码&#xff0c;希望大家喜欢&#xff0c;不要抄袭&#xff0c;任何编译器都可以。 以前版本——C自创棋类小游戏-CSDN博客 C内容提示&…

NDK Could NOT find OpenGL (missing: OPENGL_glx_LIBRARY) Ubuntu

1. update 该命令将安装一堆新包&#xff0c;包括gcc&#xff0c;g 和make。 sudo apt-get update sudo apt-get install -y build-essential2. install OpenGL依赖库 sudo apt-get install freeglut3-dev sudo apt-get install libgl1-mesa-dev sudo apt-get install libxt-…

计算机系统的一些概念

句柄 句柄是windows用来标识应用程序实例使用的对象的唯一整数。 类似C语言中的文件句柄。 句柄的本质是一种指向指针的指针。应用程序启动后&#xff0c;组成这个程序的各对象是驻留在内存的。那是否我们获知了这个内存的首地址&#xff0c;就可以随时用这个地址访问对象呢&…

Amazon Bedrock ——使用Prompt构建AI软文撰写师的生成式人工智能应用程序

Amazon Bedrock 是一项完全托管的服务&#xff0c;通过单个 API 提供来自 AI21 Labs、Anthropic、Cohere、Meta、Stability AI 和 Amazon 等领先人工智能公司的高性能基础模型&#xff08;FM&#xff09;&#xff0c;以及通过安全性、隐私性和负责任的 AI 构建生成式人工智能应…