從前文《相控陣天線波束寬度分析》我們知道相控陣天線的波束寬度是與口徑和掃描角度相關(guān)的函數(shù)。如果我們要達(dá)到很高的分辨率,就需要波束寬度很窄,此時(shí)天線的口徑就需要很大。相控陣天線的間距一般為半波長(zhǎng),此時(shí)需要的天線數(shù)量以及后端的TR組件數(shù)量會(huì)增加很多,極大地增加了天線的生產(chǎn)成本。解決相控陣天線成本居高不下的方法之一就是采用稀疏陣列。
稀疏陣列是從均勻間隔滿陣中稀疏掉部分陣元,這樣就形成了陣元間距約束為某個(gè)基本量(通常為半倍波長(zhǎng))的整數(shù)倍的非均勻陣列;稀疏陣列在不改變陣列孔徑的條件下,即保持陣列高分辨率的前提下,減少陣元數(shù)量并優(yōu)化各陣元的物理布局,產(chǎn)生滿足期望性能的波束方向圖,大幅度降低了成本。由于這樣設(shè)計(jì)的稀疏陣列的大部分陣元間距大于半波長(zhǎng),因此硬件布局布線的冗余度更高,簡(jiǎn)化了天線結(jié)構(gòu)和饋電網(wǎng)絡(luò),降低了散熱難度,同時(shí)其陣元間的互耦效應(yīng)與均勻陣列相比更弱,在實(shí)際環(huán)境中具備更好的性能。
對(duì)于一個(gè)均勻平面陣列,如果我們用fmn表示其每個(gè)單元的工作狀態(tài),那么我們就可以得到三種狀態(tài),fmn全為1,此時(shí)為滿陣,也就是均勻平面陣;fmn全為0,此時(shí)沒(méi)有一個(gè)單元工作;fmn部分為0,部分為1,此時(shí)便為稀疏陣列。因此我們引入加權(quán)因子fmn,給均勻平面陣列的陣因子進(jìn)行加權(quán),即可得到稀疏平面陣列。加權(quán)陣因子如下表示:
因陣元間距是離散分布且大于等于半波長(zhǎng),稀疏陣列所綜合出來(lái)的掃描波束方向圖中可能存在與主瓣齊平的柵瓣、或較高電平的副瓣,導(dǎo)致方向圖中在無(wú)回波的方位出現(xiàn)虛假目標(biāo)。實(shí)際工程應(yīng)用對(duì)天線的分辨力要求很高,因而主瓣寬度要盡量窄,同時(shí)盡可能降低峰值旁瓣電平。所以我們采用最大旁瓣電平作為適應(yīng)度函數(shù),當(dāng)最大旁瓣電平MSLL最小時(shí)優(yōu)化結(jié)束。
遺傳算法是一種全局性的概率搜索算法,該算法直接對(duì)問(wèn)題進(jìn)行操作,不需要復(fù)雜的計(jì)算公式,在搜索過(guò)程中可不斷積累經(jīng)驗(yàn)和知識(shí),不需要借助于外界信息,只需要依靠自身產(chǎn)生的搜索空間的知識(shí),便可找到最優(yōu)解。標(biāo)準(zhǔn)的遺傳算法是依據(jù)適應(yīng)度對(duì)種群進(jìn)行選擇、交叉及變異操作,直到達(dá)到最大的進(jìn)化代數(shù)。所以我們可以以下流程來(lái)進(jìn)行操作:
第一步,確定適應(yīng)度,并編制適應(yīng)度函數(shù)。本例以最大旁瓣電平為適應(yīng)度函數(shù)。
第二步,確定進(jìn)化代數(shù),進(jìn)化代數(shù)一般選擇100-1000,并生成一定的種群,種群數(shù)量一般選擇10-200。本例中使用randn()函數(shù)生成符合正態(tài)分布的。令其中NL(稀疏完剩余的單元個(gè)數(shù))個(gè)單元為1,其余單元為0。
第三步,對(duì)種群中的每個(gè)個(gè)體計(jì)算適應(yīng)度,并保留最優(yōu)的適應(yīng)度個(gè)體。
第四步,進(jìn)行選擇操作,也可稱為復(fù)制操作,即將滿足適應(yīng)度累積概率的個(gè)體原封不動(dòng)的復(fù)制到下一代中,采用輪盤賭的選擇操作,利用各個(gè)個(gè)體適應(yīng)度所占比例的大小來(lái)決定其子代保留的可能性。若某個(gè)個(gè)體i的適應(yīng)度為fiti,種群大小為Np,則它被選取的概率表示為:
個(gè)體適應(yīng)度越大,則其被選擇的機(jī)會(huì)也越大;反之亦然。為了選擇交叉的個(gè)體,需要進(jìn)行多輪選擇。每一輪產(chǎn)生一個(gè)(0,1)內(nèi)的均勻隨機(jī)數(shù),將該隨機(jī)數(shù)作為選擇指針來(lái)確定被選個(gè)體。本例中生成一個(gè)種群數(shù)量大小的介于(0,1)之間的隨機(jī)數(shù),不含0和1。與歸一化適應(yīng)度的累積概率進(jìn)行對(duì)比,選出累積概率大的個(gè)體。
第五步,進(jìn)行交叉操作,交叉概率一般選擇0.25-1。將選中的偶數(shù)個(gè)體和與奇數(shù)個(gè)體進(jìn)行以交叉概率進(jìn)行交叉,形成新的個(gè)體。
第六步,進(jìn)行變異操作,變異概率一般選擇0.001-0.1。將符合變異概率的基因值取反,即被選中的基因值為1,則其值變?yōu)?;若被選中的基因值為0,則其值變?yōu)?。
第七步,確保稀疏率不變,即稀疏后的實(shí)際單元個(gè)數(shù)不變。若實(shí)際單元個(gè)數(shù)變小,從0狀態(tài)單元中隨機(jī)選擇,強(qiáng)制其為1狀態(tài);若實(shí)際單元個(gè)數(shù)變多,則從1狀態(tài)的單元中隨機(jī)選擇,強(qiáng)制其為0狀態(tài)。
第八步,將得到的最優(yōu)個(gè)體加權(quán)到陣因子上,得到稀疏后的陣因子。
3 MATLAB代碼
%%%%%%%%%%%%%遺傳算法稀疏平面陣%%%%%%%%%%%
%%%%%%%%%%%%%%%初始化參數(shù)%%%%%%%%%%%%%%%
clear; %清變量
close all; %清圖
clc; %清屏
NP = 50; %種群數(shù)量
Pc = 0.8; %交叉率
Pm = 0.01; %變異率
d = 0.5; %滿陣陣元間距,半倍波長(zhǎng)
lamda = 1; %波長(zhǎng)
G = 200; %最大遺傳代數(shù)
Ny = 20; %方位滿陣陣元個(gè)數(shù)
Nz = 10; %俯仰滿陣陣元個(gè)數(shù)
L = Ny*Nz; %滿陣陣元個(gè)數(shù)
NL = 100; %實(shí)際陣元個(gè)數(shù)
theta0 = 0*pi/180; %俯仰指向
phi0 = 0*pi/180; %方位指向
NA = 360; %空間方位角采樣數(shù)
NE = 360; %空間俯仰角采樣數(shù)
%%%%%%%%%%%%%生成初始種群%%%%%%%%%%%%%%
%%%%%%%%%%%0為沒(méi)有陣元,1為有陣元%%%%%%
f = randn(L,NP);
[sortff,Index] = sort(f);
f = zeros(L,NP);
for i = 1:NP
f(Index(end-NL+1:end,i),i) = 1;
end
%%%%%%%%%%遺傳算法循環(huán)%%%%%%%%%%%%%%
for k = 1:G
k
%%%%計(jì)算適應(yīng)度,即峰值旁瓣%%%%%
for i = 1:NP
Fit(i) = func_plane(lamda,Ny,Nz,d,theta0,phi0,NA,NE,f(:,i));
end
maxFit = max(Fit); %最大值
minFit = min(Fit); %最小值
rr = find(Fit==maxFit); %找出最大值
fBest = f(:,rr(1,1)); %歷代最優(yōu)個(gè)體
Fit = (Fit-minFit)/(maxFit-minFit); %歸一化適應(yīng)度值
%%%%%%%基于輪盤賭的復(fù)制操作%%%%%%%%
sum_Fit = sum(Fit);
fitvalue = Fit./sum_Fit;
fitvalue = cumsum(fitvalue);
ms = sort(rand(NP,1));
fiti = 1;
newi = 1;
while newi<=NP
if (ms(newi))<fitvalue(fiti)
nf(:,newi) = f(:,fiti);
newi = newi+1;
else
fiti = fiti+1;
end
end
%%%%%%%%%基于概率的交叉操作%%%%%%%%%%
for i = 1:2:NP
p = rand(1,1);
if p<Pc
q = randi([0,1],1,L);
for j = 1:L
if q(j)==1
temp = nf(j,i+1);
nf(j,i+1) = nf(j,i);
nf(j,i) = temp;
end
end
end
end
%%%%%%%基于概率的變異操作%%%%%%%%%
for m = 1:NP
for n = 1:L
r = rand(1,1);
if r < Pm
nf(n,m) = ~nf(n,m);
end
end
end
%%%%使交叉變異后的 實(shí)際陣元個(gè)數(shù)不變%%%%%
for i = 1:NP
n_ones = sum(nf(:,i));
while n_ones>(NL)
nn1 = find(nf(:,i)==1);
MUT1 = randi([1,n_ones],1,n_ones-NL);
for m = 1:(n_ones-NL)
nf(nn1(MUT1(m)),i) = 0;
end
n_ones = sum(nf(:,i));
end
while n_ones<(NL)
nn2 = find(nf(:,i)==0);
MUT2 = randi([1,L-n_ones],1,NL-n_ones);
for m = 1:(NL-n_ones)
nf(nn2(MUT2(m)),i) = 1;
end
n_ones = sum(nf(:,i));
end
end
f = nf;
f(:,1) = fBest; %保留最優(yōu)個(gè)體在新種群中
trace(k) = maxFit; %歷代最優(yōu)適應(yīng)度
end
figure
plot(trace)
xlabel('迭代次數(shù)')
ylabel('目標(biāo)函數(shù)值')
title('適應(yīng)度進(jìn)化曲線')
grid on
save fBest.mat fBest %存儲(chǔ)優(yōu)化結(jié)果
適應(yīng)度函數(shù)代碼如下:
%%%%%%%%%%%%%%%%計(jì)算最大旁瓣%%%%%%%%%%%%%%%
function MSLL=func_plane(lamda,Ny,Nz,d,theta0,phi0,NA,NE,f0)
eps = 0.0001;
bottom = -50;
f = reshape(f0,Ny,Nz);
phi = linspace(-pi/2,pi/2,NA);
theta = linspace(-pi/2,pi/2,NE);
aa = [0:d:(Ny-1)*d];
DD1 = repmat(aa',1,Nz);
bb = [0:d:(Nz-1)*d];
DD2 = repmat(bb,Ny,1);
DD = DD1+sqrt(-1).*DD2;
for ii = 1:length(theta);%%%%%%%%%%%%%%%%計(jì)算最大旁瓣%%%%%%%%%%%%%%%
function MSLL=func_plane(lamda,Ny,Nz,d,theta0,phi0,NA,NE,f0)
eps = 0.0001;
bottom = -50;
f = reshape(f0,Ny,Nz);
phi = linspace(-pi/2,pi/2,NA);
theta = linspace(-pi/2,pi/2,NE);
aa = [0:d:(Ny-1)*d];
DD1 = repmat(aa',1,Nz);
bb = [0:d:(Nz-1)*d];
DD2 = repmat(bb,Ny,1);
DD = DD1+sqrt(-1).*DD2;
for ii = 1:length(theta);
pattern(ii) = sum(sum((exp(sqrt(-1)*2*pi/lamda*(sin(phi0)...
* cos(theta(ii))*real(DD)+sin(theta(ii))*imag(DD)...
-sin(phi0)*cos(theta0)*real(DD)-sin(theta0)*imag(DD)))).*f));
end
max_p = max(abs(pattern));
FdB1 = 20*log10(abs(pattern)/max_p+eps);
mm = ceil(find(FdB1==max(FdB1)));
tu_up = 0;
while (FdB1(mm+tu_up)>=FdB1(mm+tu_up+1))
tu_up = tu_up+1;
end
tu_down = 0;
while (FdB1(mm-tu_down)>=FdB1(mm-tu_down-1))
tu_down = tu_down+1;
end
FdB1(mm-tu_down:mm+tu_up) = bottom;
sll_1 = max(FdB1);
for jj = 1:length(phi);
pattern(jj) = sum(sum((exp(sqrt(-1)*2*pi/lamda*(sin(phi(jj))...
* cos(theta0)*real(DD)+sin(theta0)*imag(DD)...
-sin(phi0)*cos(theta0)*real(DD)-sin(theta0)*imag(DD)))).*f));
end
max_p = max(abs(pattern));
FdB2 = 20*log10(abs(pattern)/max_p+eps);
nn = find(FdB2==max(FdB2));
tv_up = 0;
while (FdB2(nn+tv_up)>=FdB2(nn+tv_up+1))
tv_up = tv_up+1;
end
tv_down = 0;
while (FdB2(nn-tv_down)>=FdB2(nn-tv_down-1))
tv_down = tv_down+1;
end
FdB2(nn-tv_down:nn+tv_up) = bottom;
sll_2 = max(FdB2);
MSLL = abs(sll_1)+abs(sll_2);
end
pattern(ii) = sum(sum((exp(sqrt(-1)*2*pi/lamda*(sin(phi0)...
* cos(theta(ii))*real(DD)+sin(theta(ii))*imag(DD)...
-sin(phi0)*cos(theta0)*real(DD)-sin(theta0)*imag(DD)))).*f));
end
max_p = max(abs(pattern));
FdB1 = 20*log10(abs(pattern)/max_p+eps);
mm = ceil(find(FdB1==max(FdB1)));
tu_up = 0;
while (FdB1(mm+tu_up)>=FdB1(mm+tu_up+1))
tu_up = tu_up+1;
end
tu_down = 0;
while (FdB1(mm-tu_down)>=FdB1(mm-tu_down-1))
tu_down = tu_down+1;
end
FdB1(mm-tu_down:mm+tu_up) = bottom;
sll_1 = max(FdB1);
for jj = 1:length(phi);
pattern(jj) = sum(sum((exp(sqrt(-1)*2*pi/lamda*(sin(phi(jj))...
* cos(theta0)*real(DD)+sin(theta0)*imag(DD)...
-sin(phi0)*cos(theta0)*real(DD)-sin(theta0)*imag(DD)))).*f));
end
max_p = max(abs(pattern));
FdB2 = 20*log10(abs(pattern)/max_p+eps);
nn = find(FdB2==max(FdB2));
tv_up = 0;
while (FdB2(nn+tv_up)>=FdB2(nn+tv_up+1))
tv_up = tv_up+1;
end
tv_down = 0;
while (FdB2(nn-tv_down)>=FdB2(nn-tv_down-1))
tv_down = tv_down+1;
end
FdB2(nn-tv_down:nn+tv_up) = bottom;
sll_2 = max(FdB2);
MSLL = abs(sll_1)+abs(sll_2);
end
優(yōu)化后方向圖代碼如下:
%%%%%%%%%%%%優(yōu)化后方向圖%%%%%%%%%%%%%
clc;close all;clear all
load('fBest.mat')
d = 0.5;
lamda = 1;
Ny = 20;
Nz = 10;
theta0 = 0*pi/180;
phi0 = 0*pi/180;
NA = 360;
NE = 360;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
phi = linspace(-pi/2,pi/2,NA);
theta = linspace(-pi/2,pi/2,NE);
aa = [0:d:(Ny-1)*d];
DD1 = repmat(aa',1,Nz);
bb = [0:d:(Nz-1)*d];
DD2 = repmat(bb,Ny,1);
DD = DD1+sqrt(-1).*DD2;
f = reshape(fBest,Ny,Nz);
for jj = 1:length(phi);
for ii = 1:length(theta);
pattern(jj,ii) = sum(sum(exp(sqrt(-1)*2*pi/lamda*(sin(phi(jj))...
* cos(theta(ii))*real(DD)+sin(theta(ii))*imag(DD)...
-sin(phi0)*cos(theta0)*real(DD)-sin(theta0)*imag(DD))).*f));
end
end
max_p = max(max(abs(pattern)));
pattern_dbw = 20*log10(abs(pattern)/max_p+eps);
figure;
mesh(theta*180/pi,phi*180/pi,pattern_dbw);
xlabel('俯仰角');
ylabel('方位角')
figure %方位向切面圖
temp1 = pattern_dbw(:,round(NE*((pi/2+theta0)/pi)));
plot(phi*180/pi,temp1)
grid
xlabel('\phi方位角(度)')
ylabel('陣列增益(dB)')
figure %俯仰向切面圖
temp2 = pattern_dbw(round(NA*((pi/2+phi0)/pi)),:);
plot(theta*180/pi,temp2)
grid
xlabel('\theta俯仰角(度)')
ylabel('陣列增益(dB)')
figure
for ii = 1:Nz
plot(f(:,ii)*ii,'o'),hold on
end
xlabel('方位向')
ylabel('俯仰向')
axis([1,Ny,1,Nz])
運(yùn)行代碼后得到優(yōu)化后三維方向圖如下:
方位面方向圖如下:
俯仰面方向圖如下:
聯(lián)系客服