图1 数字波束仿真(一维)
图2 数字波束仿真(二维)
clear all;
close all;clc;
%%%%%%%%%%%%%%%%%一维DBF%%%%%%%%%%%%%%%%%
Num_zy=10; % 阵元个数
lamd=0.3; % 信号波长(单位:米)
d=lamd/2; % 阵元间距(通常取半波长)
alfa0=(-60:60)*pi/180; % 波达方向范围(-60°到60°),转换为弧度
NFFT=Num_zy; % FFT点数(等于阵元数)
Window=chebwin(Num_zy,40); % 生成切比雪夫窗(40dB副瓣抑制)
St=zeros(Num_zy,length(alfa0)); % 初始化空时矩阵
d_pha=pi/Num_zy; % 相位增量
% 生成阵列空域导向矢量(考虑相位增量)
S=exp(j*2*pi*(0:Num_zy-1)'*(d*sin(alfa0)/lamd-d_pha/pi/2));%阵列空域导向矢量
for ii=1:length(alfa0)
St(:,ii)=Window.*S(:,ii); % 对每个方向的导向矢量加窗
end
St_fft=fftshift(fft(St,NFFT,1),1); % 对空时矩阵做FFT并调整频谱顺序
figure
for jj=1:Num_zy
Bn=abs(St_fft(jj,:))/max(abs(St_fft(jj,:))); % 归一化幅度
plot(alfa0*180/pi,20*log10(Bn),'LineWidth',2);hold on; % 绘制波束图(dB刻度)
end
xlabel('方位/度');
ylabel('幅度/dB');
title('一维数字波束形成');
axis([min(alfa0)*180/pi,max(alfa0)*180/pi,-50 0]);%%%%%%%%%%%%%%%%二维DBF%%%%%%%%%%%%%%%%%
M=12; % 阵元行数
N=6; % 阵元列数
lamd=0.1; % 波长
d=lamd/2; % 阵元间距
theta=(-80:80)*pi/180; % 方位角范围
fai=(-80:80)*pi/180; % 俯仰角范围
NFFT1=M; % 行方向FFT点数
NFFT2=N; % 列方向FFT点数
W1=chebwin(M,30); % 行方向切比雪夫窗
W2=chebwin(N,30); % 列方向切比雪夫窗
Window=W1*W2.'; % 生成二维窗函数
[alfa0,fai0]=meshgrid(theta,fai); % 生成方位-俯仰网格
St_fft=zeros(length(theta),length(fai)); % 初始化波束矩阵
figure
for xx=1:M % 遍历所有行波束
for yy=1:N % 遍历所有列波束
for ii=1:length(theta)
for jj=1:length(fai)
% 生成二维导向矢量
S=exp(j*2*pi*(0:M-1)'*d*sin(theta(ii))/lamd)*...
exp(j*2*pi*(0:N-1)*d*sin(fai(jj))/lamd);
St=S.*Window; % 加窗处理
Btemp=fftshift(fft2(St,M,N)); % 二维FFT
St_fft(ii,jj)=Btemp(xx,yy); % 提取特定波束的输出
end
end
St_fft=20*log10(abs(St_fft)/max(max(abs(St_fft)))); % 转换为dB刻度并归一化
% 设置动态范围下限(-40dB)
for ii=1:length(theta)
for jj=1:length(fai)
if St_fft(ii,jj)<-40
St_fft(ii,jj)=-40;
end
end
end
mesh(alfa0*180/pi,fai0*180/pi,St_fft); % 三维绘图
hold on;
end
end
xlabel('方位角/度');
ylabel('俯仰角/度');
zlabel('幅度/dB');
title('二维数字波束形成');
axis([min(theta)*180/pi max(theta)*180/pi min(fai)*180/pi max(fai)*180/pi -40 0]);