%%
%% 例3.4 
%% 図3.13 MSNアダプティブアンテナの
%% 最急降下アルゴリズムによる出力SINRの変化
%%

% 初期設定
clear all

% 入力パラメータ設定
derad=pi/180;   % deg->rad
twpi=2*pi; 

ndata=500;

kelm=2;                              % 素子数
dspc=0.5;                            % 素子間隔(*λ)
dx=linspace(0,dspc*(kelm-1),kelm);   % 素子位置

theta = [30,  -60]*derad;    % 所望波（第一成分），不要波の到来角
Pw    = [1.0, 1.0];          % 所望波（第一成分），不要波の入力電力
Pn=0.01;                     % 雑音電力
L = length(theta);           % 所望波を含めた到来波数

V=exp(-j*twpi*dx.'*sin(theta));  
% V = [Vs, Vu1, Vu2,...] 所望波，不要波のアレー応答ベクトルから成る行列

rand('state',0)                 
randn('state',0)

for iL=1: L
    pha=rand(1,ndata)*twpi;
    sv(iL,:) = sqrt(Pw(iL))*exp(j*pha);
end

% 入力ベクトルのサンプル値：データ行列 (kelm x ndata)
X=V*sv+sqrt(Pn/2)*(randn(kelm,ndata)+j*randn(kelm,ndata));

theta_d=theta(1);
S=exp(-j*twpi*dx.'*sin(theta_d));  % ステアリングベクトル

W(:,1)=S;   % 初期ウエイト
mu=0.002;                    % ステップサイズ

% 相関行列の理論値
Rss = Pw(1) * V(:,1)*V(:,1)';
Ruu = V(:,2:L)*diag(Pw(2:L))*V(:,2:L)' + Pn*eye(kelm);

% SINRの計算および最急降下法によるウエイト更新
for m=1:ndata
    sinr(m)=W(:,m)'*Rss*W(:,m)/(W(:,m)'*Ruu* W(:,m));
    y(m)=W(:,m)'*X(:,m);  
    W(:,m+1)=W(:,m)+mu*(S-X(:,m)*conj(y(m)));
end

% グラフプロット
plot(1:ndata,10*log10(abs(sinr)))
axis([0 ndata 0 22])
xlabel('イタレーション回数');
ylabel('出力SINR[dB]');
title('MSNアダプティブアレーの最急降下アルゴリズムによる出力SINRの変化')
grid on
hold on


 