基本信息
源码名称:OFDM信号检测算法中的ML算法
源码大小:0.02M
文件格式:.docx
开发语言:MATLAB
更新时间:2024-05-07
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
OFDM信号检测算法中的ML算法

close all;

clear;
clc;
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)))  ; % QPSK符号
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) ;
    % 发送端QPSK调制
    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
figure
semilogy(0:2:20,SER);