MIMO系统ML检测(最大似然检测)

 
Nt = 2 ;
Nr = 2 ;
Len = 10000 ;
M= 4 ;
bitsPerSymbol = log2(M) ;
bitsTotal = bitsPerSymbol * Nt * Len ;

ALP = [-1+1i  ;-1-1* 1i ;1+1i ;1-1i] * sqrt(3/(2*(M-1)))  ; %QAM符号
%ALPbin = dec2bin( 0:M-1 , log2(M))  ; %QAM的二进制编码
SNRVect = 0:2:20 ;
SER = zeros( 1 ,length(SNRVect) )  ;
for snrLoop =  1: length (SNRVect)
    fprintf(' snrLoop = %d \n',snrLoop) ;
    %计算信噪比
    SNRdB = SNRVect(snrLoop) ;
    SNR  = 10^(SNRdB/10) ;
    %此处我们假设每根天线发送的信号能量为1   
    %N0 表示噪声的能量
    N0 = Nt * 1 / SNR ;   

    %产生随机比特流
    send = round(rand(1,bitsTotal)) ;
    sendReshape = reshape(send , Nt * bitsPerSymbol , Len ) ;
    symbols = zeros(Nt, Len) ;
    symbolsModulation = zeros(Nt ,Len) ;
    %发送端 4QAM调制
    fprintf('\n正在调制并发送 \n') ;
    for sendLoop = 1 :Len
        for antennaLoop = 1: Nt
            twoBits = sendReshape ( 2* antennaLoop-1 :2* antennaLoop, sendLoop) ;
            symbols  ( antennaLoop ,sendLoop)  = 2 * twoBits(1) + 1 * twoBits(2) +1 ;
            symbolsModulation ( antennaLoop ,sendLoop) = ALP(symbols  ( antennaLoop ,sendLoop) ) ;
        end
    end
    %经过信道
    H = (randn(Nr, Nt) + sqrt(-1) * randn(Nr , Nt))/ sqrt(2)  ; % 除以sqrt(2) 保证信道的能量为1
    n = (randn(Nr , Len) + sqrt(-1)*randn(Nr, Len )) * sqrt(N0) /sqrt(2) ; %保证噪声 n ~N(0,N0)
    y = H* symbolsModulation + n ;
    %接收端
    fprintf('\n正在译码 \n') ;
    symbolsDetect = zeros(2 , Len) ;
    for sendLoop = 1 :Len
         fprintf('%d %d \n',snrLoop ,sendLoop) ;
        %得到M*M种组合
        dml = zeros(M ,M ,Len) ;
        for i1 = 1:M
            for i2 = 1:M
                dml(i1, i2, sendLoop) = (norm (  y(: , sendLoop) - H * [ALP(i1) ; ALP(i2)] ) )  .^2 ; % 共16种组合
            end
        end
        dml_min = min( reshape(dml( :, :, sendLoop ) .' , 1, M*M)  ) ;
        %找到最合适的  然后译码
        for j1 = 1: M ;
            for j2 = 1:M
                if dml(j1 , j2, sendLoop) ==dml_min ;
                    symbolsDetect(1, sendLoop) = j1 ;
                    symbolsDetect(2, sendLoop) = j2 ;
                end
            end
        end

    end
    % 一个信噪比结束  统计SER
    SER(snrLoop)  = sum ( reshape(symbolsDetect , 1, Len * Nt) ~= reshape (symbols , 1, Len *Nt) )/ (Len * Nt) ;
end

semilogy( 0: 2 : 20 , SER)
  L=1000时,仿真结果如下:

转载于:https://my.oschina.net/itfanr/blog/358465

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MIMO系统中的最大似然检测算法是一种常用的信号检测算法,用于解决MIMO通信系统中的信号解调问题。该算法的目标是通过最大化接收信号的似然函数,选择最有可能的发送信号组合。 最大似然检测算法的代码实现主要包括以下几个步骤: 1. 确定接收信号和发送信号的维度以及信道矩阵。接收信号通常表示为一个复数向量,发送信号是一个复数矩阵,信道矩阵描述了信号在不同天线和子载波上的传输情况。 2. 设置发送信号的候选符号集合。根据发送信号的维度和调制方式,设置可能的发送符号组合。例如,在二进制调制中,可能的发送符号是{+1, -1}。 3. 遍历所有的发送符号组合。对于每个发送符号组合,计算接收信号与假设的发送符号之间的欧氏距离。可以使用欧氏距离公式或者矩阵运算来计算距离。 4. 选择距离最小的发送符号组合。根据计算得到的距离,找到距离最小的发送符号组合,即为最可能的发送信号组合。 5. 解调和恢复发送信号。根据最可能的发送符号组合,进行解调操作,得到恢复的发送信号。 最大似然检测算法的代码实现主要涉及到信号的计算和选择,根据编程语言的不同,代码的实现方式也会有所差异。一般可以使用循环、矩阵运算和条件语句等基本的编程结构来实现该算法。在实际的通信系统中,还需要考虑计算复杂度等因素,针对大规模MIMO系统可能采用更高效的算法实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值