📄 ofdm.m
字号:
function[TotEbNo,Errors]=OFDM(Mt,Mr);
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;
GI=16;
sig2=1e-3;
M=8;
Mgap=10.^(1:(1.7/10):2.7);
Btot=100*Mt;
TransmitIter=50;
ChannelIter=100;
GapIter=length(Mgap);
TotEbNo=[];
Errors=[];
EbNo=[];
for 1Gap=1:GapIter
gap=Mgap(1Gap);
totalErrors=0;
for 1Chan=1:ChannelIter
[H h_f]=create_channel(Mt,Mr,A,N+GI);
[USV]=svd_decompose_channel(Mt,Mr,h_f,N);
[bits_alloc,energy_alloc]=BitLoad(S,Btot,Mt*N,gap,sig2,M);
for 1Trans=1:TransmitIter
x=(randn(1,Btot)>0);
x_mod=modu(x,bits_alloc,energy_alloc,s2,s4,s16,s64,s256);
x_pre=precode(Mt,x_mod,V,N);
ofdm_symbol=[];
for i=1:Mt
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));
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);
shaped_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=totalErrors+sum(xor(y_demod,x));
end
EbNo=[EbNo sum(energy_alloc)/Btot/sig2];
end
Errors=[Errors totalErrors/Btot/ChannelIter/TransmitIter];
TotEbNo=[TotEbNo mean(EbNo)];
EbNo=[];
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -