您现在的位置:首页 >> ★免费资源 >> 源码下载 >> 内容

MATLAB代做-FPGA代做-球形译码性能仿真

时间:2019-7-28 2:59:34 点击:

  核心提示:MATLAB代做-FPGA代做-球形译码性能仿真...

BLAST检测中,目前采用的ZF(迫零) 算法,MMSE(最小均方误差) 算法, OSIC(排序连续干扰抵消) ML (最大似然)准则来进行译码。前三种算法,实现起来较简单,但是误码率性能较差;而使用ML检测能得到更好的性能,但是其复杂度较高,不易于实现。基于ML检测的SD(球形译码)算法是一种性能优化,复杂度适中的检测算法。已经证明,采用穷尽搜索的ML 检测算法的复杂度随天线数呈指数增长,SD算法的复杂度在很大信噪比范围内与天线数呈多项式关系。故SD算法可以用较少的计算量来获得最大似然译码性能。

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

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

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




联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

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

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

微信扫一扫:




clc;

close all;

clear all;


%/////////////////////////初始值///////////////////////////////////%

snr=10;                                                  %snr的dB形式  

snr_1=zeros(1,length(snr));                              %用来存储snr正常形式

sumber=0;                                                %初始化sumber

sumber1=0;                                               %初始化sumber1

sumber2=0;                                               %初始化sumber2

SymTime=10;                                              %仿真次数

mod_scheme='64qam';                                       %调制方式

mod_num=64;                                               %调制方式参数

avrgber=zeros(1,length(snr));                            %初始化误比特率,2范数球形译码

avrgber1=zeros(1,length(snr));                           %初始化误比特率,无穷范数球形译码

avrgber2=zeros(1,length(snr));                           %初始化误比特率,ML 

Nr=4;                                                    %接收天线数目

Nt=4;                                                    %发送天线数目


Number=100;                                                %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)

    ISNR

    snr_1(ISNR)=10^(snr(ISNR)/10);                       %将dB转化为正常形式                                         

    sumber=0;                                            %记录ber的和

    sumber1=0;

    sumber2=0;

    for round=1:1                                      

        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   

        

        if mod_num==64                                          %表示在变为实矩阵后,16qam有4种情况

           codebook=[-7 -5 -3 -1 1 3 5 7]; 

        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=(2*Nt)*(2/(10^(snr(ISNR)/10)));                                  %初始半径    二范数

       C2=2.5*(2/(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 = spheredecodetoML(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=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);  

 

       sumber=sumber+ratio;  

   

    end %round=1:SymTime

    avrgber(ISNR)=sumber/SymTime;

 

end


%******************plot*********************************************

figure(1)

semilogy(snr,avrgber,'-^b')                %蓝色是2norm球形译码,绿色是无穷范数球形译码,红色是ML检测

title('average BER')

xlabel('SNR(dB)')

ylabel('BER')

grid on

 

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

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