MIMO大规模天线阵列原理与matlab仿真(含GUI)

这篇具有很好参考价值的文章主要介绍了MIMO大规模天线阵列原理与matlab仿真(含GUI)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 设计实现流程

1.MIMO系统原理

传统的无线通信系统是采用一个发送天线和一个接收天线的通信系统,即单输入单输出(SISO)天线系统。但由于单天线系统的信道容量较低,不能满足4G、5G数据传输需求,由香农公式可知,提高信道容量有两种方式,一是增大带宽,二是提高信噪比(增大发射功率)。但由于频谱资源比较珍稀,多径效应等缘故,增大带宽方式并不实用;而增大带宽带来的增益十分有限,显得并不划算。鉴于以上原因,MIMO应运而生,在功率和带宽受限的情况下,通过增加天线数量来充分利用无线信道的空间资源,使单路传输变为多路传输,从而提高信道容量。一个MIMO信道可以转换成多个并行的相互独立的信道,可见MIMO并不违背香农公式,且通过增加天线充分利用无线信道提高了信道总容量。

mimo天线数据设计,MIMO,空间调制,matlab

图1 MIMO系统模型

MIMO系统就是多个信号流在空中的并行传输。在发射端输入的数据流变成几路并行的符号流,分别从Mt个天线同时发射出去;接收端从Mr个接收天线将信号接收下来,恢复原始信号。多个信号流可以是不同的数据流,也可以是同一个数据流的不同版本。不同的数据流就是不同的信息同时发射,意味着信息传送效率的提升,提高了无线通信的效率。(如空分复用)

同一个数据流的不同版本,就是同样的信息,不同的表达方式,并行发射出去,确保接受端收到信息的准确,提高信息传送的可靠性。(如空间分集)

为提高信息传送效率的工作模式,就是MIMO的复用模式;为提高信息传送可靠性的工作模式,就是MIMO的分集模式。

mimo天线数据设计,MIMO,空间调制,matlab

图2 MIMO系统优势

2.SISO实现

传统天线系统的结构框图是系统模型,主要用到信号与信道的调制,以及噪声的一个调制,接收端解调用到最大似然解调。

3.空时编码原理

空时编码主要应用于多发射天线中,信号同时在不同的天线上发射,或者被不同的天线接收,获得空间分集,信号在不同的时间在相同的子信道上进行传输,获得时间分集,时域上的分隔和地理位置上的分隔产生了空时特性,接收天线可以收到该发射信号的数个拷贝,并对接收到的多个数据进行合并检测,提高了传输可靠程度。因此空时编码不仅减少了误码率,还能提高频带利用率,于是系统容量随即提高。本实验主要介绍Alamouti方案。

在Alamouti方案中,对于在两个时隙连续发送的两个符号x1和x2,第一个发射天线和第二个发射天线在第一个时隙分别发送的是x1,x2,第一个发射天线和第二个发射天线在第二个时隙分别发送的是-x2*,x1*,下图为发射过程。

mimo天线数据设计,MIMO,空间调制,matlab

图4 Alamouti方案

该传输方案通常由矩阵表示,矩阵的每一列代表一个时隙,每一行代表一个天线随着时间的传输,所以天线的发射序列如下

Alamouti方案中最主要特征是两根发射天线上的发射序列是相互正交的。

mimo天线数据设计,MIMO,空间调制,matlab

图5 接收机流程图

接收信号矢量表示如下

mimo天线数据设计,MIMO,空间调制,matlab

Alamouti方案在发射天线为2接收天线为1的情况下能够获得最大的分集增益2。即使接收端没有多根天线,同样能够获得空间分集增益,从而使该方案很有价值。

4.空间调制原理

空间调制是一种多天线多维调制技术。其原理是输入比特流经发射端后分成两个部分:一个部分信息映射到调制发射天线序号;另外一个部分映射到调制发射天线符号,该系统将天线维度作为第三维,让天线的选择部分同时携带大量信息,充分利用空间资源。

mimo天线数据设计,MIMO,空间调制,matlab

图6 空间调制无线通信系统

每个时刻只有一根天线激活来发送数据输入比特信息中有log2Nt比特用于选择发送天线,剩余的用于传输符号映射,发射天线和调制阶数决定了系统的传输速率。下图为4天线的发射实例。

 mimo天线数据设计,MIMO,空间调制,matlabmimo天线数据设计,MIMO,空间调制,matlab

       图7 发射实例                      图8 发射天线三维图

空间调制的发射向量只有一个是非零元素,接收信号为

Y=Hx+n

接收天线和发送天线的信道增益H为

H=[h1 ... hj ... hNi]

式中,信道矩阵H中元素均值为0,方差为1,n表示N维噪声向量,对于发射信号的检测即为相应的发射天线及其传输的符号。

综上,空时编码设计简单巧妙,是一种有效的发射分集技术,虽然能够较好地提升系统的性能,但是数据的传输速率相对较低,是一种牺牲速率来提高性能的传输方案。

5.采用迫零算法(ZF)检测原理

迫零检测算法是最简单的一种空时信号处理接收技术,可以消除所有的乘性干扰和信号之间的干扰,其对信号的处理包含三个步骤:迫零、干扰抵消和信号补偿。迫零处理方法通过迫零向量来消除信道的乘性干扰,并消除没有被检测出的接收信号分量的干扰;干扰抵消就是在接收信号向量中消除已经被估计出的部分信号成分,从而消除该信号对未检测出来的信号成分的干扰;为确定信号的检查顺序,需要对其进行信号补偿。

迫零检测的主要目的是寻找一个加权矩阵,乘以接收端的信号,然后将所得结果经判决后可作为对X的估计。

mimo天线数据设计,MIMO,空间调制,matlab

可以得到ZF检验结果为:

mimo天线数据设计,MIMO,空间调制,matlab

mimo天线数据设计,MIMO,空间调制,matlab

迫零检测复杂度低,消除了不同天线之间的干扰,将不同的数据流进行分离,但是以增强噪声作为代价,造成了检测性能较差。

6.采用最小均方误差(MMSE)检测原理

相比于同为线性检测方法的迫零检测,MMSE检测可以综合考虑符号间干扰和噪声对算法性能的影响。其基本原理就是最小化检测器的输出估计和实际发送的符号之间的均方误差。通过加权矩阵

mimo天线数据设计,MIMO,空间调制,matlab

可以得到估计信号为:

mimo天线数据设计,MIMO,空间调制,matlab

由于考虑了噪声的影响,MMSE检验算法的性能要优于ZF检测,它综合考虑了天线之间的干扰和噪声造成的影响,实质上是对ZF检测进行修正,其修正值与噪声方差成正比,从而既能消除天线之间的干扰,又能克服噪声的增强。

7.采用最大似然(ML)检测原理

最大似然检测算法作为V-BLAST系统最优的检测算法其基本思想是:在接收端保存所有发射端可能发送的符号向量,在接收端计算接收到的发射信号与所保存的所有发射端向量在接收空间的映射之间的欧式距离,从而最小欧式距离对应的信号可作为对发射信号的估计。

    数学表达式为:

mimo天线数据设计,MIMO,空间调制,matlab

不难看出最大似然检测算法就是计算每一个Y与集合空间中的序列一一比较,找出对X的估计,这样它的复杂度随发射天线数目呈指数增加,运算量也会随之增大

8.排列串行干扰抵消(OSIC)检测原理

OSIC的基本思想为:在接收端按顺序检测每一个信号,每次检测出一个信号,然后将该信号从接收信号中消除。在实现干扰消除步骤时,前一步的检测性能会对后一步的检测性能造成直接影响。若前一步的检测结果正确,那么下一步检测性能的可靠性将得到改善;若前一步检测结果不正确,这样的错误造成的影响被传到下一步,从而造成下一步检测结果的准确率降低,这就是误差传播现象,因此进行检测时,要确定好检测顺序。

检测过程:

a.求出第k1层对应的加权向量wk1,则第k1层的判决量为rk1=wk1TY,对其判决,得到第k1层发射信号的估计值xk1

b.实现干扰消除,在接收信号Y中剪掉xk1的影响,可得到Y2=Y-xk1Hk1

c.求与k2层对应的加权向量wk2,则第k2层信号的判决量为rk2=wk2TY2,得到第k1层发射信号的估计值xk2

重复上述步骤便可得到每层的发射信号

部分代码展示

(一)SISO代码分析

mimo天线数据设计,MIMO,空间调制,matlab

对信号进行调制与归一化处理,重组发送信号。设计信道与高斯白噪声,使其归一化,信号过系统,得到接收信号y。

mimo天线数据设计,MIMO,空间调制,matlab

通过最大似然估计得到最小距离,然后分路恢复出发送信号。与原始信号对比,计算BER并绘制图像。

(二)MIMO空时编码分析

mimo天线数据设计,MIMO,空间调制,matlab

利用两个时隙组成一个发射信号矩阵X1,设计信道与噪声,得到R1,接收方两个天线都可以接收发射方两个天线的发射组合,最后利用接收信号矩阵与信道矩阵进行解耦合得到y11和y22。

(三)MIMO空间调制分析

mimo天线数据设计,MIMO,空间调制,matlab

仿真2发2收的空间调制系统,由于附带天线索引,一个信息段长度为1bit天线索引+2bit信息长度。

mimo天线数据设计,MIMO,空间调制,matlab

空间调制的具体实现,每个数据段第一个bit用来选择天线,0-第一根,1-第二根。后两位用来进行QPSK调制为复数信号,最后生成2行1列的发送output。

(四)ML检测代码分析

mimo天线数据设计,MIMO,空间调制,matlab

根据QPSK的星座图,得到00、01、10、11所在值并对其进行归一化处理。让接收信号y分别与这四个过h的星座点比较大小,将结果储存在V中,再求出最小距离y_d。

mimo天线数据设计,MIMO,空间调制,matlab

同理,16QAM的原理与QPSK大体相同。将16个星座点储存在J中,让接收信号y分别与这16个过h的星座点比较大小,将结果储存在V中,再求出最小距离y_d,不同之处还体现在归一化。

mimo天线数据设计,MIMO,空间调制,matlab

对于空间调制的检验,也是利用ML检验算法,由于为2发2收的系统,加上天线索引,所以需要8组数来比对。

mimo天线数据设计,MIMO,空间调制,matlab

 三 结果分析

(一)MIMO调制方式对比

mimo天线数据设计,MIMO,空间调制,matlab

图11 MIMO调制方式对比

2x2的MIMO系统,采用格雷映射,调制方式分别为BPSK和QPSK两种情况,BPSK和QPSK两种情况下的SNR-BER性能曲线。

分析:由理论分析及结果可知,在相同信号速率下,使用BPSK比QPSK的BER要低,由于仿真数量设置不当,导致在高信噪比时曲线不平滑,出现了阶跃点。

(二)SISO与MIMO对比

mimo天线数据设计,MIMO,空间调制,matlab

图12  MIMO的BPSK与SISO的QPSK对比

SISO系统采取单发单收,QPSK调制;MIMO系统采取2发2收,BPSK调制。接收端都采用最大似然接收。

分析:由理论分析及结果可知,MIMO的BPSK与SISO的QPSK对比,MIMO的BPSK比SISO的QPSK的抗干扰性能要好。

mimo天线数据设计,MIMO,空间调制,matlab

图13  MIMO的QPSK与SISO的16QAM对比

SISO系统采取单发单收,16QAM调制;MIMO系统采取2发2收,QPSK调制。接收端都采用最大似然接收。

分析:由理论分析及结果可知,MIMO的QPSK与SISO的16QAM对比,MIMO的QPSK比SISO的16QAM的抗干扰性能要好。

(三)不同接收方式的对比

mimo天线数据设计,MIMO,空间调制,matlab

图14  ZF算法与MMSE算法对比

MIMO系统采取2发2收,BPSK调制,接收端采用ZF检验与MMSE检验。

分析:对比线性检测算法的优劣,由于ML为非线性,性能会优于线性检测算法。通过图像对比,我们可以看出在信噪比相同的情况下使用MMSE检测的性能会比ZF检测性能要好并且不管是在高信噪比还是低信噪比MMSE算法性能都是更好的,这主要是由于MMSE算法综合考虑了天线之间的干扰和噪声造成的影响,实质上是对ZF检测进行修正,使其性能更好。文章来源地址https://www.toymoban.com/news/detail-806988.html

MATLAB代码展示

%%%%qpskb调制函数
function[a,b,c,d,e]=qpskmod(x)
datasize=x;
%生成10000个01/11/00/10的随机数列作为初始信号  
r=randi([0,1],1,datasize);
%分成两列,第一列代表实部,第二列代表虚部
s=reshape(r,datasize/2,2);
rs=s;
e=zeros(1,datasize);
for k=1:1:datasize
    if mod(k,2)==1
        e(k)=rs((k+1)/2,1);
    else if mod(k,2)==0
        e(k)=rs(k/2,2);
        end
    end
end
%按星座图对信号进行调制
for i=1:1:datasize/2
    if (s(i,1)==1 && s(i,2)==1)
        s(i,1)=-1;
        s(i,2)=-1;
    end
    if (s(i,1)==0 && s(i,2)==1)
        s(i,1)=-1;
%%%%%%%%%%%mimo空时编码与空间分集对比%%%%%%%%

%%%%%%空时编码%%%%%

%%%%% QPSK %%%%%%

clear all;

close all;

SNR=0:1:30;

snr=10.^(SNR/10);

sigma=sqrt(1./snr);%噪声与信号的幅度比值

K=3200;%未调制信号长度,信号越长,曲线越精确

%%%%%%%%%%%%%%%%%%%%设置参数%%%%%%%%%%%%%%%%%%%%%%%%

nt=2;%发射天线数

nr=2;%接收天线数

n=4; %调制方式QPSK

%%%%%%%%%%%%%%%%%%%%NPSK信号调制%%%%%%%%%%%%%%%%%%%%

[a,b,c,q,e]=qpskmod(K);

npskdata1=(1/sqrt(2))*(c+sqrt(-1)*q);

x=reshape(npskdata1,1,K/2);

%%%%%%%%%%%%%%%%%%%Alamouti%%%%%%%%%%%%%%%%%%%%%%%%

for k=1:length(SNR)

error_symbol=0;%对每一个信噪比下的误符号率清零

for i=1:length(npskdata1)/2

x11=x(2*i-1);

x12=x(2*i);

X1=[x11 -x12';x12 x11'];

%信道

H1=zeros(nr,nt);

R=eye(nr*nt);

X=randn(nr*nt,1)/sqrt(2)+1i*randn(nr*nt,1)/sqrt(2);

X1=reshape(X,nr,nt);

H1=reshape(R*X,nr,nt);

noise1=sigma(k).*H1;

R1=sqrt(1/2).*H1*X1+noise1;%接收信号矩阵

y11=0;y12=0;

for i=1:nr

y11=H1(i,1)'*R1(i,1)+H1(i,2)*R1(i,2)'+y11;

y12=H1(i,2)'*R1(i,1)-H1(i,1)*R1(i,2)'+y12;

end

%进行最大似然检测

DEC_X=judge(n,y11,y12);

%统计符号错误的总数

a=DEC_X(1);

b=a+a';

c=a-a'

if b>0

b=0;

else

b=1;

end

if c>0

c=0;

else

c=1;

end

j(1)=b;

j(2)=c;

a=DEC_X(2);

b=a+a';

c=a-a';

if b>0

b=0;

else

b=1;

end

if c>0

c=0;

else

c=1;

end

j1(1)=b;

j1(2)=c;

if j~=f;

error_symbol=error_symbol+1;

end

if j1~=f1;

error_symbol=error_symbol+1;

end

end

SER1(k)=error_symbol/length(npskdata1);

end

%%%%%%%空间分集%%%%%

%%mimo,QPSK

NT = 2; %发射天线数目

NR = 2; %接收天线数目

N=4;%%每次模拟发送的比特数,每次模拟的信道h认为是一致的

Eb_N0_dB=[0:1:30]; %设置信号能量,即信噪比

Eb_N0_dB1=10.^(Eb_N0_dB/10);

sigma2=sqrt(1./Eb_N0_dB1);%噪声与信号的幅度比值

Nerror_bpsk_mimo=zeros(1,length(Eb_N0_dB)); %储存误码率

m=800;

%上下两种方式符号数 上总符号数=下M*n

for k = 1:length(Eb_N0_dB)

for x=1:m %100蒙特卡洛模拟 求每次误码率的平均值

send_bit0=rand(1,N)>0.5; %%产生等概率的bit序列

p0=send_bit0(1:2:N);

q0=send_bit0(2:2:N);

p=p0*2-1;

q=q0*2-1;

signal_sent = p+sqrt(-1)*q; %QPSK信号生成

%%信道模拟

sMod = kron(signal_sent,ones(NR,1)); %构造成两行一样的数据流

sMod = reshape(sMod,[NR,NT,N/2/NT]); %产生NTxNRxN/NT矩阵

h = 1/sqrt(2)*[randn(NR,NT,N/2/NT) + i*randn(NR,NT,N/2/NT)]; %复高斯信道,信道归一化

n = 1/sqrt(2)*[randn(NR,N/2/NT) + i*randn(NR,N/2/NT)]; %产生高斯白噪声,噪声能量归一化

% n=A;

y = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*sMod,2)) +n;%*sigma2(k); %将产生的信号在信道上传输并加入高斯噪声

% ML检测

s1 = [-1-1i -1-1i]; %当QPSK调制后的四个符号为-1 -1 -1 -1时

s1 = repmat(s1,[1 ,N/2/2]);

s1Mod = kron(s1,ones(NR,1));

s1Mod = reshape(s1Mod,[NR,NT,N/2/NT]);

z1 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s1Mod,2)) ;%信道增益h与传输的信号相乘并求和

J1 = sum(abs(y - z1),1); %求出欧氏距离

s2 = [-1-1i -1+1i];

s2 = repmat(s2,[1 ,N/2/2]);

s2Mod = kron(s2,ones(NR,1));

s2Mod = reshape(s2Mod,[NR,NT,N/2/NT]);

z2 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s2Mod,2)) ;

J2 = sum(abs(y - z2),1);

s3 = [-1-1i 1-1i];

s3 = repmat(s3,[1 ,N/4]);

s3Mod = kron(s3,ones(NR,1));

s3Mod = reshape(s3Mod,[NR,NT,N/2/NT]);

z3 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s3Mod,2)) ;

J3 = sum(abs(y - z3),1);

s4 = [-1-1i 1+1i];

s4 = repmat(s4,[1 ,N/4]);

s4Mod = kron(s4,ones(NR,1));

s4Mod = reshape(s4Mod,[NR,NT,N/2/NT]);

z4 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s4Mod,2)) ;

J4 = sum(abs(y - z4),1);

s5 = [-1+1i -1-1i];

s5 = repmat(s5,[1 ,N/4]);

s5Mod = kron(s5,ones(NR,1));

s5Mod = reshape(s5Mod,[NR,NT,N/2/NT]);

z5 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s5Mod,2)) ;

J5 = sum(abs(y - z5),1);

s6 = [-1+1i -1+1i];

s6 = repmat(s6,[1 ,N/4]);

s6Mod = kron(s6,ones(NR,1));

s6Mod = reshape(s6Mod,[NR,NT,N/2/NT]);

z6 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s6Mod,2)) ;

J6 = sum(abs(y - z6),1);

s7 = [-1+1i 1-1i];

s7 = repmat(s7,[1 ,N/4]);

s7Mod = kron(s7,ones(NR,1));

s7Mod = reshape(s7Mod,[NR,NT,N/2/NT]);

z7 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s7Mod,2)) ;

J7 = sum(abs(y - z7),1);

s8 = [-1+1i 1+1i];

s8 = repmat(s8,[1 ,N/4]);

s8Mod = kron(s8,ones(NR,1));

s8Mod = reshape(s8Mod,[NR,NT,N/2/NT]);

z8 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s8Mod,2)) ;

J8 = sum(abs(y - z8),1);

s9 = [1-1i -1-1i];

s9 = repmat(s9,[1 ,N/4]);

s9Mod = kron(s9,ones(NR,1));

s9Mod = reshape(s9Mod,[NR,NT,N/2/NT]);

z9 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s9Mod,2)) ;

J9 = sum(abs(y - z9),1);

s10 = [1-1i -1+1i];

s10 = repmat(s10,[1 ,N/4]);

s10Mod = kron(s10,ones(NR,1));

s10Mod = reshape(s10Mod,[NR,NT,N/2/NT]);

z10 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s10Mod,2)) ;

J10 = sum(abs(y - z10),1);

s11 = [1-1i 1-1i];

s11 = repmat(s11,[1 ,N/4]);

s11Mod = kron(s11,ones(NR,1));

s11Mod = reshape(s11Mod,[NR,NT,N/2/NT]);

z11 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s11Mod,2)) ;

J11 = sum(abs(y - z11),1);

s12 = [1-1i 1+1i];

s12 = repmat(s12,[1 ,N/4]);

s12Mod = kron(s12,ones(NR,1));

s12Mod = reshape(s12Mod,[NR,NT,N/2/NT]);

z12 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s12Mod,2)) ;

J12 = sum(abs(y - z12),1);

s13 = [1+1i -1-1i];

s13 = repmat(s13,[1 ,N/4]);

s13Mod = kron(s13,ones(NR,1));

s13Mod = reshape(s13Mod,[NR,NT,N/2/NT]);

z13 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s13Mod,2)) ;

J13 = sum(abs(y - z13),1);

s14 = [1+1i -1+1i];

s14 = repmat(s14,[1 ,N/4]);

s14Mod = kron(s14,ones(NR,1));

s14Mod = reshape(s14Mod,[NR,NT,N/2/NT]);

z14 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s14Mod,2)) ;

J14 = sum(abs(y - z14),1);

s15 = [1+1i 1-1i];

s15 = repmat(s15,[1 ,N/4]);

s15Mod = kron(s15,ones(NR,1));

s15Mod = reshape(s15Mod,[NR,NT,N/2/NT]);

z15 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s15Mod,2)) ;

J15 = sum(abs(y - z15),1);

s16 = [1+1i 1+1i];

s16 = repmat(s16,[1 ,N/4]);

s16Mod = kron(s16,ones(NR,1));

s16Mod = reshape(s16Mod,[NR,NT,N/2/NT]);

z16 = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*s16Mod,2)) ;

J16= sum(abs(y - z16),1);

V = [J1;J2;J3;J4;J5;J6;J7;J8;J9;J10;J11;J12;J13;J14;J15;J16];%所有的欧氏距离度量

[j d] = min(V,[],1); %选择最小的欧氏距离度量,并记录编号

ref = [0,0,0,0; 0,0,0,1; 0,0,1,0; 0,0,1,1;

0,1,0,0; 0,1,0,1; 0,1,1,0; 0,1,1,1;

1,0,0,0; 1,0,0,1; 1,0,1,0; 1,0,1,1;

1,1,0,0; 1,1,0,1; 1,1,1,0; 1,1,1,1];

bit_ML=zeros(1,N);

bit_ML(1:4:end) = ref(d,1);

bit_ML(2:4:end) = ref(d,2);

bit_ML(3:4:end) = ref(d,3);

bit_ML(4:4:end) = ref(d,4);

a=bit_ML-send_bit0;

Nerror_bpsk_mimo(k)=Nerror_bpsk_mimo(k)+sum(sum(a~=0));%统计错误的比特数

end

Nerror_bpsk_mimo;

p_nerror=Nerror_bpsk_mimo/(m*N);

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%空间复用%%%%%%

Nt = 2; %发射天线数

Nr = 2; %接收天线数

N = 8; %每帧的长度制方式为QPSK

L = 4000; %仿真的总帧数

EbN0 = 0:1:30;

M = 4; %QPSK调制

x = randi([0,1],N*L,Nt); %信源数据

s = pskmod(x,M,pi/4); %QPSK调制

for index=1:length(EbN0)

x1 = [];

x2 = [];

x3 = [];

for index1 = 1:L

h = randn(Nt,Nr)+j*randn(Nt,Nr); %Rayleigh衰落信道

h = h./sqrt(2); %信道系数归一化

sigma1 = sqrt(1/2)*sqrt(1/(10.^(EbN0(index)/10))); %每根接收天线的高斯白噪声标准差

n = sigma1*(randn(N,Nr)+1j*randn(N,Nr)); %每根接收天线的高斯白噪声

%******************** 信号通过信道 ****************%

y = s((index1-1)*N+1:index1*N,:)*h+n;

%******************* 接收端处理 **************%

%%%%%假设已经通过信道估计知道了h,均不考虑干扰消除

%%%% MMSE检测

yy = y;

wmmse = h'*inv(h*h'+2*sigma1.^2*diag(ones(1,Nt)));

y1 = y*wmmse; %MMSE检测

temp1 = pskdemod(y1,M,pi/4); %解调

x1 = [x1;temp1];

%%%% ZF检测

wzf = h'*inv(h*h');

y2 = y*wzf; %ZF检测

temp2 = pskdemod(y2,M,pi/4); %解调

x2 = [x2;temp2];

end

[temp3,ber1(index)] = biterr(x,x1,log2(M)); %MMSE检测时的系统误码

[temp4,ber2(index)] = biterr(x,x2,log2(M)); %ZF检测时的系统误码

end

%%%%%%瑞利衰信道下,QPSK理论误码率

% EbN0 = 3:1:10;

for i = 1:length(EbN0)

EbN0_l(1,i) = 10^(EbN0(1,i)/10);

ber3(1,i) = (1/2) *(1-sqrt(EbN0_l(1,i)./(EbN0_l(1,i)+1)));

end

figure(1)

semilogy(EbN0,ber1,'-ko',EbN0,ber2,'-ro',EbN0,ber3,'-go');

title('MIMO不同算法检测性能')

legend('MMSE算法','ZF算法', '理论值')

xlabel('比特信噪比Eb/N0')

ylabel('误比特率(BER)')

grid on

%%%%%%***************** 实验结论 ************************%%%

%%%%%% MMSE算法明显好于ZF

%%%%%绘图比较%%%%%

figure(2)

semilogy(SNR,SER1,'*-','LineWidth',1);

hold on;

semilogy(Eb_N0_dB,p_nerror,'+-','LineWidth',1);

hold on;

semilogy(Eb_N0_dB,ber1,'o-','LineWidth',1);

axis([0 25 -10^-5 0.2])

grid on

xlabel('信噪比(SNR)/dB');

ylabel('误码率');

title('mimo方式对比');

%---------SM系统仿真------------------

nTx=8;

nRx=8;

n_sm=1;

M=4;

SNR_dB=0:3:30;

L=log2(nTx)+log2(M); %一帧的长度

N=10000;%帧数

length_as=log2(nTx);

length_bit=log2(M);

BER=zeros(1,length(SNR_dB));

rho_r=0.4;

K=1;

err=0;

for i=1:length(SNR_dB)

SNR=SNR_dB(i)

rou=10^(SNR/10);%the average signal to noise ratio (SNR) at each receive antenna

N0=n_sm/rou;

err_num=0;

for k=1:N

%----------------SM调制---------------%

x=zeros(1,L);

x=rand(1,L)>0.5;

output=s_mod(x,length_bit,M,length_as,L);%sm调制函数

%-----------------信道------------------%

% H=(1/sqrt(2))*(randn(nRx,nTx) + 1i*randn(nRx,nTx));

% n=(sqrt(N0/2))*(randn(nRx,n_sm)+ 1i*randn(nRx,n_sm));

H=Generalized_Channel(nRx,nTx,rho_r,K,err);

n=1/sqrt(2)*(randn(nRx,n_sm) + 1i*randn(nRx,n_sm));% AWGN

%---------------过信道------------------%

% y= H *output'

y= H *output' + (sqrt(N0))*n ;

%----------------ML检测-----------------%

y_detect=ml_dectect(y,H,length_as,length_bit,M,L);

%---------------误比特-------------------%

err_bit=length(find(y_detect~=x));

err_num=err_num+err_bit;

end

BER(i)=err_num/L/N;

end

hold on;

semilogy(SNR_dB,BER,'g-*');%y轴对数形式作图

legend('空时编码','空间分集','空间复用','空间调制')

X1

R1

H1

H1(1,1)'

到了这里,关于MIMO大规模天线阵列原理与matlab仿真(含GUI)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大规模语言模型--LLaMA 家族

    LLaMA 模型集合由 Meta AI 于 2023 年 2 月推出, 包括四种尺寸(7B 、13B 、30B 和 65B)。由于 LLaMA 的 开放性和有效性, 自从 LLaMA 一经发布, 就受到了研究界和工业界的广泛关注。LLaMA 模型在开放基准的各 种方面都取得了非常出色的表现, 已成为迄今为止最流行的开放语言模型。大

    2024年04月25日
    浏览(43)
  • LLaMA(大规模机器学习和分析)

    LLaMA(大规模机器学习和分析)是一个先进的软件平台,是Meta 推出 AI 语言模型 LLaMA,一个有着 上百亿数量级参数的大语言模型用于大规模部署和管理机器学习模型。借助LLaMA,组织可以高效地在大型数据集上训练和部署模型,缩短投放市场的时间,并提高预测模型的准确性。

    2024年02月11日
    浏览(54)
  • 基于Spark的大规模日志分析

    摘要: 本篇文章将从一个实际项目出发,分享如何使用 Spark 进行大规模日志分析,并通过代码演示加深读者的理解。 本文分享自华为云社区《【实战经验分享】基于Spark的大规模日志分析【上进小菜猪大数据系列】》,作者:上进小菜猪。 随着互联网的普及和应用范围的扩

    2024年02月09日
    浏览(54)
  • 服务器单机大规模数据存储方案

    大规模数据存储都需要解决三个核心问题: 1.数据存储容量的问题,既然大数据要解决的是数据 PB 计的数据计算问题,而一般的服务器磁盘容量通常 1~2TB,那么如何存储这么大规模的数据呢? 2.数据读写速度的问题,一般磁盘的连续读写速度为几十 MB,以这样的速度,几十

    2024年02月11日
    浏览(55)
  • 云计算:如何访问和分析大规模数据

    作者:禅与计算机程序设计艺术 随着云计算平台的不断发展,越来越多的企业将他们的数据、应用和服务部署在云端,希望借助云计算的能力来提升效率、降低成本、提高竞争力。但是同时也带来了数据安全、隐私保护、数据可靠性等方面的挑战。对于企业而言,如何更好地

    2024年02月15日
    浏览(45)
  • etcd实现大规模服务治理应用实战

         导读 :服务治理目前越来越被企业建设所重视,特别现在云原生,微服务等各种技术被更多的企业所应用,本文内容是百度小程序团队基于大模型服务治理实战经验的一些总结,同时结合当前较火的分布式开源kv产品etcd,不仅会深入剖析ectd两大核心技术Raft与boltdb的实

    2024年02月12日
    浏览(48)
  • ChatGPT大规模封锁亚洲地区账号

    我是卢松松,点点上面的头像,欢迎关注我哦! 在毫无征兆的情况下,从3月31日开始OpenAI大规模封号,而且主要集中在亚洲地区,特别是ip地址在台湾、日本、香港三地的,命中率目测40%。新注册的账号、Plus也不好使了。 如果你登陆的时候出现“提示无法加载历史信息”或

    2023年04月09日
    浏览(60)
  • 利用Python进行大规模数据处理

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 随着数据量的不断增长,大规模数据处理变得越来越重要。在这个领域,Hadoop和Spark是两个备受关注的技术。本文将介绍如何利用Python编程语

    2024年04月24日
    浏览(39)
  • 大规模场景下对Istio的性能优化

    当前istio下发xDS使用的是全量下发策略,也就是网格里的所有sidecar(envoy),内存里都会有整个网格内所有的服务发现数据。这样的结果是,每个sidecar内存都会随着网格规模增长而增长。 aeraki-mesh项目下有一个子项目专门用来处理istio配置分发性能问题,我们找到该项目: http

    2024年02月10日
    浏览(48)
  • 高防服务器如何抵御大规模攻击

    高防服务器如何抵御大规模攻击?高防服务器是一种专门设计用于抵御大规模攻击的服务器,具备出色的安全性和可靠性。在当今互联网时代,网络安全问题日益严重,DDOS攻击(分布式拒绝服务攻击)等高强度攻击已成为威胁企业和组织网络安全的重要问题。为了保护网站和

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包