天天看點

【波束形成】MMSE波束形成,自适應MMSE波束形成以及自适應MBER波束形成

1.軟體版本

matlab2013b

2.本算法理論知識

【波束形成】MMSE波束形成,自适應MMSE波束形成以及自适應MBER波束形成

3.部分源碼

clc;
clear;
close all;
warning off;

SNR_set      = [0:1:12];
BER          = 1;
nRx          = 10;
nTx          = 10;
frame_length = 1000;
Bers         = [];
%論文table 2
alpha        = [0,10,-15,30,-45,50,60,-55,-35,-60];
for SNR = SNR_set;
    N0          = 1/(10^(SNR/10));
    delta2      = N0;
    error_count = 0;
    bit_count   = 0;
    index       = 0;
    ERR_NUM     = [];
    tmps        = 0;
    while error_count < 50000
        index = index+1;
        for kk=1:nTx
            bits(kk,:)    =  round(rand(1,frame_length));
            %QPSK
            symbols(kk,:) = -2*(pskmod(bits(kk,:),4)-(0.5+sqrt(-1)*0.5));
        end
        %transmit signal
        s        = symbols; 
        u        = reshape(s,nRx,nTx,length(s)/nTx);
        %Channel
        h        = 1/sqrt(2)*[randn(nRx, nTx,length(s)/nTx) + j*randn(nRx,nTx,length(s)/nTx)];
        for ij = 1:nTx
            p(:,ij,:) = h(:,ij,:).*exp(j*alpha(ij)*pi/180);
        end
        %mmse beamforming
        WK = [];
        WK2= [];
        w  = [];
        for i=1:length(s)/nTx
            n        = sqrt(N0/2)*(randn(nTx,nRx)+1j*randn(nTx,nRx));
            XN(:,:,i)= u(:,:,i) + n;
            %定義接收信号
            w(:,:,i) = inv(p(:,:,i)*p(:,:,i)'+2*delta2^2*eye(nRx))*p(:,1,i);
            if i == 1
               WK = w(:,:,i)'*p(:,:,i);
            else
               bk          = bits(1,nTx*(i-2)+1:nTx*(i-1)); 
               bk          = 2*bk-1;
               pn          = 2^delta2;
               yr          = real(yhat(:,:,i-1));
               miu         = 0.0000001;
               WK          = WK + miu*(sign(bk)/(2*sqrt(2*pi)*pn)).*exp(-yr.^2/(2*pn^2))*(XN(:,:,i)); 
            end
            WK          = WK/(max(abs(WK)));
            yhat(:,:,i) = WK*XN(:,:,i);
            R1          = real(yhat(:,:,i))<0;
            I1          = imag(yhat(:,:,i))<0;
            s_hat(:,:,i)= pskdemod(R1+sqrt(-1)*I1,4);
        end
        s_hat1               = squeeze(s_hat);
        recovered_bits       = reshape(s_hat1,1,length(s));
        ERR_NUM              = sum(recovered_bits ~= bits(1,:));
        %異常錯誤不進行統計
        if index <= 200
           tmps  = tmps + ERR_NUM; 
        else
           if ERR_NUM/(tmps/200) < 20
              SNR
              error_count
              error_count    = error_count + ERR_NUM;
              bit_count      = bit_count + frame_length;
           end
        end
    end
    %Calculate the BER
    BER  = error_count/bit_count;
    Bers = [Bers,BER];
end
error_count
bit_count

figure;
semilogy(SNR_set,Bers,'b-o');
axis([0,30,1e-6,1]);
ylabel('BER');
xlabel('SNR');
grid on
% save r4.mat SNR_set Bers
       

4.仿真分析

【波束形成】MMSE波束形成,自适應MMSE波束形成以及自适應MBER波束形成

5.參考文獻

繼續閱讀