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

📄 ofdm.m

📁 mimoofdm系统自适应功率分配算法
💻 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 + -