半个苹果's Blog

Happy coding

MIMO with MMSE SIC and optimal ordering

This post attempts to build further on the MIMO equalization schemes which we have discussed -

(a) Minimum Mean Square Error (MMSE) equalization,

(b) Zero Forcing equalization with Successive Interference Cancellation (ZF-SIC) and

(c) ZF-SIC with optimal ordering.

We have learned that successive interference cancellation with optimal ordering improves the performance with Zero Forcing equalization. In this post, we extend the concept of successive interference cancellation to the MMSE equalization and simulate the performance. We will assume that the channel is a flat fading Rayleigh multipath channel and the modulation is BPSK.

 

Brief description of 2×2 MIMO transmission, assumptions on channel model and the noise are detailed in the post on Minimum Mean Square Error (MMSE) equalization.

MMSE equalizer for 2×2 MIMO channel

Let us now try to understand the math for extracting the two symbols which interfered with each other. In the first time slot, the received signal on the first receive antenna is,

.

The received signal on the second receive antenna is,

.

where

, are the received symbol on the first and second antenna respectively,

is the channel from transmit antenna to receive antenna,

is the channel from transmit antenna to receive antenna,

is the channel from transmit antenna to receive antenna,

is the channel from transmit antenna to receive antenna,

, are the transmitted symbols and

is the noise on receive antennas.

We assume that the receiver knows , , and . The receiver also knows and . For convenience, the above equation can be represented in matrix notation as follows:

.

Equivalently,

The Minimum Mean Square Error (MMSE) approach tries to find a coefficient which minimizes the criterion,

.

Solving,

.

Using the Minimum Mean Square Error (MMSE) equalization, the receiver can obtain an estimate of the two transmitted symbols , , i.e.

.

Successive Interference Cancellation

(a) Simple

In classical Successive Interference Cancellation, the receiver arbitrarily takes one of the estimated symbols (for example the symbol transmitted in the second spatial dimension, ), and subtract its effect from the received symbol and . Once the effect of is removed, the new channel becomes a one transmit antenna, 2 receive antenna case and can be optimaly equalized by Maximal Ratio Combining (MRC).

(b) With optimal ordering

However, we can have more intelligence in choosing whether we should subtract the effect of first or first. To make that decision, let us find out the transmit symbol (after multiplication with the channel) which came at higher power at the receiver. The received power at the both the antennas corresponding to the transmitted symbol is,

.

The received power at the both the antennas corresponding to the transmitted symbol is,

.

If then the receiver decides to remove the effect of from the received vector and . Else if the receiver decides to subtract effect of from the received vector and , and then re-estimate .

Once the effect of either or is removed, the new channel becomes a one transmit antenna, 2 receive antenna case and the symbol on the other spatial dimension can be optimally equalized by Maximal Ratio Combining (MRC).

For detailed equations on the contruction of the new 2 x 1 channel using successive interference cancellation, please refer to the post on ZF-SIC with optimal ordering.

Simulation Model

The Matlab/Octave script performs the following

(a) Generate random binary sequence of +1’s and -1’s.

(b) Group them into pair of two symbols and send two symbols in one time slot

(c) Multiply the symbols with the channel and then add white Gaussian noise.

(d) Equalize the received symbols with Minimum Mean Square Error criterion

(e) Do successive interference cancellation by both classical and optimal ordering approach

(f) Perform Maximal Ratio Combining for equalizing the new received symbol

(g) Perform hard decision decoding and count the bit errors

(h) Repeat for multiple values of and plot the simulation and theoretical results.
Click here to download Matlab/Octave script for simulating BER for BPSK in 2×2 Rayleigh fading MIMO channel with MMSE-SIC equalization with and without optimal ordering

2x2 MIMO MMSE-SIC equalization

Figure; BER plot for 2×2 MIMO channel with MMSE-SIC equalization with and without optimal ordering

Observations

Compared to Minimum Mean Square Equalization with simple successive interference cancellation case, addition of optimal ordering results in around 5.0dB of improvement for BER of . :)

The performance is now closely matching with curve 1 transmit 2 receive antenna MRC case.

References

[DIG-COMM-BARRY-LEE-MESSERSCHMITT] Digital Communication: Third Edition, by John R. Barry, Edward A. Lee, David G. Messerschmitt

 

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% All rights reserved by Krishna Pillai, http://www.dsplog.com
% The file may not be re-distributed without explicit authorization
% from Krishna Pillai.
% Checked for proper operation with Octave Version 3.0.0
% Author        : Krishna Pillai
% Email         : krishna@dsplog.com
% Version       : 1.0
% Date          : 06 December 2008
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Script for computing the BER for BPSK modulation in a
% Rayleigh fading channel with 2 Tx, 2Rx MIMO channel 
% Minimum Mean Square Error Equalization with Successive Interference 
% Cancellation (ZF-SIC) with optimal ordering

clear
N =  10^6; % number of bits or symbols
Eb_N0_dB = [0:25]; % multiple Eb/N0 values
nTx = 2;
nRx = 2;
for ii = 1:length(Eb_N0_dB)

    % Transmitter
    ip = rand(1,N)>0.5; % generating 0,1 with equal probability
    s = 2*ip-1; % BPSK modulation 0 -> -1; 1 -> 0
    sMod = kron(s,ones(nRx,1)); % 
    sMod = reshape(sMod,[nRx,nTx,N/nTx]); % grouping in [nRx,nTx,N/NTx ] matrix
    
    h = 1/sqrt(2)*[randn(nRx,nTx,N/nTx) + j*randn(nRx,nTx,N/nTx)]; % Rayleigh channel
    n = 1/sqrt(2)*[randn(nRx,N/nTx) + j*randn(nRx,N/nTx)]; % white gaussian noise, 0dB variance

    % Channel and noise Noise addition
    y = squeeze(sum(h.*sMod,2)) + 10^(-Eb_N0_dB(ii)/20)*n;

    % Receiver
    % ----------
    % Forming the MMSE equalization matrix W = inv(H^H*H + sigma^2*I)*H^H
    % H^H*H is of dimension [nTx x nTx]. In this case [2 x 2] 
    % Inverse of a [2x2] matrix [a b; c d] = 1/(ad-bc)[d -b;-c a]
    hCof = zeros(2,2,N/nTx)  ; 
    hCof(1,1,:) =  sum(h(:,2,:).*conj(h(:,2,:)),1) + 0*10^(-Eb_N0_dB(ii)/10);  % d term
    hCof(2,2,:) =  sum(h(:,1,:).*conj(h(:,1,:)),1) + 0*10^(-Eb_N0_dB(ii)/10);  % a term
    hCof(2,1,:) = -sum(h(:,2,:).*conj(h(:,1,:)),1); % c term
    hCof(1,2,:) = -sum(h(:,1,:).*conj(h(:,2,:)),1); % b term
    
    for kk = 1:2
    
       if kk == 1
          sortIdx = [];
    	  hCof(1,1,:) =  sum(h(:,2,:).*conj(h(:,2,:)),1) + 10^(-Eb_N0_dB(ii)/10);  % d term
          hCof(2,2,:) =  sum(h(:,1,:).*conj(h(:,1,:)),1) + 10^(-Eb_N0_dB(ii)/10);  % a term
          hCof(2,1,:) = -sum(h(:,2,:).*conj(h(:,1,:)),1); % c term
          hCof(1,2,:) = -sum(h(:,1,:).*conj(h(:,2,:)),1); % b term
       elseif kk == 2
          % Sorting the equalization matrix based on the channel power on each dimension
          % since the second spatial dimension is equalized first, the channel
          % with higher power assigned to second dimension
          normSS1 = squeeze(hCof(2,2,:));
    	  normSS2 = squeeze(hCof(1,1,:));
    	  sortIdx = find(normSS2 < normSS1);
	end

   
        % sorting the H^H*H  + sigma^2*I matrix 
        hCofSort = hCof;
        if ~isempty(sortIdx)
            hCofSort(2,2,sortIdx) = hCof(1,1,sortIdx) + 10^(-Eb_N0_dB(ii)/10);;
      	    hCofSort(1,1,sortIdx) = hCof(2,2,sortIdx) + 10^(-Eb_N0_dB(ii)/10);;
    	    hCofSort(1,2,sortIdx) = hCof(2,1,sortIdx);
    	    hCofSort(2,1,sortIdx) = hCof(1,2,sortIdx);
        end
        hDen = ((hCofSort(1,1,:).*hCofSort(2,2,:)) - (hCofSort(1,2,:).*hCofSort(2,1,:))); % ad-bc term
        hDen = reshape(kron(reshape(hDen,1,N/nTx),ones(2,2)),2,2,N/nTx);  % formatting for division
        hInvSort = hCofSort./hDen; % inv(H^H*H)

        % sorting the H matrix
        hSort = h;
        if ~isempty(sortIdx)
    	    hSort(:,2,sortIdx) = h(:,1,sortIdx);
    	    hSort(:,1,sortIdx) = h(:,2,sortIdx);
        end

        % Equalization - Zero forcing
        hModSort =  reshape(conj(hSort),nRx,N); % H^H operation
    
        yModSort = kron(y,ones(1,2)); % formatting the received symbol for equalization
        yModSort = sum(hModSort.*yModSort,1); % H^H * y 
        yModSort =  kron(reshape(yModSort,2,N/nTx),ones(1,2)); % formatting
        yHatSort = sum(reshape(hInvSort,2,N).*yModSort,1); % inv(H^H*H)*H^H*y

        % receiver - hard decision decoding on second spatial dimension
        ipHat2SS = real(yHatSort(2:2:end))>0;
        ipHatMod2SS = 2*ipHat2SS-1;
        ipHatMod2SS = kron(ipHatMod2SS,ones(nRx,1));
        ipHatMod2SS = reshape(ipHatMod2SS,[nRx,1,N/nTx]);

        % new received symbol - removing the effect from second spatial dimension
        h2SS = hSort(:,2,:); % channel in the second spatial dimension
        r = y - squeeze(h2SS.*ipHatMod2SS);

        % maximal ratio combining - for symbol in the first spatial dimension
        h1SS = squeeze(hSort(:,1,:));
        yHat1SS = sum(conj(h1SS).*r,1)./sum(h1SS.*conj(h1SS),1);
        yHatSort(1:2:end) = yHat1SS;
  
        yHatSort = reshape(yHatSort,2,N/2) ;
        if ~isempty(sortIdx)
            yHatSort(:,sortIdx) = flipud(yHatSort(:,sortIdx));
        end
        yHat = reshape(yHatSort,1,N);

        % receiver - hard decision decoding
        ipHat = real(yHat)>0;

        % counting the errors
        nErr(kk,ii) = size(find([ip- ipHat]),2);

    end

end

simBer = nErr/N; % simulated ber
EbN0Lin = 10.^(Eb_N0_dB/10);
theoryBer_nRx1 = 0.5.*(1-1*(1+1./EbN0Lin).^(-0.5)); 
p = 1/2 - 1/2*(1+1./EbN0Lin).^(-1/2);
theoryBerMRC_nRx2 = p.^2.*(1+2*(1-p)); 

close all
semilogy(Eb_N0_dB,theoryBer_nRx1,'bp-','LineWidth',2);
hold on
semilogy(Eb_N0_dB,theoryBerMRC_nRx2,'kd-','LineWidth',2);
semilogy(Eb_N0_dB,simBer(1,:),'mo-','LineWidth',2);
semilogy(Eb_N0_dB,simBer(2,:),'gp-','LineWidth',2);
axis([0 25 10^-5 0.5])
grid on
legend('theory (nTx=2,nRx=2, ZF)', 'theory (nTx=1,nRx=2, MRC)', 'sim (nTx=2, nRx=2, MMSE-SIC)','sim (nTx=2, nRx=2, MMSE-SIC-Sort)');
xlabel('Average Eb/No,dB');
ylabel('Bit Error Rate');
title('BER for BPSK modulation with 2x2 MIMO and MMSE-SIC equalizer (Rayleigh channel)');