Search code examples
signal-processingtelecommunication

Capacity of MIMO System and S-Parameters


Using channel modeling software(Quadriga), I am calculating the spectral efficiency(bps/Hz) of 2x2 a MIMO system A being higher than the respective capacity of a 2x2 MIMO system B for a fixed frequency. However system A has lower isolation (mutual coupling-S21) than system B. Why is that? The software takes as input the Realized Gain pattern. It also takes as an input a coupling matrix which I used the S parameters of each system respectively.

System A for the given frequnecy s21=-20dB|| System B for the given frequnecy s21=-40dB


Solution

  • The capacity of a MIMO system depends on two factors: The overall SNR (averaged over all MIMO sublinks) and the "orthogonality" of the channel matrix. The latter can be determined by a singular-value decomposition of the matrix. If all singular values are equal, the matrix is orthogonal.

    In the 2x2 case, you would be able to transmit 2 data-streams in parallel, i.e. the capacity scales linear with the number of streams (and logarithmic with the SNR). However, perfect orthogonality is rarely achieved. If you use identical channel model settings (multipath structure, frequency, bandwidth, power, etc.) and only adjust the coupling between the antennas ports, then a lower isolation would result in a lower capacity due to a higher correlation in the channel coefficients. This can be seen in the following code example (using QuaDRiGa v2.2):

    clear all
    iso = 0:5:40
    for n = 1:numel(iso)
        % Keep identical random ssed
        RandStream.setGlobalStream(RandStream('mt19937ar','seed',1));
    
        l = qd_layout;                              % Quadriga Layout
        l.randomize_rx_positions(100,1.5,1.5,0);    % Random receiver position
        l.tx_array = qd_arrayant('ula2');           % ULA antenna
        l.tx_array.coupling = [ 1,sqrt( 10^(-iso(n)/10) ); 0,1 ];
        l.rx_array = l.tx_array.copy;
        l.set_scenario('3GPP_38.901_UMi_NLOS');
    
        c = l.get_channels;                         % Channel coefficients
        H = c.fr(1e9,1);                            % MIMO matrix
        P = mean(abs(H(:).^2));                     % Average Power
        H = H./sqrt(P);                             % Normalize Power
        C(n) = log2(abs(det( eye(2) + 10/2 * (H*H') )));   % MIMO Capacity @ 10 dB SNR
    end
    plot(iso,C,'-o')