?? ofdm.m
字號:
function[TotEbNo,Errors]=OFDM(Mt,Mr);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%function[TotEbNo,Errors]=OFDM(Mt,Mr);
%
%輸入:
% Mt ----發(fā)射天線數(shù)
% Mr ----接收天線數(shù)
%輸出:
%TotEbNo ----信噪比
%Errors ----平均誤比特率
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load ENC2.mat
load ENC4.mat
load ENC16.mat
load ENC64.mat
load ENC256.mat
A=[1 1/exp(1) 1/exp(2)]; %功率時延譜
N=64; %OFDM子載波數(shù)
GI=16;Q %保護間隔
sig2=1e-3; %噪聲
M=8; %最大的星座比特數(shù)
Mgap=10.^(1:(1.7/10):2.7); %間隔
Btot=100*Mt; %每個ofdm符號總的比特數(shù)
TransimitIter=50; %每個信道傳輸符號迭代次數(shù)
ChannelIter=50; %隨機信道迭代
CapIter=length(Mgap);
TotEbNo=[];
Errors=[];
EbNo=[];
for lGap=1:GapIter
gap=Mgap(lGap);
totalErrors=0;
for lChan=1:ChannelIter
%創(chuàng)建信道
[H h_f]=create_channel(Mr,Mt,A,N+GI);
%在頻域中分解每個子信道
[USV]=svd_decompose_channel(Mt,Mr,h_f,N);
%比特分配
[bits_alloc,energy_alloc]=BitLoad(S,Btot,Mt*N,gap,gig2,M);
%能量分配
for lTrans=1:TransmitIter
%傳輸?shù)谋忍? x=(randn(1,Blot)>0);
%調制
x_mod=modu(x,bits_alloc,energy_alloc,s2,s4,s16,s64,s256);
%調制信號預編碼
x_pre=precode(Mt,x_mod,V,N);
%ifft,含循環(huán)前綴
ofdm_symbol=[ofdm_symbol;ifft_cp_tx_blk(x_pre(i:Mt:Mt*(N-1)+i),N,GI)];
end
ofdm_symbol2=reshape(ofdm_symbol,Mt*(N+GI),1);
%信道
y=transpose(channel(sig2,Mt,Mr,ofdm_symbol2,H,N+GI));
%ifft
rec_symbol=[];
for i=1:Mt
rec_symbol=[rec_symbol;fft_cp_rx_blk(y(i:Mt:Mt*(N+GI-1)+i),N,GI)];
end
rec_symbol2=reshape(rec_symbol,1,Mt*N);
%接收信號成形
shoped_vals=shape(rec_symbol2,Mr,U,N);
%解調
y_demod=demodulate(shaped_vals,bits_alloc,energy_alloc,S,s2,s4,s16,s64,s256,c2,c4,c16,c64,c256);
%比較
totalErrors=totalError+sum(xor(y_demod,x));
end
EbNo=[EbNo sum(energy_alloc)/Btot/sig2];
end
Errors=[Errors totalErrors/Btot/channelIter/TransmiIter];
TotEbNo=[TotEbNo mean(EbNo)];
EbNo=[];
End
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -