基于MATLAB的MIMO系统分层空时码的仿真
Posted fpga&matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于MATLAB的MIMO系统分层空时码的仿真相关的知识,希望对你有一定的参考价值。
在这里,我们采用2*2的MIMO系统,根据上面的理论,我们开始设计一个简单的MIMO系统。
首先,定义发送天线和接收天线,这里根据课题要求,都设置为2,当然可以根据实际的需要将系统设置为我们所需要的数目,我们将对不同天线数目的系统做简单的对比。
这里我们根据前面的理论分析,将信道理论做间的处理,得到一个简单的信道模型,其表达式如上代码所示。
将当送信号做串并处理,将处理得到的信号放入到sMatrix0矩阵中,这一步比较简单,这里就不多做介绍了。
这里,将信号做BPSK调制,然后利用高斯白燥声来模拟信道。通过以上步骤,我们基本完成过了MIMO系统的发送模块的设计。
在接收端,我们主要做对系统的逆运算处理就可以了,即PSK解调和并串转变就可以了。这样一个简单的2*2MIMO系统就完成了。下面我们将对系统的做简单的仿真分析。
图3-1 2*2MIMO系统性能仿真
图3-2 不同天线数目MIMO系统性能比较
如上图所示,自上而下分别为8*8MIMO系统性能曲线,4*4MIMO MIMO系统性能曲线和2*2 MIMO系统性能曲线,通过比较,当天线数目越多则MIMO系统的性能越好,当然在实际中,我们更多的采用8*8 MIMO系统,从而获得更高性能的通信质量。
部分核心代码:
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=1000; %发送符号数量
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-*');
A01-05
以上是关于基于MATLAB的MIMO系统分层空时码的仿真的主要内容,如果未能解决你的问题,请参考以下文章
OFDM仿真基于matlab秩亏情况下遗传算法MIMO-OFDM系统多用户检测含Matlab源码 2293期
OFDM仿真基于matlab秩亏情况下遗传算法MIMO-OFDM系统多用户检测含Matlab源码 2293期
m基于rbf神经网络和遗传算法优化的MIMO-OFDM系统信道估计算法matlab仿真