m瑞利信道下對比ZF-SIC,MMSE-SIC,MRC三種均衡算法的誤碼率matlab仿真

1.算法描述

移動(dòng)通信系統(tǒng)的性能在很大程度上決定于無線信道的特性。單發(fā)單收系統(tǒng)無線信道的特性已經(jīng)研究得很透徹,針對其各通信標(biāo)準(zhǔn)所采用的載頻、帶寬、環(huán)境等都有權(quán)威機(jī)構(gòu)給出實(shí)測的信道模型。對于多天線信道而言,許多單天線的概念都被繼承了下來,如路徑傳播損耗、陰影衰落、多徑衰落損耗、長期衰落、短期衰落、相干時(shí)間、相干帶寬、頻率選擇性衰落、平坦衰落等, 所采用的信道模型也基本都是單天線情況下的一些拓展。本實(shí)驗(yàn)采用獨(dú)立的慢衰落環(huán)境中的多輸入多輸出 MIMO 系統(tǒng),假設(shè)發(fā)送端的天線數(shù)目為Mt,接收端端的天線數(shù)目為 Mr。用hij表示從第 j 個(gè)發(fā)射天線到第 i 個(gè)接收天線的信道增益。接收天線i處的噪聲為ni,j=1,…, Mt ,i=1,…, Mr ;則第i個(gè)接收天線接收信號為:



系統(tǒng)工作流程如圖3-2下。首先V-BLAST系統(tǒng)在發(fā)射端通過串并轉(zhuǎn)換將數(shù)據(jù)流分解為Mt個(gè)子數(shù)據(jù)流,然后使用 QPSK 或 16QAM 對各路子信號流進(jìn)行調(diào)制, 將比特映射為符號;調(diào)制完成后,分別送到Mt個(gè)發(fā)射天線分別發(fā)射,在接收端用Mr個(gè)接收天線檢測信號。這里假設(shè)不論有多少個(gè)發(fā)送天線,系統(tǒng)的總發(fā)射功率是不變的,且總發(fā)射功率是平均分配到各個(gè)天線的。在接收端用Mr個(gè)接收天線檢測信號,并按照一定信號檢測與估計(jì)的方法進(jìn)行符號解調(diào),最后恢復(fù)出數(shù)據(jù)流(各個(gè)接收天線單獨(dú)進(jìn)行信號處理得到子數(shù)據(jù)流,最后需要并串轉(zhuǎn)換將子數(shù)據(jù)流合成為一個(gè)數(shù)據(jù)流)。假設(shè)發(fā)送天線之間、接收天線之間完全不相關(guān),且發(fā)送的數(shù)據(jù)也互相獨(dú)立。V-BLAST系統(tǒng)中接收天線的個(gè)數(shù)一般要大于或等于發(fā)送天線的個(gè)數(shù)。


關(guān)于接收機(jī)檢測與估計(jì)的方法,最直接的最大似然估計(jì)在MIMO信道中可直接采用線性檢測(按照ZF或MMSE準(zhǔn)則),也可采用非線性的干擾抵消檢測(如串行干擾抵消SIC)。


串行干擾抵消算法是一種非線性檢測算法。SIC的基本思想是在對多個(gè)符號進(jìn)行檢測與估計(jì)時(shí),如果能先對某個(gè)符號進(jìn)行檢測與估計(jì)解出這個(gè)符號,則在解另一個(gè)符號時(shí)可將已解出的符號對當(dāng)前待解符號的干擾消除,從而提高待解符號的SINR,提高檢測與估計(jì)的誤碼碼性能。對于Mt個(gè)發(fā)送符號,串行干擾抵消每次對一個(gè)符號進(jìn)行檢測與估計(jì),每次檢測時(shí),先消掉前面已經(jīng)解出的符號干擾,再對待解符號進(jìn)行檢測與估計(jì)(通常仍采用ZF或MMSE準(zhǔn)則對待解符號做線性變換),根據(jù)論文,我們此次實(shí)驗(yàn)采用ZF準(zhǔn)則做線性變換。因此對這Mt個(gè)發(fā)送符號在檢測與估計(jì)時(shí),共需要Mt步檢測判決,(且除掉第一步,其他每一步檢測之前都要利用已解出的符號做干擾抵消),這就存在對Mt個(gè)發(fā)送符號先對誰進(jìn)行檢測的排序問題。理論證明,當(dāng)Mt個(gè)發(fā)送符號使用相同星座圖時(shí),每一步都選擇接收SNR最大的符號,即對應(yīng)最優(yōu)的符號排序。


2.仿真效果預(yù)覽

matlab2022a仿真結(jié)果如下:



3.MATLAB核心程序

SNR ????= [0:5:30];

Nuser ??= 5;

len_dat = 1000;


num_T ??= 2;

num_R ??= 2;

Totalerr= 1e5;

Error ??=[];


for ij=1:length(SNR)

Num_err = 0; %蒙特卡洛模擬次數(shù)

Numbers = 0; %誤碼率累加器

while Num_err<=Totalerr/10

fprintf('SNR = %f\n', SNR(ij));

Num_err

%QPSK發(fā)射信號

signal ????????= randi([0,3],Nuser*num_T*len_dat,1);

signal_matrix ?= reshape(signal,num_T,Nuser,len_dat);

signal_matrix2 = zeros(num_T,Nuser,len_dat);

for k=1:len_dat

for k2=1:Nuser

signal_matrix2(:,k2,k) = pskmod(signal_matrix(:,k2,k),4);

end

end

%Rayleigh

H_ray ????= (randn(num_R,num_T,Nuser,len_dat) + sqrt(-1)*randn(num_R,num_T,Nuser,len_dat))/sqrt(2);

N_awg ????= (randn(num_R,Nuser,len_dat) ??????+ sqrt(-1)*randn(num_R,Nuser,len_dat))/sqrt(2);

%接收

Rec ??????= zeros(num_R,Nuser,len_dat);

for k=1:len_dat

for k2=1:Nuser

Rec(:,k2,k)=H_ray(:,:,k2,k)*signal_matrix2(:,k2,k)/sqrt(Nuser*num_T);

end

end


R_noised = Rec + sqrt(1/(10^(SNR(ij)/10)))*N_awg; %高斯白噪聲

x ???????= [];

for t=1:len_dat

for k=1:Nuser

Rect ?????= R_noised(:,k,t);

Ht_ray ???= H_ray(:,:,k,t);

Hmmsesic ?= inv(Ht_ray'*Ht_ray+(1/(10^(SNR(ij)/10)))*eye(num_T))*Ht_ray';

xbits ????= func_mmse_dmd(Rect,Hmmsesic,H_ray(:,:,k,t),Ht_ray,[1:num_T],num_T,Nuser,SNR(ij));

x(:,k,t) ?= xbits;

end

end

x1 = zeros(num_T,Nuser,len_dat);

for k=1:len_dat

for k2=1:Nuser

x1(:,k2,k) = pskdemod(x(:,k2,k),4);

end

end

Rec_bits ?????????= reshape(x1,Nuser*num_T*len_dat,1);

[errbit,temp_ber] = biterr(signal,Rec_bits,2);

Num_err ??????????= Num_err+errbit;

Numbers ??????????= Numbers+1;

end

Error(ij)=[Num_err/Numbers/length(signal)];

end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容