您现在的位置:首页 >> 技术文章 >> MATLAB技术 >> 内容

MATLAB代做|FPGA代做|python代做-MIMO系统球形译码的仿真

时间:2021-6-17 23:20:15 点击:

  核心提示:MATLAB代做|FPGA代做|python代做-MIMO系统球形译码的仿真...
1.问题描述:
       球形译码的基本思想是在以一个矢量x 为中心的半径为d的多维球内搜索格点,通过限制或者减少搜索半径从而减少搜索的点数,进而使得计算时间减少。球形译码算法带来的优点在于它不需要象传统的最大似然译码算法那样需要在整个格内对所有的格点进行搜索,而只需要在一个事先设定的有限球形区域进行搜索,如果该区域所包含的点数相对于整个格内的总点数是相当小的,搜索时间就会大大减少。

       影响球形译码的关键问题有:(1) 怎样选择搜索半径d。如果d太大,则球内会包含太多的点,复杂度就会接近或者达到最大似然译码的指数级复杂度。如果d 太小,则球内可能一个格点都不包含,那么球形译码算法将得不到合理的解。(2) 怎样才能判断一个点是否在球内。如果这种判断需要借助每一个格点和矢量之间的距离来判断的话,那么这种方法就不太理想,因为我们需要考察所有的点,所产生的计算量也是指数级的。

      球形译码解决了第2个问题,此处均考虑信号为实数,因为复数可以通过增加一倍的维数,将实部和虚部分开,要判断一个点是否在半径为d的m维球内比较困难。若将m变为1,则从球退化为一个间距,这个点就相当于某根天线发送信号的实部或虚部,这样操作就简单很多,可以知道这个点是否在这个距离内。多根发送天线上的信号的实部和虚部分成很多维,每一维上有可能取值。球形译码算法相当于构建了一棵树,树的第k层节点对应的是落在半径为d,维数为k的球内的格点。
————————————————
close all;
clear all;

%/初始值///%
snr=0:2:20;                                              %snr的dB形式  
snr_1=zeros(1,length(snr));                              %用来存储snr正常形式
sumber=0;                                                %初始化sumber
sumber1=0;                                               %初始化sumber1
sumber2=0;                                               %初始化sumber2
SymTime=20;                                            %仿真次数
mod_scheme='4qam';                                       %调制方式
mod_num=4;                                               %调制方式参数
avrgber=zeros(1,length(snr));                            %初始化误比特率,2范数球形译码
avrgber1=zeros(1,length(snr));                           %初始化误比特率,无穷范数球形译码
avrgber2=zeros(1,length(snr));                           %初始化误比特率,ML 
Nr=4;                                                    %接收天线数目
Nt=4;                                                    %发送天线数目
Number=10;                                               %bit source 
t1=zeros(1,length(snr));                                 %初始化记录时间t1
t2=zeros(1,length(snr));                                 %初始化记录时间t2
t3=zeros(1,length(snr));

for n=1:SymTime
    H1(:,:,n)=(randn(Nr,Nt)+j*randn(Nr,Nt))/sqrt(2);
end                                                      %产生信道矩阵H  

for ISNR=1:length(snr)
    
    
    
    snr_1(ISNR)=10^(snr(ISNR)/10);                       %将dB转化为正常形式                                         
    sumber=0;                                            %记录ber的和
    sumber1=0;
    sumber2=0;
    for round=1:SymTime       
        ISNR
        round
        msg=randint(log2(mod_num),Nt*Number/2);
        h=modem.qammod('M',mod_num,'InputType','bit','symbolorder','Gray');%qam调制
        s=modulate(h,msg);
        constelPoints=[1+j 1-j -1+j -1-j];                      %$ for ML detect
  %     constelPoints=[-3-3*j -3-j -3+3*j -3+j -1-3*j -1-j -1+3*j -1+j 3-3*j 3-j 3+3*j 3+j 1-3*j 1-j 1+3*j 1+j]; 
        s1=[real(s);imag(s)];                                    %s1为信号的实矩阵
        s2=reshape(s,Nt,Number/2);                               %s2为信号的Nt行的复矩阵
        if mod_num==4
           codebook=[-1 1];                                       %表示在变为实矩阵后,4qam只有两种情况1和-1 
        end
        if mod_num==16                                          %表示在变为实矩阵后,16qam有4种情况
           codebook=[-3 -1 1 3]; 
        end   
        ss=reshape(s1,2*Nt,Number/2);                            %ss为信号的2*Nt行的实矩阵  
%       H=[real(H1(:,:,round)) -imag(H1(:,:,round));imag(H1(:,:,round)) real(H1(:,:,round))];                %将信道复矩阵变为信道实矩阵 


%/%
       r1=H1(:,:,round)*s2;                                 
       for ii=1:Nt                                              %添加噪声
           rr(ii,:)=awgn(r1(ii,:),snr_1(ISNR),'measured');
       end                                                      %rr为接收复信号 
     
       C1=3*(2*Nt)*2*(2/(10^(snr(ISNR)/10)));                                   %初始半径 二范数4qam
       C2=16*2*(2/(10^(snr(ISNR)/10)));                                      %初始半径无穷范数
%        C1=3*(2*Nt)*(10/(10^(snr(ISNR)/10)));                               %初始半径    二范数16qam  
%        C2=8*2*(10/(10^(snr(ISNR)/10)));                                      %初始半径  无穷范数
       rev1=[real(rr);imag(rr)];                                      %rr转变为实信号
       H=[real(H1(:,:,round)) -imag(H1(:,:,round));imag(H1(:,:,round)) real(H1(:,:,round))];              %信道实矩阵
     
     
       for tmp=1:Number/2                                            %二范数球形译码
           rev=rev1(:,tmp);   
           tic
           y_2norm_temp = spheredecode(rev, C1, H, codebook);
           for jj=1:Nt
               y_2norm(Nt*tmp+jj-Nt)=y_2norm_temp(jj)+j*y_2norm_temp(jj+Nt);                 %存储为复数形式
           end
           t1(ISNR)=toc+t1(ISNR); 
       end   
     
       H=[real(H1(:,:,round)) -imag(H1(:,:,round));imag(H1(:,:,round)) real(H1(:,:,round))];              %信道实矩阵
       for tmp=1:Number/2                                            %二范数球形译码
           rev=rev1(:,tmp);   
           tic
           y_infnorm_temp = spheredecodeinf(rev, C2, H, codebook);    
           for jj=1:Nt
               y_infnorm(Nt*tmp+jj-Nt)= y_infnorm_temp(jj)+j* y_infnorm_temp(jj+Nt);                 %存储为复数形式
           end
           t2(ISNR)=toc+t2(ISNR); 
       end   
     
     
     
       for tmp=1:Number/2
           min=100000;
           tic
           for flag1=1:mod_num
               for flag2=1:mod_num
                   for flag3=1:mod_num
                       for flag4=1:mod_num
                           stmp=[constelPoints(flag1);constelPoints(flag2);constelPoints(flag3);constelPoints(flag4)];
                           rtmp=rr(:,tmp);
%                   stmp=[constelPoints(flag1);constelPoints(flag2)];
%                   rtmp=[rr(1,tmp);rr(2,tmp)];
                           Maximum=norm(rtmp-H1(:,:,round)*stmp); 
                           if Maximum<min
                              min=Maximum;
                              slast=stmp;
                           end    
                       end
                   end
               end
           end  
           for jj=1:Nt        
               y_ML(Nt*tmp+jj-Nt)=slast(jj);
           end     
           t3(ISNR)=toc+t3(ISNR); 
        end  
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
       h=modem.qamdemod('M',mod_num,'OutputType','bit','symbolorder','Gray');   %第二范数
       DM1_msg=demodulate(h,y_2norm);
       DM_msg=reshape(DM1_msg,log2(mod_num),Nt*Number/2);
       [number,ratio] = biterr(msg,DM_msg);  

       h=modem.qamdemod('M',mod_num,'OutputType','bit','symbolorder','Gray');
       DM3_msg=demodulate(h,y_infnorm);
       DM2_msg=reshape(DM3_msg,log2(mod_num),Nt*Number/2);
       [number1,ratio1] = biterr(msg,DM2_msg);                           %无穷范数  

       h=modem.qamdemod('M',mod_num,'OutputType','bit','symbolorder','Gray');
       DM5_msg=demodulate(h,y_ML);
       DM4_msg=reshape(DM5_msg,log2(mod_num),Nt*Number/2);
       [number2,ratio2] = biterr(msg,DM4_msg);                           %ML 
   
       sumber=sumber+ratio;  
       sumber1=sumber1+ratio1;
       sumber2=sumber2+ratio2;   
    end %round=1:SymTime
    avrgber(ISNR)=sumber/SymTime;
    avrgber1(ISNR)=sumber1/SymTime;
    avrgber2(ISNR)=sumber2/SymTime;
end

%******************plot*********************************************
figure(1)
semilogy(snr,avrgber,'-^b',snr,avrgber1,'-*g',snr,avrgber2,'-or')                %蓝色是2norm球形译码,绿色是无穷范数球形译码,红色是ML检测
title('average BER')
xlabel('SNR(dB)')
ylabel('BER')
grid on
figure(2)
plot(snr,t1,'-^b',snr,t2,'-*g',snr,t3,'-or')                %蓝色是2norm球形译码,绿色是无穷范数球形译码,红色是ML检测
title('simulation time')
xlabel('SNR(dB)')
ylabel('TIME')
grid on

figure(1)
semilogy(snr,avrgber,'-^b',snr,avrgber2,'-or')                %蓝色是2norm球形译码,绿色是无穷范数球形译码,红色是ML检测
title('average BER')
xlabel('SNR(dB)')
ylabel('BER')
grid on
figure(2)
plot(snr,t1,'-^b',snr,t3,'-or')                %蓝色是2norm球形译码,绿色是无穷范数球形译码,红色是ML检测
title('simulation time')
xlabel('SNR(dB)')
ylabel('TIME')
grid on

3.仿真结论:
以下是4*4收发天线MIMO系统,发送符号采用4QAM调制方式,分别对最大似然ML检测(红色),二范数球形译码(蓝色),无穷范数球形译码(绿色)进行仿真比较横坐标为SNR(dB),纵坐标为BER和仿真时间。二范数球形译码的初始半径按经验公式给出,无穷范数球形译码初始半径为二范数球形译码的初始半径的2/3。
————————————————

联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:

作者:MIMO系统球形译码 来源:MIMO系统球形译码
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|matlab淘宝代做|python人工智能代做|FPGA项目合作|C代做|C++代做(www.hslogic.com) © 2021 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment