1.算法概述
MIMO-OFDM系統(tǒng)的接收信號(hào)是多個(gè)發(fā)射天線發(fā)送信號(hào)的衰落與加性噪聲的線性疊加缝彬,若采用通常SISO-OFDM系統(tǒng)或MIMO系統(tǒng)的估計(jì)算法估計(jì)信道,將會(huì)帶來(lái)很大的估計(jì)誤差被廓。出于設(shè)計(jì)實(shí)現(xiàn)的考慮,本文主要研究理論相對(duì)比較成熟的慢變環(huán)境下基于訓(xùn)練序列的MIMO-OFDM系統(tǒng)的信道估計(jì)算法蛉鹿。本章將主要討論MIMO-OFDM系統(tǒng)特殊訓(xùn)練序列的設(shè)計(jì)和信道估計(jì)算法的選擇取劫。
多天線系統(tǒng)的信道估計(jì)算法同單天線系統(tǒng)的相比具有更大的復(fù)雜性,因?yàn)榻邮招盘?hào)是多個(gè)發(fā)射信號(hào)的疊加信號(hào)忌卤,這些發(fā)射信號(hào)同時(shí)從多個(gè)發(fā)射天線上發(fā)射出來(lái)扫夜,幾乎同步到達(dá)任一接收天線。因此要從一個(gè)疊加信號(hào)中正確的識(shí)別出多個(gè)發(fā)射信號(hào),需要信道估計(jì)算法能估計(jì)出各發(fā)射天線到同一接收天線之間多個(gè)并行信道的信道特性笤闯。而任一發(fā)射天線到任一接收天線之間的信道估計(jì)可參考單天線系統(tǒng)的算法堕阔。
信道估計(jì)算法主要可以分為兩種:盲估計(jì)算法和非盲估計(jì)算法。盲信道估計(jì)算法不需要在發(fā)送信息中插入訓(xùn)練序列颗味,節(jié)約了帶寬超陆。盲估計(jì)算法的實(shí)現(xiàn)需要利用發(fā)送信息內(nèi)包含的統(tǒng)計(jì)信息。這通常需要在接收端對(duì)接收信號(hào)進(jìn)行復(fù)雜的數(shù)學(xué)運(yùn)算脱衙,算法的運(yùn)算量一般都很大侥猬,不適合應(yīng)用于對(duì)時(shí)延要求比較高的實(shí)時(shí)系統(tǒng)。非盲估計(jì)算法是在發(fā)送信號(hào)中插入收發(fā)兩端都事先己知的信息捐韩,接收端在接收到該已知信息之后退唠,由該信息的幅度、載頻或相位變化來(lái)估計(jì)信道對(duì)發(fā)送信息所造成的衰落影響荤胁。算法應(yīng)用廣泛瞧预,幾乎可以應(yīng)用于所有的無(wú)線通信系統(tǒng)。
2.仿真效果預(yù)覽
matlab2022a仿真結(jié)果如下:
3.核心MATLAB預(yù)覽
.....................................................
for snrl=1:length(SNR)
estimation_error1=zeros(mt*mr,nse);%誤差估計(jì)
R1=besselj(0,2*pi*fm*(nse+ng)/B);
sigma2=10^(-SNR(snrl)/10);
aa=(1-R1^2)/(1-R1^2+sigma2); ?%兩個(gè)系數(shù)公式
bb=sigma2*R1/(1-R1^2+sigma2); %兩個(gè)系數(shù)公式
for iteration=1:number
if awgn==1
h=ones(mt*mr,1);
else
phi=rand*2*pi;
h=r(index+iteration)*exp(j*phi);
h=h.*(ones(mt*mr,1)*(exp(-0.5).^[1:ds]));
h=h./(sqrt(sum(abs(h).^2,2))*ones(1,ds)); %OFDM系統(tǒng)的系統(tǒng)沖激響應(yīng)函數(shù)
end
% 信道長(zhǎng)度
CL=size(h,2); ??????????????????????????????????????????????
output=zeros(mr,nse);
%%
%信號(hào)發(fā)送模塊
for tx=1:mt
%產(chǎn)生隨機(jī)數(shù)
data_b=0*round(rand(4,nse));
%利用QAM調(diào)制
data_qam(tx,:)=j*(2*(mod(data_b(1,:)+data_b(2,:),2)+2*data_b(1,:))-3)+2*(mod(data_b(3,:)+data_b(4,:),2)+2*data_b(3,:))-3;
for loop=1:mt
data_qam(tx,pilot+loop-1)=(1+j)*(loop==tx); ????????????
end
%IFFt變化
data_time_temp=ifft(data_qam(tx,:));
data_time(tx,:)=[data_time_temp(end-ng+1:end) data_time_temp];
end
%信號(hào)接收模塊
for rx=1:mr
for tx=1:mt
%卷積模塊
output_temp=conv(data_time(tx,:),h((rx-1)*mt+tx,:));
output(rx,:)=output_temp(ng+1:ng+nse)+output(rx,:);
end
np=(sum(abs(output(rx,:)).^2)/length(output(rx,:)))*sigma2;
%產(chǎn)生噪聲
noise=(randn(size(output(rx,:)))+i*randn(size(output(rx,:))))*sqrt(np);
%給輸入信號(hào)疊加噪聲
output(rx,:)=output(rx,:)+noise;
data_out(rx,:)=fft(output(rx,:));
end
%信道估計(jì)
H_act=zeros(mt*mr,nse);
H_est1=zeros(mt*mr,nse);
i=1;
%發(fā)送和接收估計(jì)
for tx=1:mt
for rx=1:mr
H_est_temp=data_out(rx,pilot+tx-1)./data_qam(tx,pilot+tx-1);
%IFFT變化
h_time=ifft(H_est_temp);
h_time=[h_time zeros(1,nse-length(h_time))]; ??????????????
H_est1((rx-1)*mt+tx,:)=fft(h_time);
if (tx>1)
H_est1((rx-1)*mt+tx,:)=[H_est1((rx-1)*mt+tx,nse-tx+2:nse) H_est1((rx-1)*mt+tx,1:nse-tx+1)]; ???
end
H_act((rx-1)*mt+tx,:)=fft([h((rx-1)*mt+tx,:) zeros(1,nse-CL)]);
%誤差計(jì)算
error1=(abs(H_act((rx-1)*mt+tx,:)-H_est1((rx-1)*mt+tx,:)).^2);
%誤差累加
estimation_error1((rx-1)*mt+tx,:)=estimation_error1((rx-1)*mt+tx,:)+error1; ????????????????????????????
end
end ?
end
%計(jì)算平均誤差估計(jì)
estimation_error1=estimation_error1/number;
MEE1(snrl)=sum(sum(estimation_error1))/(mt*mr*nse);
end
error1=(abs(H_act-H_est1).^2)./(abs(H_act).^2);
figure(1);
subplot(311),plot([0:length(H_act )-1],abs(H_act)); ???%信道估計(jì)
subplot(312),plot([0:length(H_est1)-1],abs(H_est1)); ??%信道估計(jì)
subplot(313),plot([0:length(error1)-1],error1); ???????%誤差估計(jì)
X=round(rand(1,N_num)) ????;
s=(X.*2-1)/sqrt(2) ???????;
sreal=s(1:2:N_num) ????;
simage=s(2:2:N_num) ???;
%=========================================
X1=sreal+j.*simage;
train_sym=round(rand(1,2*carr_sym));
t=(train_sym.*2-1)/sqrt(2);
treal=t(1:2:2*carr_sym);
timage=t(2:2:2*carr_sym);
training_symbols1=treal+j.*timage; ????%信號(hào)實(shí)部+虛部
training_symbols2=training_symbols1.'; %信號(hào)轉(zhuǎn)置
training_symbols=repmat(training_symbols2,1,Np);
pilot=1:LI+1:carr_num+Np;
if length(pilot)~=Np
pilot=[pilot,carr_num+Np];
end
%串并轉(zhuǎn)換
X2=reshape(X1,carr_num,carr_sym).';
%插入導(dǎo)頻
signal=1:carr_num+Np;
signal(pilot)=[];
X3(:,pilot)=training_symbols;
X3(:,signal)=X2;
IFFT_modulation=zeros(carr_sym,IFFT_length);
IFFT_modulation(:,carriers)=X3;
X4=ifft(IFFT_modulation,IFFT_length,2);
%加保護(hù)間隔(循環(huán)前綴)
for k=1:carr_sym;
for i=1:IFFT_length;
X6(k,i+GI)=X4(k,i);
end
for i=1:GI;
X6(k,i)=X4(k,i+IFFT_length-GI); ???
end
end
01_004_m