基本信息
源码名称:OFDM信号检测算法中的ML算法
源码大小:0.02M
文件格式:.docx
开发语言:MATLAB
更新时间:2024-05-07
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
OFDM信号检测算法中的ML算法
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);
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);