📄 ofdm.m
字号:
clear all;close all;%%%%%%%%%%%%%%%% Display the begin timefprintf('year:%d ;month:%d ;day: %d; hour:%d ;minute:%d ;seconds: %d ',fix(clock));fprintf('\n');A = [1 exp(-1) exp(-2)]; % power delay profileN = 64; % 64 number of symbols in a single OFDM symbolGI =16; % 16 guard intervalMt = 2; % number of Tx antennasMr = 2; % number of Rx antennassig2 = 1e-3; % noise varianceM = 8; % max constellation bit numberMgap = 10.^(1:(1.7/10):2.7); % gap; 间隙Btot = 1*Mt;;%100*Mt; % total bits per OFDM symbolTransmitIter = 5;%50; % iterations of symbol transmissions for each channel instanceChannelIter = 10;%100; % iterations of independent identically distributed channel instancesGapIter = length(Mgap);load ENC2.matload ENC4.matload ENC16.matload ENC64.matload ENC256.matTotEbNo = [];Errors =[];EbNo = [];for lGap = 1:GapIter %%%% 10 lGap gap = Mgap(lGap); %%%%%% totalErrors = 0; for lChan = 1:ChannelIter % create channel [H h_f]=create_channel(Mt, Mr, A, N+GI); % decompose each subchannel in the frequency domain %fprintf('year:%d ;month:%d ;day: %d; hour:%d ;minute:%d ;seconds: %d ',fix(clock)) %fprintf('\n') [U S V] = svd_decompose_channel(Mt, Mr, h_f, N); %fprintf('year:%d ;month:%d ;day: %d; hour:%d ;minute:%d ;seconds: %d ',fix(clock)) %fprintf('\n') % bitloading [bits_alloc,energy_alloc] = BitLoad(S,Btot,Mt*N,gap,sig2,M); for lTrans = 1:TransmitIter %% 50 % bits to transmit x = (randn(1,Btot)>0); %%% 100*Mt % modulate x_mod = modulate(x,bits_alloc,energy_alloc, s2,s4,s16,s64,s256); % precode modulated signal x_pre = precode(Mt, x_mod, V, N); % ifft, with cyclic prefix for each antenna ofdm_symbol =[]; for i=1:Mt ofdm_symbol = [ofdm_symbol; ifft_cp_tx_blk(x_pre(i:Mt:Mt*(N-1)+i),N,GI)]; %ofdm_symbol = ifft_cp_tx_blk((x_pre((1:Mt):Mt:Mt*(N-1)+(1:Mt))),N,GI); %ofdm_symbol =transpose(ofdm_symbol); end ofdm_symbol2 = reshape(ofdm_symbol,Mt*(N+GI),1); % channel 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); % shape received signal shaped_vals = shape(rec_symbol2, Mr, U, N); % demodulate y_demod = demodulate(shaped_vals, bits_alloc, energy_alloc, S, s2,s4,s16,s64,s256, c2,c4,c16,c64,c256); % comparison 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%%%%%%%%%%%%%%%% Display the end time; And calculate the calculating_time fprintf('year:%d ;month:%d ;day: %d; hour:%d ;minute:%d ;seconds: %d \n',fix(clock))semilogx(TotEbNo, Errors);xlabel('Eb/No');ylabel('BER');grid on;if Mt==1 if Mr==1 save SISO_adaptive2.mat Errors EbNo ; title('SISO link, adaptive rate and power'); else save SIMO_adaptive2.mat Errors EbNo ; title('SIMO link, adaptive rate and power'); end;else if Mr==1 save MISO_adaptive2.mat Errors EbNo ; title('MISO link, adaptive rate and power'); else save MIMO_adaptive2.mat Errors EbNo ; title('MIMO link, adaptive rate and power'); end;end;display('Program finished!!')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -