?? ofdm.asv
字號(hào):
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;
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 lGap = 1:GapIter
gap = Mgap(lGap);
totalErrors = 0;
for lChan = 1:ChannelIter
%創(chuàng)建信道
[H h_f] =create_channel(Mt,Mr,A,N+GI);
%在頻域中分解每個(gè)子信道
[U S V] = svd_decompose_channel(Mt,Mr,h_f,N);
%比特分配
[bits_alloc,energy_alloc] = BitLoad(S,Btot,Mt*N,gap,sig2,M);
%能量分配
for lTrans = 1:TransmitIter
%傳輸?shù)谋忍? x = (randn(1,Btot)>0);
%調(diào)制
x_mod = modu(x,bits_alloc,energy_alloc,s2,s4,s16,s64,s256);
%調(diào)制信號(hào)預(yù)編碼
x_pre =precode(Mt,x_mod,V,N);
%ifft,含循環(huá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));
%fft
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);
%接收信號(hào)成形
shaped_vals = shape(rec_symbol2,Mr,U,N);
%解調(diào)
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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -