自适应波束形成(DBF)代码

图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]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值