自适应MSER波束形成辅助接收机的MATLAB仿真

Posted fpga和matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自适应MSER波束形成辅助接收机的MATLAB仿真相关的知识,希望对你有一定的参考价值。

目录

一、理论基础

二、MATLAB程序

三、仿真结论


一、理论基础

       运用波束形成技术,利用麦克风阵列估计指定方向上的混有噪声和干扰的期望信号。这些麦克风阵元位于不同的空间位置,对声波进行空间采样,然后对采样信号进行处理以衰减干扰信号并提取期望信号。这样就得到一个特定的阵列空间响应,其主瓣指向期望信号而对干扰进行陷波。

       自适应波束形成能够分离在相同载波频率上传输的用户信号,因此提供了在空分多址场景中支持多用户的实用手段。此外,为了进一步提高可实现的带宽效率,高吞吐量正交幅度调制QAM方案在许多无线网络标准中变得流行,特别是在最近的WiMax标准中。多天线辅助多用户系统的自适应波束形成辅助检测其采用高阶QAM信令。

      传统上,最小均方误差(MMSE)自适应波束形成辅助接收机的设计被认为是最先进的。然而,最近工作[1]提出了一种新的波束形成辅助最小符号误码率(MSER)设计并且证明了这种MSER设计提供了显著的性能增强,在可实现的符号错误率方面超过标准MMSE设计。该MSER波束形成设计在此贡献中得到充分发展。特别是MSER的自适应实现详细研究了波束形成算法,即最小符号误码率算法。在仿真中评估了所提出的自适应MSER波束形成方案,并与自适应MMSE波束形成基准。

        该算法的流程和理论公式如下:

二、MATLAB程序

clc;
clear;
close all;
warning off;

SNR_set      = [10:1:24];
BER          = 1;
nRx          = 4;
nTx          = 3;
frame_length = 1000;
Bers         = [];
%论文table 2
alpha        = [0,-70,65,32];
SIR          = [0,0,0,0];
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 < 500000
        index = index+1;
        for kk=1:nTx
            bits(kk,:)    =  round(rand(1,frame_length));
            symbols(kk,:) = qammod(bits(kk,:),16);
        end
        %transmit signal
        s        = symbols; 
        u        = reshape(s,nTx,nRx,length(s)/nRx);
        %Channel
        h        = 1/sqrt(2)*[randn(nRx,nTx,length(s)/nRx) + j*randn(nRx,nTx,length(s)/nRx)];
        for ij = 1:nTx
            p(:,ij,:) = h(:,ij,:).*exp(j*alpha(ij)*pi/180);
        end
        %mmse beamforming
        WK  = [];
        WK2 = [];
        w   = [];
        LMS = zeros(1,length(s)/nRx);
        dt  = [];
        for i=1:length(s)/nRx
            for ii = 1:length(SIR)
                u2(:,ii) = u(:,ii,i)*10^(SIR(ii)/10); 
            end
            XN(:,:,i)= awgn(u2,SNR,'measured');
            %定义接收信号
            w(:,:,i) = inv(p(:,:,i)*p(:,:,i)'+2*delta2^2*eye(nRx))*p(:,1,i);
            Nsb      = nRx;
            M        = nRx;
            r        =(2*sqrt(M)-2)/sqrt(M);
            if i == 1
               WK =  w(:,:,i)'*p(:,:,i);
               dt = -0.0001*[ones(1,Nsb)]';
            else
               bk          = bits(1,nRx*(i-2)+1:nRx*(i-1)); 
               bk          = 2*bk-1;
               x1_         = bk;
               p1          = p(:,1,i);
               yr          = real(yhat(:,:,i-1));
               cr          = real(w(:,:,i));
               for iii = 1:Nsb
                   l       = iii;
                   ul      = 2*l-sqrt(M) - 1;
                   Rtiii =  exp(-(yr(iii) - cr(iii)*(ul-1))^2/(2*delta2^2))*((yr(iii) - cr(iii)*(ul-1))*w(:,:,i) - x1_(iii) + (ul-1)*p1);
               end
               PER=  r/(2*Nsb*sqrt(2*pi)*delta2) * (Rt1 + Rt2 + Rt3 + Rt4);

               yi          = imag(yhat(:,:,i-1));
               ci          = imag(w(:,:,i));
               for iii = 1:Nsb
                   q       = iii;
                   uq      = 2*q-sqrt(M) - 1;
                   Itiii =  exp(-(yi(iii) - ci(iii)*(uq-1))^2/(2*delta2^2))*((yi(iii) - ci(iii)*(uq-1))*w(:,:,i) + sqrt(-1)*x1_(iii) + (uq-1)*p1);
               end
               PEI=  r/(2*Nsb*sqrt(2*pi)*delta2) * (It1 + It2 + It3 + It4);
               PEB=  PER + sqrt(-1)*PEI;
               
               for is = 1:length(PEB)
                   if isnan(abs(PEB(is))) == 1
                      PEB(is) = 1; 
                   end
               end
               WWt(:,i-1) = PEB;
               if i>3
                  fai=max(min((abs(WWt(:,i-1)).^2)./(abs(WWt(:,i-2)).^2),1),0);
               else
                  fai=ones(nRx,1); 
               end
               dt          = fai.*dt - PEB;
               miu         = 5e-6;
               WK          = WK + miu*[dt(1:nTx)]'; 
               
            end
            
            WK          = WK/(max(abs(WK)));
            yhat(:,:,i) = WK*XN(:,:,i);
            R1          = real(yhat(:,:,i));
            I1          = imag(yhat(:,:,i));
            s_hat(:,:,i)= qamdemod(R1+sqrt(-1)*I1,16);
        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([10,40,1.0001e-6,1]);
ylabel('BER');
xlabel('SNR');
grid on
% save r2ber.mat SNR_set Bers
 

三、仿真结论

仿真结果如下:

 

 

       提出了一种用于多天线辅助的自适应MSER波束形成技术采用高通量QAM信令的多用户通信系统。已经证明了MSER波束形成设计可以在可实现系统的SER方面提供比标准MMSE设计显著的性能增强。它已经还已经证明,MSER波束形成设计提供了更高的用户容量与传统的MMSE波束形成相比,在远近传感器中更为鲁棒设计已经使用称为LSER技术的随机梯度自适应算法实现了MSER波束形成解决方案的自适应实现。模拟研究结果清楚地表明,自适应LSER波束形成能够:在快速衰落条件下成功运行,其性能始终优于自适应LMS波束形成基准。

A01-14 

以上是关于自适应MSER波束形成辅助接收机的MATLAB仿真的主要内容,如果未能解决你的问题,请参考以下文章

相移波束形成算法的MATLAB仿真

延时求和波束形成的MATLAB仿真

基于MATLAB的波束成型仿真

物理应用基于matlab麦克风阵列近场波束形成的典型方法仿真含Matlab源码 2196期

基于MATLAB的波速形成仿真

m基于MSER最大稳定极值区域和SVM的交通标志检测识别算法的matlab仿真