模拟不同MIMO-OFDM方案的MATLAB代码(Matlab代码实现)

       目录

1 概述

2 运行结果

3 参考文献

‍4 Matlab代码


1 概述

       MIMO技术指在发射端和接收端分别使用多个发射天线和接收天线,使信号通过发射端与接收端的多个天线传送和接收,从而改善通信质量。它能充分利用空间资源,通过多个天线实现多发多收,在不增加频谱资源和天线发射功率的情况下,可以成倍地提高系统信道容量,显示出明显的优势、被视为下一代移动通信的核心技术。

多输入多输出(MIMO)和正交频分复用(OFDM)是LTE的两大核心技术。多输入多输出(MIMO)技术利用各种分集技术带来的分集增益可以提高系统的信道容量、数据的传输速率以及系统的频谱利用率,这些都是在不增加系统带宽和发射功率的情况下取得的;正交频分复用(OFDM)技术是多载波调制技术的一种,其物理信道是由若干个并行的正交子信道组成,因此可有效地对抗频率选择性衰落,同时通过插入循环前缀(CP)可以有效消除由多径而引起的符号间干扰(ISI)。由于多输入多输出(MIMO)在提高系统容量和正交频分复用(OFDM)在对抗多径衰落方面的优势,基于两者结合的MIMO-OFDM系统已经引起了广泛的关注。 信道估计算法和信号检测算法是MIMO-OFDM系统的关键技术。其中信道估计算法对MIMO-OFDM系统接收端的相干解调和空时检测起着至关重要的作用,信道估计的准确性将影响系统的整体性能。

2 运行结果

模拟不同MIMO-OFDM方案的MATLAB代码(Matlab代码实现)_第1张图片

模拟不同MIMO-OFDM方案的MATLAB代码(Matlab代码实现)_第2张图片

模拟不同MIMO-OFDM方案的MATLAB代码(Matlab代码实现)_第3张图片

模拟不同MIMO-OFDM方案的MATLAB代码(Matlab代码实现)_第4张图片

模拟不同MIMO-OFDM方案的MATLAB代码(Matlab代码实现)_第5张图片

主函数部分代码:

%% Linear Minimum Mean Square Error
% System Parameters
% FFT N = 128
% M = 2
clear all; clc
​
% Load Function libraries
QPSK = QPSK_lib;
OFDM_lib;
%% Data
% Load text file
fid = fopen('usdeclar.txt');
cAr = fread(fid,inf);   % Read as ASCII decimal characters
fclose(fid);
​
% % % Load 32 char string
% load('Test_Strings.mat','QPSKstr'); % This will allow for a single OFDM char
% cAr = double(QPSKstr);
% 
%% Convert to binary
% 
binDat = Binary_cnvrt(cAr);
​
%binDat = ones(1,69480);
​
%% Map to QPSK symbols
​
symDat = QPSK.bin2symb(binDat,1); 
​
%% LMMSE Encoding
% |s1 s3|
% |s2 s4|
a = reshape(symDat,2,length(symDat)/2);
​
%% Split into Mt channels and perform IDFT
​
N = 128;
ch1 = idft(a(1,:),N);
ch2 = idft(a(2,:),N);
​
%% Parallel to Serial for each channel
​
chDim = size(ch1);
ch1 = reshape(ch1,1,chDim(1)*chDim(2));
ch2 = reshape(ch2,1,chDim(1)*chDim(2));
TX_2 = [ch1;ch2];
​
%% Channel
Mt = 2;
Mr = 2;
Pt = mean(mean(TX_2.'.*conj(TX_2.')));  % Es/Mt
​
%%
SNR_dB = 20;
SNR = 10^(SNR_dB/10);
H = sqrt(1/2).*(randn(Mr,Mt)+1i*randn(Mr,Mt));  % Channel Coeff
%H = eye(Mr,Mt);
Pn = Pt/SNR;
% load('ZF_n.mat');
n = sqrt(Pn/2).*(randn(Mr,length(ch1))+1i.*randn(Mr,length(ch1)));
N0 = mean(mean(n.'.*conj(n.')));
​
%% Receiver
​
RX_2 = H*TX_2+n;
​
%% Serial to Parallel
​
y1 = reshape(RX_2(1,:),chDim(1),chDim(2));
y2 = reshape(RX_2(2,:),chDim(1),chDim(2));
​
%% DFT
​
ySym1 = dft(y1,chDim(1));
ySym2 = dft(y2,chDim(1));
​
ySym1 = ySym1(1:length(symDat)/2);  % Remove extra data added from idft from TX
ySym2 = ySym2(1:length(symDat)/2);
​
%% LMMSE Decoding
​
v2 = Mt/SNR;    % Mt*N0/Es
g = (H*H'+v2*eye(Mt))\H;
z = g'*[ySym1; ySym2];
​
xh = reshape(z,1,length(ySym1)*2);  % Estimation of x
​
%% Demapper
% De-map symbols and convert to binary
​
[bin2, symDat2] = QPSK.sym2bin(xh);
​
% Show Received symbol constellation
close all
figure(2)
QPSK.Constellation(xh, SNR_dB);
%% Calculate SER & BER
​
SER = mean(symDat2 ~= symDat);
BER = mean(binDat ~= bin2);

3 参考文献

[1]申京. MIMO-OFDM系统中信道估计及信号检测算法的研究[D].北京邮电大学,2012.

部分理论引用网络文献,若有侵权联系博主删除。

你可能感兴趣的:(matlab,算法,开发语言)