⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofdm.m

📁 PFDM 仿真程序
💻 M
字号:
clear all;A = [1 1/exp(1) 1/exp(2)];  % power delay profileN = 64;  % number of symbols in a single OFDM symbolGI = 16;  % guard intervalMt = 1;  % number of Tx antennasMr = 1;  % number of Rx antennasMt1 = 2;  % number of Tx antennasMr1 = 2;  % number of Rx antennassig2 = 1e-3;  % noise varianceM = 8;  % max constellation bit numberMgap = 10.^(1:(1.7/10):2.7);  % gapBtot = 100*Mt;  % total # bits per OFDM symbolTransmitIter = 5; % # iterations of symbol transmissions for each channel instanceChannelIter = 10; % # iterations of independent identically distributed channel instancesGapIter = length(Mgap);load ENC2.matload ENC4.matload ENC16.matload ENC64.matload ENC256.matTotEbNo = [];MIMO_TotEbNo = [];Errors =[];MIMO_Errors=[];EbNo = [];MIMO_EbNo = [];for lGap = 1:GapIterlGapgap = Mgap(lGap);totalErrors = 0;MIMO_totalErrors = 0;for lChan = 1:ChannelIter    % create channel[H h_f]=create_channel(Mt, Mr, A, N+GI);[H1 h_f1]=create_channel(Mt1, Mr1, A, N+GI);% decompose each subchannel in the frequency domain[U S V] = svd_decompose_channel(Mt, Mr, h_f, N);[U1 S1 V1] = svd_decompose_channel(Mt1, Mr1, h_f1, N);% bitloading[bits_alloc,energy_alloc] = BitLoad(S,Btot,Mt*N,gap,sig2,M);[bits_alloc1,energy_alloc1] = BitLoad(S1,Btot,Mt1*N,gap,sig2,M);%energy_alloc=energy_alloc/(mean(energy_alloc));%energy_alloc=ones(1,128);for lTrans = 1:TransmitIter% bits to transmitx = (randn(1,Btot)>0);% modulatex_mod = modulate(x,bits_alloc,energy_alloc, s2,s4,s16,s64,s256);mod_symbols = modulate(x,bits_alloc1,energy_alloc1,s2,s4,s16,s64,s256);     %fix QPSK modulate% precode modulated signalx_pre = precode(Mt, x_mod, V, N);symbols_pre = precode(Mt1, mod_symbols, V1, N);% ifft, with cyclic prefix for each antennaofdm_symbol =[];MIMO_ofdm_symbol =[];for i=1:Mtofdm_symbol = [ofdm_symbol; ifft_cp_tx_blk(x_pre(i:Mt:Mt*(N-1)+i),N,GI)];endfor i=1:Mt1        MIMO_ofdm_symbol = [MIMO_ofdm_symbol; ifft_cp_tx_blk(symbols_pre(i:Mt1:Mt1*(N-1)+i),N,GI)];endofdm_symbol2 = reshape(ofdm_symbol,Mt*(N+GI),1);MIMO_ofdm_symbol2 = reshape(MIMO_ofdm_symbol,Mt1*(N+GI),1);% channely = transpose(channel(sig2, Mt, Mr, ofdm_symbol2, H, N+GI));z = transpose(channel(sig2, Mt1, Mr1, MIMO_ofdm_symbol2, H1, N+GI));% fftrec_symbol =[];MIMO_rec_symbol =[];for i=1:Mtrec_symbol = [rec_symbol; fft_cp_rx_blk(y(i:Mt:Mt*(N+GI-1)+i),N,GI)];endfor i=1:Mt1MIMO_rec_symbol = [MIMO_rec_symbol; fft_cp_rx_blk(z(i:Mt1:Mt1*(N+GI-1)+i),N,GI)];endrec_symbol2 = reshape(rec_symbol,1,Mt*N);MIMO_rec_symbol2 = reshape(MIMO_rec_symbol,1,Mt1*N);% shape received signalshaped_vals = shape(rec_symbol2, Mr, U, N);MIMO_shaped_vals = shape(MIMO_rec_symbol2, Mr1, U1, N);% demodulatey_demod = demodulate(shaped_vals, bits_alloc, energy_alloc, S, s2,s4,s16,s64,s256, c2,c4,c16,c64,c256);z_demod = demodulate(MIMO_shaped_vals, bits_alloc1, energy_alloc1,S1, s2,s4,s16,s64,s256, c2,c4,c16,c64,c256);% comparisontotalErrors = totalErrors + sum(xor(y_demod,x));MIMO_totalErrors = MIMO_totalErrors + sum(xor(z_demod,x));endEbNo = [EbNo sum(energy_alloc)/Btot/sig2];MIMO_EbNo = [MIMO_EbNo sum(energy_alloc1)/Btot/sig2];endErrors = [Errors totalErrors/Btot/ChannelIter/TransmitIter]MIMO_Errors = [MIMO_Errors MIMO_totalErrors/Btot/ChannelIter/TransmitIter]TotEbNo = [TotEbNo mean(EbNo)]MIMO_TotEbNo = [MIMO_TotEbNo mean(MIMO_EbNo)]EbNo = [];MIMO_EbNo = [];endplot(TotEbNo, Errors,'r+:',MIMO_TotEbNo,MIMO_Errors,'b*--');legend('SISO adative','MIMO adative');xlabel('Eb/No');ylabel('BER');title('SISO-MIMO link, adaptive rate and power')save SISO_adaptive2.mat Errors EbNo

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -