Code covered by the BSD License  

Highlights from
Capacity Maximization in Multiuser OFDMA system

image thumbnail

Capacity Maximization in Multiuser OFDMA system

by

 

The complete project of OFDMA system. It tries to maximize the network capacity.

Paper_Para.m
%% Help 
% In this document, the problem of OFDMA multi-user resource allocation based 
% on MMSE channel estimation is considered. Maximization of system capacity, 
% based on available error-free instantaneous estimated channel state 
% information at the transmitter, is the goal. Optimal power distribution 
% between different subchannels is computed analytically, and it is shown that 
% equal power allocation among subcarriers is almost near the optimum capacity.
% Furthermore, the optimum number of pilots and the amount of power allocated 
% between pilot and data subcarriers is computed analytically. Moreover, it is
% shown, trough simulation, that numerical results absolutely coincides the 
% analytical computations.

% People can use the results and the codes freely if they refer to this job.
% To download the report of this job please check the following link:
% http://ens.ewi.tudelft.nl/~ramezani/Errata01.pdf
% These Matlab codes are provided by Hamid Ramezani. 
% Ver01 - 08-Dec-2011

%% ofdm parameters in each block
    ofdm.N  = 64;                % number of total subcarrier for the pilots and data
    ofdm.Np = 16;                 % number of subcarriers for pilots
    ofdm.NpV = [8,16,32];        % vector of pilot number for simulation
    ofdm.Ns = ofdm.N-ofdm.Np;    % number of subcarriers for data pilots
    ofdm.PI = ofdm.N/ofdm.Np;    % pilot interval
    ofdm.BW = 1e6;               % system total avaiable bandwidth
    
    ofdm.Ip = 1:ofdm.PI:ofdm.N;            % pilot location
    ofdm.Is = setxor((1:ofdm.N),ofdm.Ip);  % data  location
        
%% users' parameters
    users.N  = 5;  % numder of users in system
    
%% noise related parameters
    noise.N0     = 1;%1e-10;                    % noise spectral density
    noise.sigma  = noise.N0*ofdm.BW/ofdm.N;     % noise power in each subchannel

%% power relate
    if simulate.Stt ~= 1         % sweep over percentage of power between data and pilots
        power.Alpha   = ofdm.Ns/ofdm.N;     % percentage of power for data subcarrier
    end
    power.AlphaV  = 0:.05:1;     % vector of percentage of power for data subcarrier for simulation only
    if simulate.Stt ~= 2         % sweep over Average SNR , defined as Ptotal/(N0*B)
        power.ASNRdB  = 6;      % in dB Ptotal/(N0*B) 
    end
    power.ASNRdBV = 0:1:15;        % vector of Average SNR , defined as Ptotal/(N0*B)
    
    power.Total   = 10^(.1*power.ASNRdB) * noise.N0 * ofdm.BW;  % total avaiable power in each block
    power.Pdatas  = power.Total * power.Alpha;                  % total power allocated for data subcarriers
    power.Ppilots = power.Total * (1 - power.Alpha);            % total power for pilot data
    % avarage SNR in db for data and pilots
    power.ASNRdBdatas  = 10*log10(power.Pdatas /(noise.sigma*ofdm.Ns));                                       % pilot SNR defined as Ppilot /(N0*B/N)    
    power.ASNRdBpilots = 10*log10(power.Ppilots/(noise.sigma*ofdm.Np));                                       % pilot SNR defined as Ppilot /(N0*B/N)    
    
%% channel parameters
    chan.L        = 8;    % number of channel taps in time domain
    chan.PDPP     = .1;   % channel power delay profile parameter exp(-l * TabNumber)
    % channel power delay profile and normalization
    chan.PDP      = exp(-chan.PDPP * (0:chan.L-1).');
    chan.PDP      = chan.PDP ./ sum(chan.PDP);
    % variance of created noise due to channel estimation 
    chan.Est.SigmaMMSE = sum( (1./chan.PDP + ofdm.Np * 10.^(.1*power.ASNRdBpilots) ).^-1);  
    chan.Est.SigmaLSE  = chan.L/ofdm.Np * 1/10^(.1*power.ASNRdBpilots);

    % FFT MATRIX
    chan.F        =  exp(sqrt(-1)*2*pi/ofdm.N).^ ...
        (-repmat(1:ofdm.N,ofdm.N,1) .* repmat((1:ofdm.N).',1,ofdm.N));
%% Algorithm paramers
    if simulate.Stt == 0
        alg.MMSE.maxIterationNumber =  200; % for one run performance
    else
        alg.MMSE.maxIterationNumber =  20; % for loop performance, 
                                           % the number is reduced to increase the simulation speed
    end
    alg.MMSE.Threshold          =  1e-10; % error below x % of the old computed data
    alg.MMSE.ConvergeCoeff      = .3;    % updating coefficient
    alg.MMSE.M                  = 1:ofdm.Ns;        % series of all subchannels
    alg.MMSE.Mz                 = [];               % series of zero power subchannel
    alg.MMSE.A                  = ones(1,ofdm.Ns);  % Matrix A   
    
%% analyze parameters
    % maximum acheivable capacity given pilot position and power
    analyze.FCSIMaxCapacityWithPdata           = 0;   
    analyze.FCSIAllocPowWithPdata              = zeros(ofdm.Ns,1);   
    
    % capacity with equal power allocation for data subchannels based on
    % MMSE channel estimation    
    analyze.ECSIEqPowCapacityWithPdataMMSE     = 0;   
    % capacity with equal power allocation for data subchannels based on
    % LSE channel estimation
    analyze.ECSIIterativeCapacityWithPdataMMSE = 0;   
    analyze.ECSIIterativeAllocPowWithPdata     = zeros(ofdm.Ns,1);   
    
    % capacity with iterative power allocation for data subchannels based on
    % LSE channel estimation
        % under construction
%% display parameters
    if simulate.Stt == 0
        ifDo.ShowGraphInEachRun          = 1;    
        ifDo.ShowResultsIneachRun        = 1;
    elseif simulate.Stt > 0
        ifDo.ShowGraphInEachRun          = 0;
        ifDo.ShowResultsIneachRun        = 0;    
    end
    
    % graphical parameters
        graph.OneRun.Stt                 = 0;
        graph.Loop.Stt                   = 0;
    % text display parameters
        showResult.OneRun.Stt            = 0;

Contact us