MIMO signal detection based on K-Best spherical decoding algorithm

Table of Contents

1. Basic principles of K-Best spherical decoding algorithm

2. K-Best spherical decoding algorithm theory

3. Performance analysis of K-Best spherical decoding algorithm

4. K-Best spherical decoding algorithm matlab program

5. K-Best spherical decoding algorithm matlab simulation


A MIMO (Multiple Input Multiple Output) system is a wireless communications technology that utilizes multiple transmit and receive antennas to increase signal capacity and reliability. In a MIMO system, the signal sent by the transmitter reaches the receiver through multiple paths, which requires the receiver to use a signal detection algorithm to restore the original signal. The K-Best spherical decoding algorithm is a commonly used MIMO signal detection algorithm. It can use multiple signals received at the receiving end to improve the accuracy of signal detection.

1. Basic principles of K-Best spherical decoding algorithm

The K-Best spherical decoding algorithm is a greedy algorithm that uses iterative search to find the best solution in the received signal. In each iteration, the algorithm calculates the path metrics of all possible solutions and selects the K solutions with the smallest path metrics as the best solution for the current iteration. In subsequent iterations, the algorithm will continue to search and update the K best solutions until the preset number of iterations is reached or certain stopping conditions are met.

2. K-Best spherical decoding algorithm theory

The K-Best spherical decoding algorithm includes the following steps:

  1. Initialization: Suppose the received signal is Y, the transmitted signal is X, the noise is N, the number of receiving antennas is M, the number of transmitting antennas is N, and the number of iterations is T. Initialize an empty collection best_solutions to store the best solution for each iteration.
  2. For each iteration i, from 1 to T:
    a. Calculate the path metrics for all possible solutions, that is, calculate the error between each solution and the received signal. Let the solution vector be x and the path metric be d(x, Y).
    b. Select the K solutions with the smallest path metrics as the best solutions for the current iteration, and add them to the best_solutions set.
    c. Select a solution with the smallest path metric from the best_solutions set as the best solution for the current iteration, recorded as best_solution.
    d. Update best_solution and make corrections by assigning part of the probability to other possible solutions. Specifically, for each possible solution x, the difference measure Δd(x, best_solution) between it and best_solution is calculated. If Δd(x, best_solution) is less than a certain preset threshold Δd_threshold, a part of the probability is assigned to the solution. The updated solution is used as the initial solution for the next iteration.
  3. Output the solution with the smallest path metric in the best_solutions set as the final detection result.

3. Performance analysis of K-Best spherical decoding algorithm

The performance of the K-Best spherical decoding algorithm is affected by multiple factors, including the number of iterations, K value, path metric function, threshold settings, etc. Among them, the number of iterations and K value are the key factors affecting the performance of the algorithm. The more iterations, the more possible solutions the algorithm searches, but it also increases the computational complexity and time cost. The larger the K value, the more complete the possible solutions are searched, but it also increases the computational complexity. Therefore, the appropriate number of iterations and K value need to be selected according to the actual situation.

The implementation of MIMO signal detection based on the K-Best spherical decoding algorithm needs to be combined with specific wireless communication systems and hardware equipment. Generally speaking, the implementation process includes the following steps:

  1. Data collection: Send signals through the transmitting antenna of the MIMO system, receive signals through the receiving antenna, and perform preprocessing (such as filtering, amplification, etc.) and digital processing (such as AD conversion, etc.) on the received signals to obtain digital signal data.
  2. Data processing: The digital signal data is processed by the K-Best spherical decoding algorithm to obtain the detection results.
  3. Result output: Post-process the detection results (such as decoding, modulation, etc.) to obtain the final output data.
  4. Performance evaluation: Evaluate the performance of the algorithm (such as bit error rate, signal-to-noise ratio, etc.) by comparing the error between the output data and the original data. If the performance does not meet the requirements, the algorithm parameters (such as the number of iterations, K value, etc.) can be adjusted for optimization.

4. K-Best spherical decoding algorithm matlab program

clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
rng('default')
 
Mode_Type1 = 4;
Mode_Map1 = [-(Mode_Type1-1):2:Mode_Type1-1];

Mode_Type2 = 16;
Mode_Map2 = [-(Mode_Type2-1):2:Mode_Type2-1];

Mode_Type3 = 64;
Mode_Map3 = [-(Mode_Type3-1):2:Mode_Type3-1];

Mode_Type4 = 256;
Mode_Map4 = [-(Mode_Type4-1):2:Mode_Type4-1];

Sim_EbN0 = [0:5:25];
Ntant = 4;
Nrant = 4;
Bers = zeros(1,length(Sim_EbN0));
K = 10;
Tj = [2000,1000,500,500,400,200];

for j = 1:length(Sim_EbN0)
    Eb_N0 = Sim_EbN0(j);
    sigma = 10^(-Eb_N0/20);
    Nerr = 0;
    Num = 0;
    %Perform bit error rate statistics based on the bit error rate decision threshold
    while Nerr <= Tj(j)
          Nerr
          %generate channel
          Nt = Ntant;
          Nr = Nrant;
          H(1:Nt ,1:Nr) = randn(Nt ,Nr);
          H(Nt + 1:2*Nt,1:Nr) = randn(Nt ,Nr);
          H(1:Nt ,Nr + 1:2*Nr) =-H(Nt + 1:2*Nt,1:Nr);
          H(Nt + 1:2*Nt,Nr + 1:2*Nr) = H(1:Nt ,1:Nr);
          H = 1/sqrt(2)*H;
          %QR decomposition
          [Q,R] = qr(H);
          %The amount of noise generated
          N = sigma*randn(Nr*2,1);
          
          SignalTx = [];
          for jj = 1:Ntant
              %Send signal
              %Four antennas, four modulation methods
              SignalTx1 = Mode_Map1(unidrnd(Mode_Type1,2*Ntant/4,1))';%antenna 1
              SignalTx2 = Mode_Map2(unidrnd(Mode_Type2,2*Ntant/4,1))';%antenna 2
              SignalTx3 = Mode_Map3(unidrnd(Mode_Type3,2*Ntant/4,1))';%antenna 3
              SignalTx4 = Mode_Map4(unidrnd(Mode_Type4,2*Ntant/4,1))';%antenna 4
              if mod(Num,Ntant) == 0
                 SignalTx = [SignalTx;SignalTx1];
              end
              if mod(Num,Ntant) == 1
                 SignalTx = [SignalTx;SignalTx2];
              end
              if mod(Num,Ntant) == 2
                 SignalTx = [SignalTx;SignalTx3];
              end
              if mod(Num,Ntant) == 3
                 SignalTx = [SignalTx;SignalTx4];
              end
          end
          %The last signal sent
          if mod(Num,Ntant) == 0
             %receive signal
             SignalRx = H*SignalTx + N;
             %Finally received signal%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%
             NQ = Q'*N;
             RN = R*SignalTx + NQ;
             SignalRX_rec = func_KSE(R,RN,K,Mode_Map1,Mode_Type1);
          end
          %The last signal sent
          if mod(Num,Ntant) == 1
             %receive signal
             SignalRx = H*SignalTx + N;
             %Finally received signal%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%
             NQ = Q'*N;
             RN = R*SignalTx + NQ;
             SignalRX_rec = func_KSE(R,RN,K,Mode_Map2,Mode_Type2);
          end
          %The last signal sent
          if mod(Num,Ntant) == 2
             %receive signal
             SignalRx = H*SignalTx + N;
             %Finally received signal%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%
             NQ = Q'*N;
             RN = R*SignalTx + NQ;
             SignalRX_rec = func_KSE(R,RN,K,Mode_Map3,Mode_Type3);
          end
          %The last signal sent
          if mod(Num,Ntant) == 3
             %receive signal
             SignalRx = H*SignalTx + N;
             %Finally received signal%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%
             NQ = Q'*N;
             RN = R*SignalTx + NQ;
             SignalRX_rec = func_KSE(R,RN,K,Mode_Map4,Mode_Type4);
          end
          %KSE
          Nerr = Nerr + sum(SignalRX_rec(:,1)~=SignalTx);
          Num = Num + 1;
    end
    Bers(j) = Nerr/Num/Ntant/2;
end

figure;
semilogy(Sim_EbN0,Bers,'b-o');
grid on
xlabel('EbN0');
ylabel('Ber');
axis([0,30,1e-5,1]);

if K == 2;
   save r1.mat Sim_EbN0 Bers
end
if K == 5;
   save r2.mat Sim_EbN0 Bers
end
if K == 10;
   save r3.mat Sim_EbN0 Bers
end
if K == 12;
   save r4.mat Sim_EbN0 Bers
end

figure;
load r1.mat
semilogy(Sim_EbN0,Bers,'k-o');
hold on;
load r2.mat
semilogy(Sim_EbN0,Bers,'k-^');
hold on;
load r3.mat
semilogy(Sim_EbN0,Bers,'k-s');
hold on;
load r4.mat
semilogy(Sim_EbN0,Bers,'k->');
hold on;
grid on
xlabel('EbN0');
ylabel('Ber');
axis([0,30,1e-5,1]);
legend('K = 2','K = 5','K = 10','K = 12');
up3059

5. K-Best spherical decoding algorithm matlab simulation

The knowledge points of the article match the official knowledge files, and you can further learn related knowledge. Algorithm skill tree Home page Overview 57205 people are learning the system