发布时间:2024-01-20 09:00
核心提示:基于MATLAB的MIMO系统仿真与分析|Matlab代做...
近年来,人们对无线通信业务需求的爆炸式增长激励着研究工作者们在相关领域的各个层面不断寻求技术突破,期望以更完美的解决方案来满足日益苛刻的要求,那就是:更大的信道容量、更高的信号传送质量、更实时的信号处理以及更经济便携的终端设备。多入多出(MIMO)技术的出现是历史性的,是无线移动通信领域智能天线技术的重大突破。该技术能在有限的频谱上提供更高的传输速率和系统容量。MIMO技术可以利用信道提供的空间复用增益来提高信道的容量,同时,利用MIMO信道提供的空间分集增益也可以提高信道的可靠性,降低误码率。从一定意义说,MIMO技术仅仅是一个通信系统构架,优秀的构架还需要配合优秀的信息传送控制技术才能发挥应有的效能。空时码正是作为MIMO的一项核心技术而出现在了历史的舞台上。本文就是对结合STBC与VBLAST各自的优点组成新的MIMO系统进行了研究,主要工作如下,随着现代社会无线通信业务的发展,人们对通信的有效性和可靠性有了更高的要求。在任何时间、任何地点能够方便的进行语音、数据、图像和视频等信息的交流是人们对未来通信的美好愿望。为了达到对高性能通信的要求,近年来涌现出了很多高性能的技术,其中MIMO技术是未来无线通信实现高传输速率、高系统容量及提高传输质量的重要途径。本文所研究的STBC与V-BLAST相结合的空时系统正是MIMO技术中一个重要的组成部分。在对STBC与V-BLAST相结合的空时编码系统的研究中,本文结合理论分析与仿真验证,主要进行了以下的工作:
·研究了MIMO系统的基本概念、信道模型及其国内外研究的现状,分析推导了慢衰落平坦瑞利信道下的MIMO系统容量,并对影响MIMO系统容量的因素做了相关介绍。
·深入研究了空时编码的重要技术一分集技术的基本概念、原理及其分类。尤其着重研究了在多径衰落环境下的多径信号的分离和合并以及基于发射端的发射分集技术。
·在深入研究了排序算法以及在瑞利衰落信道下,STBC与VBLAST的编译码的基础上,提出了一种结合STBC与VBLST的MIMO系统模型,推导出了在接收端运用排序QR分解方法的结合STBC与VBLAST的MIMO系统的空时分组码和空时分层码的判决统计的表达式。
·使用MATLAB作为仿真工具,对提出的系统与基于传统算法的VBLAST系统和STBC与VBLAST结合的系统进行了仿真对比。
附录
·MIMO系统
clc;
clear;
N = 1000;
%噪声幅度
a = 1;
%帧数
FrameLim = 1000;
%发送天线
nT = 2;
%接收天线
nR = 2;
EbN0db = [-30 -27 -24 -21 -18 -15 -12 -9 -6 -3 0];
FRAME = N;
for i = 1:length(EbN0db)
fprintf(\'%10.2f\',EbN0db(i));
end
for nEN = 1:length(EbN0db)
%DB值变Eb/No值
en = 10^(EbN0db(nEN)/10);% dB转为数值dB = 10*lg(nv)
sigma = sqrt(nT/en/10); %添加噪声
cber0(nEN) = 0;
cerrs0(nEN) = 0;
nframe = 0;
while nframe < FrameLim
nframe = nframe + 1;
data = randint(1, N);%出现0的概率为1/2的一个1*N维数组。
H = (randn(nR, nT) + j*randn(nR, nT))/sqrt(2*nR); %VMIMO信道模型
for k=1:N/nT
for m=1:nT
sMatrix0(m,k)= data(1,m+(k-1)*nT);%串并变换
end
end
sMatrix0 = 2 .* sMatrix0 - 1;%PSK调制
rMatrix0 =H * sMatrix0;%接收信号
nMatrix0 = sigma*(randn(nR,FRAME/nT)+j*randn(nR,FRAME/nT));% AWGN噪声
%===========================================================
rMatrix0 = rMatrix0 + nMatrix0; %接收信号
dMatrix0= H\'* rMatrix0;%检测接收信号
dec1(1:nT,1:N/nT)=real(dMatrix0(1:nT,1:N/nT));%PSK解调
for k=1:N/nT
for m=1:nT
dec2(1,m+(k-1)*nT)=dec1(m,k); %并转串
end
end
dec = (sign(dec2)+1)/2;
cerr0 = length(find(dec(1:N) ~= data(1:N)));
cerrs0(nEN) = cerrs0(nEN) + cerr0;
end
cerrs0(nEN);
cber0(nEN) = cerrs0(nEN)/(N)/nframe;
end
semilogy(cber0,\'o-r\');axis([1,10,0,0.7]);grid on;
·时空编码
clc;
clear;
O=[1 -2 -3;2+j 1+j 0;3+j 0 1+j;0 -3+j 2+j];
Nt=2;%发送天线个数
Nr=2;%接收天线数量
timer=4;
Number_bit=5000;%发送符号数量
mod=4;
min_snr=3;%最小信噪比
max_snr=15;%最大信噪比
num_X=1;
num_bit_per_sym=log2(mod);%每个符号所有的比特数
for cc_ro=1:timer
for cc_co=1:Nt
num_X=max(num_X,abs(real(O(cc_ro,cc_co))));
end
end
co_x=zeros(num_X,1);
for con_ro=1:timer
for con_co=1:Nt
if abs(real(O(con_ro,con_co)))~=0
delta(con_ro,abs(real(O(con_ro,con_co))))=sign(real(O(con_ro,con_co)));
epsilon(con_ro,abs(real(O(con_ro,con_co))))=con_co;
co_x(abs(real(O(con_ro,con_co))),1)=co_x(abs(real(O(con_ro,con_co))),1)+1;
eta(abs(real(O(con_ro,con_co))),co_x(abs(real(O(con_ro,con_co))),1))=con_ro;
coj_mt(con_ro,abs(real(O(con_ro,con_co))))=imag(O(con_ro,con_co));
end
end
end
eta=eta.\';
eta=sort(eta);
eta=eta.\';
for SNR=min_snr:max_snr
clc
disp(\'Wait until SNR=\');disp(max_snr);
SNR
n_err_sym=0;
n_err_bit=0;
graph_inf_sym(SNR-min_snr+1,1)=SNR;
graph_inf_bit(SNR-min_snr+1,1)=SNR;
for con_sym=1:Number_bit
bi_data=randint(num_X,num_bit_per_sym);
de_data=bi2de(bi_data);
data=pskmod(de_data,mod,0,\'gray\');
H=randn(Nt,Nr)+j*randn(Nt,Nr);
XX=zeros(timer,Nt);
for con_r=1:timer
for con_c=1:Nt
if abs(real(O(con_r,con_c)))~=0
if imag(O(con_r,con_c))==0
XX(con_r,con_c)=data(abs(real(O(con_r,con_c))),1)*sign(real(O(con_r,con_c)));
else
XX(con_r,con_c)=conj(data(abs(real(O(con_r,con_c))),1))*sign(real(O(con_r,con_c)));
end
end
end
end
H=H.\';
XX=XX.\';
snr=10^(SNR/10);
Noise=(randn(Nr,timer)+j*randn(Nr,timer));
Y=(sqrt(snr/Nt)*H*XX+Noise).\';
H=H.\';
for co_ii=1:num_X
for co_tt=1:size(eta,2)
if eta(co_ii,co_tt)~=0
if coj_mt(eta(co_ii,co_tt),co_ii)==0
r_til(eta(co_ii,co_tt),:,co_ii)=Y(eta(co_ii,co_tt),:);
a_til(eta(co_ii,co_tt),:,co_ii)=conj(H(epsilon(eta(co_ii,co_tt),co_ii),:));
else
r_til(eta(co_ii,co_tt),:,co_ii)=conj(Y(eta(co_ii,co_tt),:));
a_til(eta(co_ii,co_tt),:,co_ii)=H(epsilon(eta(co_ii,co_tt),co_ii),:);
end
end
end
end
RR=zeros(num_X,1);
for ii=1:num_X
for tt=1:size(eta,2)
for jj=1:Nr
if eta(ii,tt)~=0
RR(ii,1)=RR(ii,1)+r_til(eta(ii,tt),jj,ii)*a_til(eta(ii,tt),jj,ii)*delta(eta(ii,tt),ii);
end
end
end
end
re_met_sym=pskdemod(RR,mod,0,\'gray\');
re_met_bit=de2bi(re_met_sym);
re_met_bit(1,num_bit_per_sym+1)=0;
for con_dec_ro=1:num_X
if re_met_sym(con_dec_ro,1)~=de_data(con_dec_ro,1)
n_err_sym=n_err_sym+1;
for con_dec_co=1:num_bit_per_sym
if re_met_bit(con_dec_ro,con_dec_co)~=bi_data(con_dec_ro,con_dec_co)
n_err_bit=n_err_bit+1;
end
end
end
end
end
Perr_sym=n_err_sym/(num_X*Number_bit);
graph_inf_sym(SNR-min_snr+1,2)=Perr_sym;
Perr_bit=n_err_bit/(num_X*Number_bit*num_bit_per_sym);
graph_inf_bit(SNR-min_snr+1,2)=Perr_bit;
end
x_sym=graph_inf_sym(:,1);
y_sym=graph_inf_sym(:,2);
subplot(211);
semilogy(x_sym,y_sym,\'r-*\');
x_bit=graph_inf_bit(:,1);
y_bit=graph_inf_bit(:,2);
subplot(212);
semilogy(x_bit,y_bit,\'b-*\');
·STBC与VBLAST结合的MIMO系统
clear;
clc;
min_se = 0;
max_se = 15;
se = 5;
BlockSize = 2^8;
BlocksPerEnergy = 20;
SamplingRate = 1;
WGNPower = 1;
RayleighParam = 1;%RayleighParam瑞利信道参数
Tx=[2];
Rx=[2];
EnergiesdB = 10.*log10((10.^(min_se./10))./WGNPower):se:10.*log10((10.^(max_se./10))./WGNPower);
Energies = WGNPower*10.^(EnergiesdB./10);
for a=1:size(Tx,2)
Transmitters = Tx(a);
Receivers=Rx(a);
for ee = 1:size(Energies,2)
Eb = Energies(ee)/Transmitters;
for bb=1:BlocksPerEnergy
disp([\'Eb = \',int2str(Energies(ee)),\'; Block \',int2str(bb)]);
RayleighMat = RayleighParam^2*randn (Receivers,Transmitters)
+ j*RayleighParam^2*randn(Receivers,Transmitters);
A = randint(Transmitters,BlockSize,16);
B = mod16qam (A,1,SamplingRate,Eb,Transmitters)\';
noise = (WGNPower).*randn(size(RayleighMat*B)) + j*(WGNPower).*randn(size(RayleighMat*B));
C = RayleighMat*B + noise;
k = [];
H = RayleighMat;
r=C;
for tt=1:Transmitters
% find best signal
G=pinv(H);
normG = sum(abs(G).^2,2);
normG(k) = inf;
k(tt) = find(normG == min(normG));
w = G(k(tt),:) ;
y = w*r;
[E(k(tt),:),Eb_rec(k(tt))] = demod16qam (y,1,SamplingRate,Transmitters); % Demodulate
% nulling starts here
r = r - H(:,k(tt))*(mod16qam (E(k(tt),:),1,SamplingRate,Eb_rec(k(tt)),Transmitters))\';
H(:,k(tt)) = zeros(size(H(:,k(tt))));
end
SER(:,bb) = 1-sum(A==E,2)/size(A,2);% Measure BER per T-R pair.
end
p = mean(SER,2);
q = mean(p,1);
NC_ESER(a,ee)=mean(mean(SER,2),1);
SER=[];
end
end
semilogy(EnergiesdB,NC_ESER(1,:),\'r-*\');