1. 程式人生 > 實用技巧 >CCS - Space-Time Codes for MIMO Systems - Space-Time Block Codes(STBC)

CCS - Space-Time Codes for MIMO Systems - Space-Time Block Codes(STBC)

At the transmitter, the sequence of information bits is fed into a symbol mapper that maps a block of
bits into signal points {sd selected from a signal constellation such as PAM, PSK, or
QAM, consisting of M = 2^b signal points. These signal points are fed as a block to
a space-time encoder that maps the information symbols to a parallel set of identical

modulators. In turn,the modulators map the signal points into corresponding waveforms
that are transmitted simultaneously on the Nr antennas.Below, we describe two
types of space-time codes:block codesandtrellis codes.

Space-Time Block Codes

A space-time block code (STBC) is defined by a generator matrix G, having N rows

and Nr columns, of the form

  

in which the elements {gij} are signal points resulting from a mapping of information
bits to corresponding signal points from a binary or M-ary signal constellation. By
employing Ny transmit antennas, each row of G may contain up to Ny different signal
points (symbols), which are transmitted on the Ny antennas in a time slot. Thus, the

first row of symbols in G is transmitted on the Ny antennas in the first time slot, the
second row of symbols in G is transmitted on the Ny antennas in the second time slot,
and the Nth row of symbols in G is transmitted on the Ny antennas in the Nth time slot.
Therefore, N time slots are used to transmit the symbols in the N rows of the generator
matrix G.The ratio of the number of different symbols transmitted to the number of
time slots is called the spatial code rate Rs = Nt / N.

In the design of the generator matrix of a STBC, it is desirable to focus on three
principal objectives:(1) achieving the highest possible diversity of NyNR, (2) achieving
the highest possible (throughput) rate, and (3) minimizing the complexity of the
decoder.

Space-Time Block Codes(STBC)

Matlab simulation code

 1 % MATLAB script for STBC of MISO Nt=2 Nr=1 
 2 echo on;
 3 Nt = 2;                             % No. of transmit antennas
 4 Nr = 1;                             % No. of receive antennas
 5 codebook = [1+1i 1-1i -1+1i -1-1i]; % Reference codebook
 6 Es = 2;                             % Energy per symbol
 7 SNR_dB = 5:5:20;                    % SNR in dB
 8 No = Es*10.^(-1*SNR_dB/10);         % Noise variance
9 % Preallocation for speed: 10 Dist1 = zeros(1,4); % Distance vector for s1 11 Dist2 = zeros(1,4); % Distance vector for s1 12 BER = zeros(1,length(SNR_dB));
13 % Maximum Likelihood Detector: 14 echo off; 15 for i = 1:length(SNR_dB) 16 no_errors = 0; 17 no_symbols = 0; 18 while no_errors <= 100 19 s = 2*randi([0 1],1,2)-1 + 1i*(2*randi([0 1],1,2)-1); 20 no_symbols = no_symbols + 2;
21 % Channel coefficients 22 h = 1/sqrt(2) * (randn(1,2) + 1i*randn(1,2));
23 % Noise generation: 24 noise = sqrt(No(i))*(randn(2,1) + 1i*randn(2,1));
25 % Correlator outputs: 26 y(1) = h(1)*s(1) + h(2)*s(2) + noise(1); 27 y(2) = -h(1)*conj(s(2)) + h(2)*conj(s(1)) + noise(2);
28 % Estimates of the symbols s1 and s2: 29 s_h(1) = y(1)*conj(h(1)) + conj(y(2))*h(2); 30 s_h(2) = y(1)*conj(h(2)) - conj(y(2))*h(1);
31 % Maximum-Likelihood detection: 32 for j = 1 : 4 33 Dist1(j) = abs(s_h(1)-codebook(j)); 34 Dist2(j) = abs(s_h(2)-codebook(j)); 35 end 36 [Min1 idx1] = min(Dist1); 37 [Min2 idx2] = min(Dist2); 38 s_t(1) = codebook(idx1); 39 s_t(2) = codebook(idx2);
40 % Calculation of error numbers: 41 if s_t(1) ~= s(1) 42 no_errors = no_errors + 1; 43 end 44 if s_t(2) ~= s(2) 45 no_errors = no_errors + 1; 46 end 47 end 48 BER(i) = no_errors/no_symbols; 49 end 50 echo on; 51 semilogy(SNR_dB,BER) 52 xlabel('SNR (dB)') 53 ylabel('Symbol Error Rate (SER)') 54 legend('Alamouti: 4-PSK')


simulation result

Reference,

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