对于y=H*x+n,在x,y已知、n为随机噪声的情况下,运用粒子群算法估计出H
w=0.9;r1=1.4;r2=1.4; %设置粒子群参数
H=randn(100,100)+i*randn(100,100); %生成信道矩阵
n=randn(100,1)+i*randn(100,1); %生成噪声
x=zeros(100,1);
for i=1:49
x(2*i+1,1)=complex(i,-i); %生成输入数据x
end
y=H*x+n; %接收数据y
H_hat=randn(100,100,10)+i*randn(100,100,10); %生成粒子的位置
H_pbest=zeros(100,100,10)+i*zeros(100,100,10); %初始化个体最优值
H_gbest=zeros(100,100)+i*zeros(100,100); %初始化全局最优值
V_hat=randn(100,100,10)+i*randn(100,100,10); %生成例子速度
min=zeros(10);
for k=1:30 %迭代次数
for i=1:10
min1=1000;min(i)=1000;
for j=1:10
if(fun(y,H_hat(:,:,j),x,n)<min1) H_gbest=H_hat(:,:,j);min1=fun(y,H_hat(:,:,j),x,n);%找出gbest
end
end
if(fun(y,H_hat(:,:,i),x,n)<min(i)) H_pbest(:,:,i)=H_hat(:,:,j);min(i)=fun(y,H_hat(:,:,i),x,n);%找出pbest
end
V_hat(:,:,i)=w*V_hat(:,:,i)+r1*randn()*(H_pbest(:,:,i)-H_hat(:,:,i))+r2*randn()*(H_gbest-H_hat(:,:,i));%更新速度
H_hat(:,:,i)=H_hat(:,:,i)+V_hat(:,:,i);%更新位置
end
end
H_HAT=zeros(100,100)+i*zeros(100,100); %初始化最佳估计值
minvalue=1000;
for i=1:10
if(fun(y,H_hat(:,:,i),x,n)<minvalue)H_HAT=H_hat(:,:,i);minvalue=fun(y,H_hat(:,:,i),x,x);
end
end
function [out] = fun(y,h,x,n)
% 矩阵的2-范数,即目标函数
out=norm(h*x+n-y);
end
得到的估计矩阵为全0矩阵,求问为何会出现这种错误结果