Halcom 发表于 2017-7-9 15:08:16

51基于布谷鸟算法的导航波束形成问题

基于布谷鸟算法的导航波束形成问题:
百度网盘链接:
链接:http://pan.baidu.com/s/1hsmpdJ2

具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1\

具体的代码如下:% 布谷鸟函数优化分析
% cuckoo_search -- CS算法
%% 清空环境
clc          % 清屏
clear all;   % 删除workplace变量
close all;   % 关掉显示图形窗口
warning off; % 消除警告
tic
%% 参数初始化
maxiter = 20;    % 迭代次数
sizepop = 20;    % 种群规模
pa=0.25;         % 发现新巢的概率Discovery rate of alien eggs/solutions
%      M   Kphi
popmin = ;   % x 最小值
popmax = ;% x 最大值
nvar = 8;% 未知量个数

% 导航-波束形成问题
theta_signal=50;    % 俯仰角
phi_signal=200;   % 方位角

% 产生初始粒子
for i=1:sizepop
    nest(i,:)= popmin+(popmax-popmin).*rand(size(popmin)) ;
    fitness(i)= fun( , theta_signal,phi_signal );% 适应度函数值--目标函数值--求解全局的极大值
end
% 找当前最好的个体
=max(fitness);
bestnest=nest(bestindex,:);   % 全局最佳
%% 寻优
for i=1:maxiter
    disp(['Iteration ' num2str(i)]);
    % 粒子位置更新
    new_nest=get_cuckoos(nest,bestnest,popmin,popmax); % Levy flights 粒子位置更新
    % 比较更新
    =get_best_nest(nest,new_nest,fitness, theta_signal,phi_signal);
    % 发现新巢、随机粒子的位置
    new_nest=empty_nests(nest,popmin,popmax,pa) ;
    % 继续评估新巢的适应度值
    =get_best_nest(nest,new_nest,fitness, theta_signal,phi_signal);
    % 寻找全局最优解
    if fnew>fmax,
      fmax=fnew;
      bestnest=best;
    end
   
    CS_yy(i)=fmax;   % 保存极大值
end% 结束迭代循环
CS_fitness_iter = CS_yy;
time = toc
save CS_fitness_iter.mat
%% 结果分析
plot(CS_yy,'bo-','Linewidth',2)
title(['适应度曲线' '终止代数=' num2str(maxiter)]);
grid on
xlabel('进化代数');ylabel('适应度');
% 结果输出
disp('最优解')
zbest_result = fix( [ bestnest(1),bestnest(2)*50000, bestnest(3:nvar)] );
disp(zbest_result)   % 最佳个体值
fprintf('\n')

%% 结果
tic
= fun(zbest_result, theta_signal, phi_signal);
time1 = toc
figure,
plot(0:359, F(:,50)); grid on   %截面图:
xlabel('方位角');
ylabel('增益(dB)');
title('俯仰角50度时截面')寻找新的解:
function new_nest=empty_nests(nest,Lb,Ub,pa)
% A fraction of worse nests are discovered with a probability pa
n=size(nest,1);
% Discovered or not -- a status vector
K=rand(size(nest))>pa;
%% New solution by biased/selective random walks
stepsize=rand*(nest(randperm(n),:)-nest(randperm(n),:));
new_nest= nest+stepsize.*K;
for j=1:size(new_nest,1)

    for k=1:length(nest(j,:))
       if new_nest(j,k)>Ub(k)
         new_nest(j,k)=Ub(k);
       end
       if new_nest(j,k)<Lb(k)
         new_nest(j,k)=Lb(k);
       end
    end

end寻找当前最优的解:
function =get_best_nest(nest,newnest,fitness, theta_signal,phi_signal)
% Evaluating all new solutions
for j=1:size(nest,1),
%   fnew=Ackley_Fun(newnest(j,:));% 适应度值
    fnew= fun( , theta_signal,phi_signal );% 适应度函数值--目标函数值--求解全局的极大值
   
    if fnew>=fitness(j),
       fitness(j)=fnew;
       nest(j,:)=newnest(j,:);
    end
end
% Find the current best
=max(fitness) ;
best=nest(K,:);位置更新:
% 位置更新
function nest=get_cuckoos(nest,best,Lb,Ub)
% Levy flights
n=size(nest,1);
% Levy exponent and coefficient
beta=3/2;
sigma=(gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);

for j=1:n,
    s=nest(j,:);
    % implementing Levy flights
    % For standard random walks, use step=1;
    %% Levy flights by Mantegna's algorithm
    u=randn(size(s))*sigma;
    v=randn(size(s));
    step=u./abs(v).^(1/beta);
    stepsize=0.01*step.*(s-best);
    nest(j,:) = s+stepsize.*randn(size(s));
   % Apply simple bounds/limits
   for k=1:length(nest(j,:))
       if nest(j,k)>Ub(k)
         nest(j,k)=Ub(k);
       end
       if nest(j,k)<Lb(k)
         nest(j,k)=Lb(k);
       end
   end
   
end


适应度函数:
function = fun(x, theta_signal, phi_signal)
% 输入:
%      theta_signal=50;    % 俯仰角
%      phi_signal=200;   % 方位角
%      x:
%         N=7;      % 阵元数目
%         M=6;      % 延迟数目
%         K=5000;   % 快拍数
% 输出:
%   fitness:适应度值,主瓣-旁瓣的差值最大
%      F:输出的beampattern

% x=fix(x); % 取整
N = 7;                   % 阵元数目
M = fix(x(1));                   % 延迟数目
K = fix(x(2));                   % 快拍数
m=';               

c=3*10^8;                   % 光速
f0=1.26852*10^9;            % 信号中心频率
fs=5*10^9;                  % 采样频率
Ts=1/fs;                  % 单位时延
t = 0:Ts:(K*Ts-Ts);   
wl=c/f0;                  % 信号波长
r=wl/2;                     % 圆阵半径
% phi1=;% 圆周上阵元角度位置 6围1圆阵
% phi1 = 0:360/(N-1):360-360/(N-1);
phi1 = fix( x(3:end) );
P=]; % 位置

% theta_signal=50;    % 俯仰角
% phi_signal=200;   % 方位角

theta_inter=40;   % 干扰1
phi_inter=50;

theta_inter2=60;    % 干扰2
phi_inter2=250;

theta_inter3=50;    % 干扰3
phi_inter3=60;

theta_inter4=30;    % 干扰4
phi_inter4=120;

theta_inter5=30;    % 干扰5
phi_inter5=80;

waven_signal=;% 信号波数(wavenumber)

waven_inter=;
waven_inter2=;
waven_inter3=;
waven_inter4=;
waven_inter5=;

snr1=-20;                   % 信噪比

inr1=30;                  % 干噪比
inr2=30;                  
inr3=30;
inr4=30;
inr5=30;

s_a0=exp(j*2*pi/wl*(waven_signal*P)');    % 期望信号1
s_a1=exp(j*2*pi/wl*(waven_inter*P)');   % 干扰1
s_a2=exp(j*2*pi/wl*(waven_inter2*P)');    % 干扰2
s_a4=exp(j*2*pi/wl*(waven_inter3*P)');
s_a5=exp(j*2*pi/wl*(waven_inter4*P)');
s_a6=exp(j*2*pi/wl*(waven_inter5*P)');

t_a=exp(j*2*pi*f0*Ts*m);                        

steer_signal=kron(t_a,s_a0);         % Kronecker积,期望及干扰导向矢量

steer_jamming1=kron(t_a,s_a1);
steer_jamming2=kron(t_a,s_a2);
steer_jamming3=kron(t_a,s_a4);
steer_jamming4=kron(t_a,s_a5);
steer_jamming5=kron(t_a,s_a6);

C=;      % 构造线性约束C'W=G
g=; % 两个目标的无失真约束

amp_signal=sqrt(2*10^(snr1/10))*cos(2*pi*f0*t+randn);   % 信号加上个随机相位

%白噪声干扰,同时也属于宽带干扰
amp_jamming1=sqrt(10^(inr1/10))*randn(1,K);            
amp_jamming2=sqrt(10^(inr2/10))*randn(1,K);
amp_jamming3=sqrt(10^(inr3/10))*randn(1,K);
amp_jamming4=sqrt(10^(inr4/10))*randn(1,K);         
amp_jamming5=sqrt(10^(inr5/10))*randn(1,K);
%amp_jamming1=sqrt(10^(inr1/10))*wgn(1,K,0,'complex');
%amp_jamming2=sqrt(10^(inr2/10))*wgn(1,K,0,'complex');
%amp_jamming3=sqrt(10^(inr3/10))*wgn(1,K,0,'complex');
%amp_jamming4=sqrt(10^(inr4/10))*wgn(1,K,0,'complex');
%amp_jamming5=sqrt(10^(inr5/10))*wgn(1,K,0,'complex');

% 单音干扰
%amp_jamming1= sqrt(2*10^(inr1/10))*sin(2*pi*f0*t+randn);
%amp_jamming2= sqrt(2*10^(inr2/10))*sin(2*pi*f0*t+randn);
%amp_jamming3= sqrt(2*10^(inr3/10))*sin(2*pi*f0*t+randn);
%amp_jamming4= sqrt(2*10^(inr4/10))*sin(2*pi*f0*t+randn);
%amp_jamming5= sqrt(2*10^(inr5/10))*sin(2*pi*f0*t+randn);

noise=(randn(N*M,K));

jam=steer_jamming1*amp_jamming1+steer_jamming2*amp_jamming2+steer_jamming3*amp_jamming3...
   +steer_jamming4*amp_jamming4+steer_jamming5*amp_jamming5;
%jam=steer_jamming2*amp_jamming2;
SS=steer_signal*amp_signal;
X=SS+jam+noise;                           % 接收信号(信号+干扰+噪声)

OO=jam+noise;
Rs = 1/K*SS*SS';
Rni=1/K*OO*OO';
Rn=1/K*noise*noise';
Ri=1/K*jam*jam';
Rr=Rn+Ri;
Rx = 1/K*X*X';
invR=inv(Rx);

W_LCMV=g'*inv(C'*invR*C)*C'*invR;

theta=(0:1:89)*pi/180;         
phi =(0:1:359)*pi/180;
beam = zeros(360, 90);
for ii=1:length(phi)
    tempphi=phi(ii);
    waven_sweep=[(sin(theta).*cos(tempphi))', (sin(theta)*sin(tempphi))'];
    svsweep=exp(j*2*pi/wl*(waven_sweep*P)');
    steer = kron(t_a, svsweep);
    beam(ii,:)=W_LCMV*steer;
end
   
F=20*log10(abs(beam)/max((max(abs(beam)))));    % beampattern

% ref_point = 200;% 该坐标位置值越大越好
% fitness1 = fun_F(F, 70, ref_point);
% fitness2 = fun_F(F, 60, ref_point);
% fitness3 = fun_F(F, 50, ref_point);
% fitness4 = fun_F(F, 40, ref_point);
% fitness5 = fun_F(F, 30, ref_point);
% fitness = fitness1 + fitness2 + fitness3 + fitness4 + fitness5;

ref_point = phi_signal;% 该坐标位置值越大越好
fitness = fun_F(F, theta_signal, ref_point);

clear invR jam C c beam amp_jamming1 amp_jamming2 amp_jamming3 amp_jamming4 amp_jamming5 SS
clear steer_jamming1 steer_jamming2 steer_jamming3 steer_jamming4 steer_jamming5funF极值求解函数:**** Hidden Message *****





参考文献:【1】Symmetric Linear Antenna Array Geometry Synthe
【2】THINNING OF PLANAR CIRCULAR ARRAY ANTENNAS USING FIREFLY ALGORITHM

wal1985 发表于 2017-7-22 20:48:29

太牛了,会这么多算法

mzch 发表于 2017-9-18 16:39:11

非常好的代码,谢谢

huwenping 发表于 2017-10-29 23:13:49

基于布谷鸟算法的导航波束形成问题

德帝 发表于 2017-11-28 16:58:22

太棒了,我正找这个

fangh1993 发表于 2017-12-1 11:36:24

学习了,谢谢楼主分享~

短离别 发表于 2017-12-7 15:36:06

基于布谷鸟算法的导航波束形成问题,万分感谢

dlutww 发表于 2017-12-21 10:23:03


学习了,谢谢楼主分享~

zhangsen1264 发表于 2017-12-25 14:47:56

感谢 研究研究 !!

木子900 发表于 2018-1-5 10:43:22

谢谢分享,学习一下!
页: [1] 2 3 4
查看完整版本: 51基于布谷鸟算法的导航波束形成问题