一 設(shè)計(jì)實(shí)現(xiàn)流程
1.MIMO系統(tǒng)原理
傳統(tǒng)的無線通信系統(tǒng)是采用一個發(fā)送天線和一個接收天線的通信系統(tǒng),即單輸入單輸出(SISO)天線系統(tǒng)。但由于單天線系統(tǒng)的信道容量較低,不能滿足4G、5G數(shù)據(jù)傳輸需求,由香農(nóng)公式可知,提高信道容量有兩種方式,一是增大帶寬,二是提高信噪比(增大發(fā)射功率)。但由于頻譜資源比較珍稀,多徑效應(yīng)等緣故,增大帶寬方式并不實(shí)用;而增大帶寬帶來的增益十分有限,顯得并不劃算。鑒于以上原因,MIMO應(yīng)運(yùn)而生,在功率和帶寬受限的情況下,通過增加天線數(shù)量來充分利用無線信道的空間資源,使單路傳輸變?yōu)槎嗦穫鬏?,從而提高信道容量。一個MIMO信道可以轉(zhuǎn)換成多個并行的相互獨(dú)立的信道,可見MIMO并不違背香農(nóng)公式,且通過增加天線充分利用無線信道提高了信道總?cè)萘俊?/p>
圖1 MIMO系統(tǒng)模型
MIMO系統(tǒng)就是多個信號流在空中的并行傳輸。在發(fā)射端輸入的數(shù)據(jù)流變成幾路并行的符號流,分別從Mt個天線同時(shí)發(fā)射出去;接收端從Mr個接收天線將信號接收下來,恢復(fù)原始信號。多個信號流可以是不同的數(shù)據(jù)流,也可以是同一個數(shù)據(jù)流的不同版本。不同的數(shù)據(jù)流就是不同的信息同時(shí)發(fā)射,意味著信息傳送效率的提升,提高了無線通信的效率。(如空分復(fù)用)
同一個數(shù)據(jù)流的不同版本,就是同樣的信息,不同的表達(dá)方式,并行發(fā)射出去,確保接受端收到信息的準(zhǔn)確,提高信息傳送的可靠性。(如空間分集)
為提高信息傳送效率的工作模式,就是MIMO的復(fù)用模式;為提高信息傳送可靠性的工作模式,就是MIMO的分集模式。
圖2 MIMO系統(tǒng)優(yōu)勢
2.SISO實(shí)現(xiàn)
傳統(tǒng)天線系統(tǒng)的結(jié)構(gòu)框圖是系統(tǒng)模型,主要用到信號與信道的調(diào)制,以及噪聲的一個調(diào)制,接收端解調(diào)用到最大似然解調(diào)。
3.空時(shí)編碼原理
空時(shí)編碼主要應(yīng)用于多發(fā)射天線中,信號同時(shí)在不同的天線上發(fā)射,或者被不同的天線接收,獲得空間分集,信號在不同的時(shí)間在相同的子信道上進(jìn)行傳輸,獲得時(shí)間分集,時(shí)域上的分隔和地理位置上的分隔產(chǎn)生了空時(shí)特性,接收天線可以收到該發(fā)射信號的數(shù)個拷貝,并對接收到的多個數(shù)據(jù)進(jìn)行合并檢測,提高了傳輸可靠程度。因此空時(shí)編碼不僅減少了誤碼率,還能提高頻帶利用率,于是系統(tǒng)容量隨即提高。本實(shí)驗(yàn)主要介紹Alamouti方案。
在Alamouti方案中,對于在兩個時(shí)隙連續(xù)發(fā)送的兩個符號x1和x2,第一個發(fā)射天線和第二個發(fā)射天線在第一個時(shí)隙分別發(fā)送的是x1,x2,第一個發(fā)射天線和第二個發(fā)射天線在第二個時(shí)隙分別發(fā)送的是-x2*,x1*,下圖為發(fā)射過程。
圖4 Alamouti方案
該傳輸方案通常由矩陣表示,矩陣的每一列代表一個時(shí)隙,每一行代表一個天線隨著時(shí)間的傳輸,所以天線的發(fā)射序列如下
Alamouti方案中最主要特征是兩根發(fā)射天線上的發(fā)射序列是相互正交的。
圖5 接收機(jī)流程圖
接收信號矢量表示如下
Alamouti方案在發(fā)射天線為2接收天線為1的情況下能夠獲得最大的分集增益2。即使接收端沒有多根天線,同樣能夠獲得空間分集增益,從而使該方案很有價(jià)值。
4.空間調(diào)制原理
空間調(diào)制是一種多天線多維調(diào)制技術(shù)。其原理是輸入比特流經(jīng)發(fā)射端后分成兩個部分:一個部分信息映射到調(diào)制發(fā)射天線序號;另外一個部分映射到調(diào)制發(fā)射天線符號,該系統(tǒng)將天線維度作為第三維,讓天線的選擇部分同時(shí)攜帶大量信息,充分利用空間資源。
圖6 空間調(diào)制無線通信系統(tǒng)
每個時(shí)刻只有一根天線激活來發(fā)送數(shù)據(jù)輸入比特信息中有l(wèi)og2Nt比特用于選擇發(fā)送天線,剩余的用于傳輸符號映射,發(fā)射天線和調(diào)制階數(shù)決定了系統(tǒng)的傳輸速率。下圖為4天線的發(fā)射實(shí)例。
?
?????? 圖7 發(fā)射實(shí)例????????????????????? 圖8 發(fā)射天線三維圖
空間調(diào)制的發(fā)射向量只有一個是非零元素,接收信號為
Y=Hx+n
接收天線和發(fā)送天線的信道增益H為
H=[h1 ... hj ... hNi]
式中,信道矩陣H中元素均值為0,方差為1,n表示N維噪聲向量,對于發(fā)射信號的檢測即為相應(yīng)的發(fā)射天線及其傳輸?shù)姆枴?/p>
綜上,空時(shí)編碼設(shè)計(jì)簡單巧妙,是一種有效的發(fā)射分集技術(shù),雖然能夠較好地提升系統(tǒng)的性能,但是數(shù)據(jù)的傳輸速率相對較低,是一種犧牲速率來提高性能的傳輸方案。
5.采用迫零算法(ZF)檢測原理
迫零檢測算法是最簡單的一種空時(shí)信號處理接收技術(shù),可以消除所有的乘性干擾和信號之間的干擾,其對信號的處理包含三個步驟:迫零、干擾抵消和信號補(bǔ)償。迫零處理方法通過迫零向量來消除信道的乘性干擾,并消除沒有被檢測出的接收信號分量的干擾;干擾抵消就是在接收信號向量中消除已經(jīng)被估計(jì)出的部分信號成分,從而消除該信號對未檢測出來的信號成分的干擾;為確定信號的檢查順序,需要對其進(jìn)行信號補(bǔ)償。
迫零檢測的主要目的是尋找一個加權(quán)矩陣,乘以接收端的信號,然后將所得結(jié)果經(jīng)判決后可作為對X的估計(jì)。
可以得到ZF檢驗(yàn)結(jié)果為:
迫零檢測復(fù)雜度低,消除了不同天線之間的干擾,將不同的數(shù)據(jù)流進(jìn)行分離,但是以增強(qiáng)噪聲作為代價(jià),造成了檢測性能較差。
6.采用最小均方誤差(MMSE)檢測原理
相比于同為線性檢測方法的迫零檢測,MMSE檢測可以綜合考慮符號間干擾和噪聲對算法性能的影響。其基本原理就是最小化檢測器的輸出估計(jì)和實(shí)際發(fā)送的符號之間的均方誤差。通過加權(quán)矩陣
可以得到估計(jì)信號為:
由于考慮了噪聲的影響,MMSE檢驗(yàn)算法的性能要優(yōu)于ZF檢測,它綜合考慮了天線之間的干擾和噪聲造成的影響,實(shí)質(zhì)上是對ZF檢測進(jìn)行修正,其修正值與噪聲方差成正比,從而既能消除天線之間的干擾,又能克服噪聲的增強(qiáng)。
7.采用最大似然(ML)檢測原理
最大似然檢測算法作為V-BLAST系統(tǒng)最優(yōu)的檢測算法其基本思想是:在接收端保存所有發(fā)射端可能發(fā)送的符號向量,在接收端計(jì)算接收到的發(fā)射信號與所保存的所有發(fā)射端向量在接收空間的映射之間的歐式距離,從而最小歐式距離對應(yīng)的信號可作為對發(fā)射信號的估計(jì)。
??? 數(shù)學(xué)表達(dá)式為:
不難看出最大似然檢測算法就是計(jì)算每一個Y與集合空間中的序列一一比較,找出對X的估計(jì),這樣它的復(fù)雜度隨發(fā)射天線數(shù)目呈指數(shù)增加,運(yùn)算量也會隨之增大
8.排列串行干擾抵消(OSIC)檢測原理
OSIC的基本思想為:在接收端按順序檢測每一個信號,每次檢測出一個信號,然后將該信號從接收信號中消除。在實(shí)現(xiàn)干擾消除步驟時(shí),前一步的檢測性能會對后一步的檢測性能造成直接影響。若前一步的檢測結(jié)果正確,那么下一步檢測性能的可靠性將得到改善;若前一步檢測結(jié)果不正確,這樣的錯誤造成的影響被傳到下一步,從而造成下一步檢測結(jié)果的準(zhǔn)確率降低,這就是誤差傳播現(xiàn)象,因此進(jìn)行檢測時(shí),要確定好檢測順序。
檢測過程:
a.求出第k1層對應(yīng)的加權(quán)向量wk1,則第k1層的判決量為rk1=wk1TY,對其判決,得到第k1層發(fā)射信號的估計(jì)值xk1
b.實(shí)現(xiàn)干擾消除,在接收信號Y中剪掉xk1的影響,可得到Y(jié)2=Y-xk1Hk1
c.求與k2層對應(yīng)的加權(quán)向量wk2,則第k2層信號的判決量為rk2=wk2TY2,得到第k1層發(fā)射信號的估計(jì)值xk2
重復(fù)上述步驟便可得到每層的發(fā)射信號
部分代碼展示
(一)SISO代碼分析
對信號進(jìn)行調(diào)制與歸一化處理,重組發(fā)送信號。設(shè)計(jì)信道與高斯白噪聲,使其歸一化,信號過系統(tǒng),得到接收信號y。
通過最大似然估計(jì)得到最小距離,然后分路恢復(fù)出發(fā)送信號。與原始信號對比,計(jì)算BER并繪制圖像。
(二)MIMO空時(shí)編碼分析
利用兩個時(shí)隙組成一個發(fā)射信號矩陣X1,設(shè)計(jì)信道與噪聲,得到R1,接收方兩個天線都可以接收發(fā)射方兩個天線的發(fā)射組合,最后利用接收信號矩陣與信道矩陣進(jìn)行解耦合得到y(tǒng)11和y22。
(三)MIMO空間調(diào)制分析
仿真2發(fā)2收的空間調(diào)制系統(tǒng),由于附帶天線索引,一個信息段長度為1bit天線索引+2bit信息長度。
空間調(diào)制的具體實(shí)現(xiàn),每個數(shù)據(jù)段第一個bit用來選擇天線,0-第一根,1-第二根。后兩位用來進(jìn)行QPSK調(diào)制為復(fù)數(shù)信號,最后生成2行1列的發(fā)送output。
(四)ML檢測代碼分析
根據(jù)QPSK的星座圖,得到00、01、10、11所在值并對其進(jìn)行歸一化處理。讓接收信號y分別與這四個過h的星座點(diǎn)比較大小,將結(jié)果儲存在V中,再求出最小距離y_d。
同理,16QAM的原理與QPSK大體相同。將16個星座點(diǎn)儲存在J中,讓接收信號y分別與這16個過h的星座點(diǎn)比較大小,將結(jié)果儲存在V中,再求出最小距離y_d,不同之處還體現(xiàn)在歸一化。
對于空間調(diào)制的檢驗(yàn),也是利用ML檢驗(yàn)算法,由于為2發(fā)2收的系統(tǒng),加上天線索引,所以需要8組數(shù)來比對。
?三?結(jié)果分析
(一)MIMO調(diào)制方式對比
圖11 MIMO調(diào)制方式對比
2x2的MIMO系統(tǒng),采用格雷映射,調(diào)制方式分別為BPSK和QPSK兩種情況,BPSK和QPSK兩種情況下的SNR-BER性能曲線。
分析:由理論分析及結(jié)果可知,在相同信號速率下,使用BPSK比QPSK的BER要低,由于仿真數(shù)量設(shè)置不當(dāng),導(dǎo)致在高信噪比時(shí)曲線不平滑,出現(xiàn)了階躍點(diǎn)。
(二)SISO與MIMO對比
圖12 ?MIMO的BPSK與SISO的QPSK對比
SISO系統(tǒng)采取單發(fā)單收,QPSK調(diào)制;MIMO系統(tǒng)采取2發(fā)2收,BPSK調(diào)制。接收端都采用最大似然接收。
分析:由理論分析及結(jié)果可知,MIMO的BPSK與SISO的QPSK對比,MIMO的BPSK比SISO的QPSK的抗干擾性能要好。
圖13? MIMO的QPSK與SISO的16QAM對比
SISO系統(tǒng)采取單發(fā)單收,16QAM調(diào)制;MIMO系統(tǒng)采取2發(fā)2收,QPSK調(diào)制。接收端都采用最大似然接收。
分析:由理論分析及結(jié)果可知,MIMO的QPSK與SISO的16QAM對比,MIMO的QPSK比SISO的16QAM的抗干擾性能要好。
(三)不同接收方式的對比
圖14? ZF算法與MMSE算法對比
MIMO系統(tǒng)采取2發(fā)2收,BPSK調(diào)制,接收端采用ZF檢驗(yàn)與MMSE檢驗(yàn)。文章來源:http://www.zghlxwxcb.cn/news/detail-806988.html
分析:對比線性檢測算法的優(yōu)劣,由于ML為非線性,性能會優(yōu)于線性檢測算法。通過圖像對比,我們可以看出在信噪比相同的情況下使用MMSE檢測的性能會比ZF檢測性能要好并且不管是在高信噪比還是低信噪比MMSE算法性能都是更好的,這主要是由于MMSE算法綜合考慮了天線之間的干擾和噪聲造成的影響,實(shí)質(zhì)上是對ZF檢測進(jìn)行修正,使其性能更好。文章來源地址http://www.zghlxwxcb.cn/news/detail-806988.html
MATLAB代碼展示
%%%%qpskb調(diào)制函數(shù)
function[a,b,c,d,e]=qpskmod(x)
datasize=x;
%生成10000個01/11/00/10的隨機(jī)數(shù)列作為初始信號
r=randi([0,1],1,datasize);
%分成兩列,第一列代表實(shí)部,第二列代表虛部
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
%按星座圖對信號進(jìn)行調(diào)制
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空時(shí)編碼與空間分集對比%%%%%%%%
%%%%%%空時(shí)編碼%%%%%
%%%%% QPSK %%%%%%
clear all;
close all;
SNR=0:1:30;
snr=10.^(SNR/10);
sigma=sqrt(1./snr);%噪聲與信號的幅度比值
K=3200;%未調(diào)制信號長度,信號越長,曲線越精確
%%%%%%%%%%%%%%%%%%%%設(shè)置參數(shù)%%%%%%%%%%%%%%%%%%%%%%%%
nt=2;%發(fā)射天線數(shù)
nr=2;%接收天線數(shù)
n=4; %調(diào)制方式QPSK
%%%%%%%%%%%%%%%%%%%%NPSK信號調(diào)制%%%%%%%%%%%%%%%%%%%%
[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
%進(jìn)行最大似然檢測
DEC_X=judge(n,y11,y12);
%統(tǒng)計(jì)符號錯誤的總數(shù)
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; %發(fā)射天線數(shù)目
NR = 2; %接收天線數(shù)目
N=4;%%每次模擬發(fā)送的比特?cái)?shù),每次模擬的信道h認(rèn)為是一致的
Eb_N0_dB=[0:1:30]; %設(shè)置信號能量,即信噪比
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;
%上下兩種方式符號數(shù) 上總符號數(shù)=下M*n
for k = 1:length(Eb_N0_dB)
for x=1:m %100蒙特卡洛模擬 求每次誤碼率的平均值
send_bit0=rand(1,N)>0.5; %%產(chǎn)生等概率的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)); %構(gòu)造成兩行一樣的數(shù)據(jù)流
sMod = reshape(sMod,[NR,NT,N/2/NT]); %產(chǎn)生NTxNRxN/NT矩陣
h = 1/sqrt(2)*[randn(NR,NT,N/2/NT) + i*randn(NR,NT,N/2/NT)]; %復(fù)高斯信道,信道歸一化
n = 1/sqrt(2)*[randn(NR,N/2/NT) + i*randn(NR,N/2/NT)]; %產(chǎn)生高斯白噪聲,噪聲能量歸一化
% n=A;
y = sqrt(0.5*10^(Eb_N0_dB(k)/10)).*squeeze(sum(h.*sMod,2)) +n;%*sigma2(k); %將產(chǎn)生的信號在信道上傳輸并加入高斯噪聲
% ML檢測
s1 = [-1-1i -1-1i]; %當(dāng)QPSK調(diào)制后的四個符號為-1 -1 -1 -1時(shí)
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與傳輸?shù)男盘栂喑瞬⑶蠛?
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));%統(tǒng)計(jì)錯誤的比特?cái)?shù)
end
Nerror_bpsk_mimo;
p_nerror=Nerror_bpsk_mimo/(m*N);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%空間復(fù)用%%%%%%
Nt = 2; %發(fā)射天線數(shù)
Nr = 2; %接收天線數(shù)
N = 8; %每幀的長度制方式為QPSK
L = 4000; %仿真的總幀數(shù)
EbN0 = 0:1:30;
M = 4; %QPSK調(diào)制
x = randi([0,1],N*L,Nt); %信源數(shù)據(jù)
s = pskmod(x,M,pi/4); %QPSK調(diào)制
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); %信道系數(shù)歸一化
sigma1 = sqrt(1/2)*sqrt(1/(10.^(EbN0(index)/10))); %每根接收天線的高斯白噪聲標(biāo)準(zhǔn)差
n = sigma1*(randn(N,Nr)+1j*randn(N,Nr)); %每根接收天線的高斯白噪聲
%******************** 信號通過信道 ****************%
y = s((index1-1)*N+1:index1*N,:)*h+n;
%******************* 接收端處理 **************%
%%%%%假設(shè)已經(jīng)通過信道估計(jì)知道了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); %解調(diào)
x1 = [x1;temp1];
%%%% ZF檢測
wzf = h'*inv(h*h');
y2 = y*wzf; %ZF檢測
temp2 = pskdemod(y2,M,pi/4); %解調(diào)
x2 = [x2;temp2];
end
[temp3,ber1(index)] = biterr(x,x1,log2(M)); %MMSE檢測時(shí)的系統(tǒng)誤碼
[temp4,ber2(index)] = biterr(x,x2,log2(M)); %ZF檢測時(shí)的系統(tǒng)誤碼
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
%%%%%%***************** 實(shí)驗(yàn)結(jié)論 ************************%%%
%%%%%% 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系統(tǒng)仿真------------------
nTx=8;
nRx=8;
n_sm=1;
M=4;
SNR_dB=0:3:30;
L=log2(nTx)+log2(M); %一幀的長度
N=10000;%幀數(shù)
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調(diào)制---------------%
x=zeros(1,L);
x=rand(1,L)>0.5;
output=s_mod(x,length_bit,M,length_as,L);%sm調(diào)制函數(shù)
%-----------------信道------------------%
% 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軸對數(shù)形式作圖
legend('空時(shí)編碼','空間分集','空間復(fù)用','空間調(diào)制')
X1
R1
H1
H1(1,1)'
到了這里,關(guān)于MIMO大規(guī)模天線陣列原理與matlab仿真(含GUI)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!