• CCS


    Simulation of MIMO Systems

    Perform a Monte Carlo simulation to assess the error rate performance of an
    (Ny,NR) MIMO system in a Rayleigh fading AWGN channel.

    Matlab Coding

     1 % MATLAB script for the 2T2R MIMO system
     2 
     3 Nt = 2;                                 % No. of transmit antennas
     4 Nr = 2;                                 % No. of receive antennas
     5 S = [1 1 -1 -1; 1 -1 1 -1];             % Reference codebook
     6 Eb = 1;                                 % Energy per bit
     7 EbNo_dB = 0:5:30;                       % Average SNR per bit
     8 No = Eb*10.^(-1*EbNo_dB/10);            % Noise variance
     9 BER_ML = zeros(1,length(EbNo_dB));      % Bit-Error-Rate Initialization
    10 BER_MMSE = zeros(1,length(EbNo_dB));    % Bit-Error-Rate Initialization
    11 BER_ICD = zeros(1,length(EbNo_dB));     % Bit-Error-Rate Initialization
    12 
    13 % Maximum Likelihood Detector:
    14 % echo off;
    15 for i = 1:length(EbNo_dB)
    16     no_errors = 0;
    17     no_bits = 0;
    18     while no_errors <= 100
    19         mu = zeros(1,4);
    20         s = 2*randi([0 1],Nt,1) - 1;
    21         no_bits = no_bits + length(s);
    22         H = (randn(Nr,Nt) + 1i*randn(Nr,Nt))/sqrt(2*Nr);
    23         noise = sqrt(No(i)/2)*(randn(Nr,1) + 1i*randn(Nr,1));
    24         y = H*s + noise;
    25         for j = 1:4
    26             mu(j) = sum(abs(y - H*S(:,j)).^2);  % Euclidean distance metric
    27         end
    28         [Min idx] = min(mu);
    29         s_h = S(:,idx);
    30         no_errors = no_errors + nnz(s_h-s);
    31     end
    32     BER_ML(i) = no_errors/no_bits;
    33 end

    34 % echo on; 35 % Minimum Mean-Sqaure-Error (MMSE) Detector: 36 echo off; 37 for i = 1:length(EbNo_dB) 38 no_errors = 0; 39 no_bits = 0; 40 while no_errors <= 100 41 s = 2*randi([0 1],Nt,1) - 1; 42 no_bits = no_bits + length(s); 43 H = (randn(Nr,Nt) + 1i*randn(Nr,Nt))/sqrt(2*Nr); 44 noise = sqrt(No(i)/2)*(randn(Nr,1) + 1i*randn(Nr,1)); 45 y = H*s + noise; 46 w1 = (H*H' + No(i)*eye(Nr))^(-1) * H(:,1); % Optimum weight vector 1 47 w2 = (H*H' + No(i)*eye(Nr))^(-1) * H(:,2); % Optimum weight vector 2 48 W = [w1 w2]; 49 s_h = W'*y; 50 for j = 1:Nt 51 if s_h(j) >= 0 52 s_h(j) = 1; 53 else 54 s_h(j) = -1; 55 end 56 end 57 no_errors = no_errors + nnz(s_h-s); 58 end 59 BER_MMSE(i) = no_errors/no_bits; 60 end
    61 %echo on; 62 63 % Inverse Channel Detector: 64 % echo off; 65 for i = 1:length(EbNo_dB) 66 no_errors = 0; 67 no_bits = 0; 68 while no_errors <= 100 69 s = 2*randi([0 1],Nt,1) - 1; 70 no_bits = no_bits + length(s); 71 H = (randn(Nr,Nt) + 1i*randn(Nr,Nt))/sqrt(2*Nr); 72 noise = sqrt(No(i)/2)*(randn(Nr,1) + 1i*randn(Nr,1)); 73 y = H*s + noise; 74 s_h = Hy; 75 for j = 1:Nt 76 if s_h(j) >= 0 77 s_h(j) = 1; 78 else 79 s_h(j) = -1; 80 end 81 end 82 no_errors = no_errors + nnz(s_h-s); 83 end 84 BER_ICD(i) = no_errors/no_bits; 85 end 86 % echo on;
    87 % Plot the results: 88 semilogy(EbNo_dB,BER_ML,'-o',EbNo_dB,BER_MMSE,'-*',EbNo_dB,BER_ICD) 89 xlabel('Average SNR/bit (dB)','fontsize',10) 90 ylabel('BER','fontsize',10) 91 legend('ML','MMSE','ICD')


    Simulation Results,
     1 % MATLAB script for 2T3R MIMO system
     2 
     3 Nt = 2;                                 % No. of transmit antennas
     4 Nr = 3;                                 % No. of receive antennas
     5 S = [1 1 -1 -1; 1 -1 1 -1];             % Reference codebook
     6 Eb = 1;                                 % Energy per bit
     7 EbNo_dB = 0:5:30;                       % Average SNR per bit
     8 No = Eb*10.^(-1*EbNo_dB/10);            % Noise variance
     9 BER_ML = zeros(1,length(EbNo_dB));      % Bit-Error-Rate Initialization
    10 BER_MMSE = zeros(1,length(EbNo_dB));    % Bit-Error-Rate Initialization
    11 12 
    13 % Maximum Likelihood Detector:
    14 echo off;
    15 for i = 1:length(EbNo_dB)
    16     no_errors = 0;
    17     no_bits = 0;
    18     while no_errors <= 100
    19         mu = zeros(1,4);
    20         s = 2*randi([0 1],Nt,1) - 1;
    21         no_bits = no_bits + length(s);
    22         H = (randn(Nr,Nt) + 1i*randn(Nr,Nt))/sqrt(2*Nr);
    23         noise = sqrt(No(i)/2)*(randn(Nr,1) + 1i*randn(Nr,1));
    24         y = H*s + noise;
    25         for j = 1:4
    26             mu(j) = sum(abs(y - H*S(:,j)).^2);  % Euclidean distance metric
    27         end
    28         [Min idx] = min(mu);
    29         s_h = S(:,idx);
    30         no_errors = no_errors + nnz(s_h-s);
    31     end
    32     BER_ML(i) = no_errors/no_bits;
    33 end
    34 echo on;
    35 
    36 % Minimum Mean-Sqaure-Error (MMSE) Detector:
    37 echo off;
    38 for i = 1:length(EbNo_dB)
    39     no_errors = 0;
    40     no_bits = 0;
    41     while no_errors <= 100
    42         s = 2*randi([0 1],Nt,1) - 1;
    43         no_bits = no_bits + length(s);
    44         H = (randn(Nr,Nt) + 1i*randn(Nr,Nt))/sqrt(2*Nr);
    45         noise = sqrt(No(i)/2)*(randn(Nr,1) + 1i*randn(Nr,1));
    46         y = H*s + noise;
    47         w1 = (H*H' + No(i)*eye(Nr))^(-1) * H(:,1); % Optimum weight vector 1
    48         w2 = (H*H' + No(i)*eye(Nr))^(-1) * H(:,2); % Optimum weight vector 2
    49         W = [w1 w2];
    50         s_h = W'*y;
    51         for j = 1:Nt
    52             if s_h(j) >= 0
    53                 s_h(j) = 1;
    54             else
    55                 s_h(j) = -1;
    56             end
    57         end
    58         no_errors = no_errors + nnz(s_h-s);
    59     end
    60     BER_MMSE(i) = no_errors/no_bits;
    61 end
    62 echo on;
    63 
    64 % Plot the results:
    65 semilogy(EbNo_dB,BER_ML,'-o',EbNo_dB,BER_MMSE,'-*')
    66 xlabel('Average SNR/bit (dB)','fontsize',10)
    67 ylabel('BER','fontsize',10)
    68 legend('ML','MMSE')

    Simulation Result

    Conclusion

    It is can be seen from the simulation results that the MLD exploits
    the full diversity of order NR available in the received signal and, thus, its performance
    is comparable to that of a maximal ratio combiner (MRC) of the NR received signals,
    without the presence of interchannel interference; that is, (Ny, NR) = (1, NR). The two
    linear detectors, the MMSE detector and the ICD, achieve an error rate that decreases
    inversely as the SNR raised to the (NR - 1) power for Ny = 2 transmitting antennas.
    Thus, when NR = 2, the two linear detectors achieve no diversity, and when NR = 3,
    the linear detectors achieve dual diversity. We also note that the MMSE detector outperforms
    the ICD, although both achieve the same order of diversity. In general, with
    spatial multiplexing (Ny antennas transmitting independent data streams), the MLD
    detector achieves a diversity of order NR and the linear detectors achieve a diversity
    of order NR - Ny+ 1, for any NR >= Ny. In effect, with Ny antennas transmitting
    independent data streams and NR receiving antennas, a linear detector has NR degrees
    of freedom. In detecting any one data stream, in the presence of Ny - 1 interfering
    signals from the other transmitting antennas, the linear detectors utilize Ny -1 degrees
    of freedom to cancel the Ny - 1 interfering signals. Therefore, the effective order of
    diversity for the linear detectors is NR - (Ny -1) = NR - Ny+ 1.

    It is interesting to compare the computational complexity of the three detectors.
    We note that the complexity of the MLD grows exponentially as Af Nr, where M is the
    number of points (symbols) in the signal constellation, whereas the linear detectors
    have a complexity that grows linearly with Ny and NR. Therefore, the computational
    complexity of the MLD is significantly larger than that of the linear detectors when
    Ny and M are large. However, for a small number of transmit antennas and small
    number of signal constellation symbols (i.e., Ny <= 4 and M = 4), the computational
    complexity of MLD is rather reasonable.

    Reference,

      1. <<Contemporary Communication System using MATLAB>> - John G. Proakis

  • 相关阅读:
    怎样装两个MySQL服务器
    MySQL 8.0.12的安装与卸载
    位运算符2
    位运算符
    赋值运算符
    love心形
    变量之间运算
    变量
    标识符
    算术运算符
  • 原文地址:https://www.cnblogs.com/zzyzz/p/13582966.html
Copyright © 2020-2023  润新知