Contents

Mutual information and outage probability for Signal-Based Modulation

calculates mutual information and probability of outage for MIMO-SBM constellation in Rayleigh fading channel + AWGN

clc
clear all

Set input parameters

Nt = 2; % Number of transmit antennas
Nr = 2; % Number of receive antennas
pOutage = [0.1, 0.01, 0.001]; %  Outage probabilities are calculated at rates specified by array R
SNRdB = (0:2:30); % Signal to Noise Ratio(dB) at which the mutual information is calculated
SNR = 10 .^ (SNRdB/10); % Signal to Noise Ratio at which the mutual information is calculated
Es = Nt; % Transmit power equal to unity at each transmit antenna
N0 = Es ./ SNR; % White Gaussian noise spectral density
nSim = 1e5; % Number of realization of fading channel

Generate a realization of MIMO fading channel

generate_channel_matrix = @(Nr, Nt) sqrt(0.5) * (randn(Nr, Nt) + 1i* randn(Nr, Nt));

Calculate mutual information of the given channel realization

compute_mutual_info = @(Nr, Nt, H, N0) log2(det( eye(Nr) + (1/N0)*H*eye(Nt)*(H') ));

$$ I(H) = \log (\det(\mathbf{I}_{n_r} + \frac{1}{N_0} \mathbf{HKH^{\ast}}))$$

$\mathbf{K}$ is the covriance matrix of transmit signal, $n_r$ number of transmit antennas

Generate different realization of fading channel and calculate MI for each realization

nSNR = numel(SNR);
I = zeros(nSNR, nSim);
for iSNR = 1 : nSNR
    for iSim = 1 : nSim
        if(~mod(iSim, 1e5))
            iSim
        end
        H = generate_channel_matrix(Nr, Nt);
        I(iSNR, iSim) = compute_mutual_info(Nr, Nt, H, N0(iSNR));
    end
end

Compute outage capacity

nOutage = numel(pOutage);
cOutage = zeros(nSNR, nOutage);
I = real(I);
I = sort(I, 2);
for iOutage = 1 : nOutage
    for iSNR = 1 : nSNR
    % compute rate that meet required outage probability
    cOutage(iSNR, iOutage) = I(iSNR, floor (nSim * pOutage(iOutage)));
    end
    plot(SNRdB, cOutage(:, iOutage))
    hold on
end

Save output avriables

%save('.\mat\sbm_MI_pOutage_mimo', 'I', 'SNRdB', 'pOutage')