Code covered by the BSD License  

Highlights from
Blind recognition of space time codes

image thumbnail
from Blind recognition of space time codes by Choqueuse Vincent
These scripts implement several algorithms for the blind recognition of space time block codes.

[]=one_shot_STBC4(code_name,rate,num_code,nr,N,Modulation,Mod_State_Nb,SNR)
function []=one_shot_STBC4(code_name,rate,num_code,nr,N,Modulation,Mod_State_Nb,SNR)

%HELP one_shot_STBC4
%
%Blind detection of the STBC of a MIMO communication using 4 antennas.
%The list of provided STCB is:
%
%Spatial Multiplexing (code_name='SM', rate='4', num_code=1)
%3-rate STBC4  (code_name='STBC4', rate='3', num_code=1)
%2-rate STBC4  (code_name='STBC4', rate='2', num_code=1 or 2)
%1-rate STBC4  (code_name='STBC4', rate='1', num_code=1)
%3/4-rate STBC4  (code_name='OSTBC4', rate='3/4', num_code=1)
%1/2-rate STBC4  (code_name='OSTBC4', rate='1/2', num_code=1)
%
%Input:  - code_name (see above)
%        - rate (see above)
%        - num_code: 1 (see above)
%        - nr (> 4)
%        - N (Number of received sample)
%        - Modulation: 'PSK','PAM' or 'QAM'
%        - Mod_State_Nb: Nomber of state of the modulation
%        - SNR (dB)
%
%Input:  - None
%
%Exemple: one_shot_STBC4('OSTBC4','3/4',1,5,512,'PSK',4,10)
%
%reference: [1] V. Choqueuse, M. Marazin, L. Collin, K.C. Yao, K and G. Burel
%"Blind Recognition of Linear SpaceTime Block Codes: A Likelihood-Based
%Approach" IEEE Transactions on Signal Processing, Vol 58 (3), p 1290-1299,
%2010


code_name_list={'SM','STBC4','STBC4','STBC4','STBC4','OSTBC4','OSTBC4'};
rate_list={'4','3','2','2','1','3/4','1/2'};
num_code_list=[1 1 1 2 1 1 1];
rate_num=str2num(rate);

%% MIMO Communication Simulation

data=randint(1,N*rate_num,Mod_State_Nb); %symboles qui seront cod
        
%modulation
switch Modulation
      case 'PSK'
             symbols_s=pskmod(data,Mod_State_Nb);   
             alphabet_modulation=pskmod([0:Mod_State_Nb-1],Mod_State_Nb);
     case 'QAM'
             symbols_s=qammod(data,Mod_State_Nb);
             alphabet_modulation=qammod([0:Mod_State_Nb-1],Mod_State_Nb);
     case 'PAM'
             symbols_s=pammod(data,Mod_State_Nb);
             alphabet_modulation=pammod([0:Mod_State_Nb-1],Mod_State_Nb);
end

%normalisation $E[|s|^2]=2$.
variance_signal=mean(abs(alphabet_modulation).^2);
symbols_s=symbols_s/sqrt(variance_signal);
 
%space-time encoding
[coded_signals]=space_time_coding(symbols_s,code_name,rate,num_code);
nt=size(coded_signals,1);         
total_power_nt=trace((coded_signals*coded_signals')/(size(coded_signals,2)));

% channel matrix
H=sqrt(0.5)*(randn(nr,nt)+i*randn(nr,nt));
Y_without_noise=H*coded_signals;

%Additive noise
noise_variance=total_power_nt/(10^(SNR/10));
B=(sqrt(noise_variance/2))*(randn(nr,N)+i*randn(nr,N));
Y=Y_without_noise+B;

%% STBC Classification

fprintf('-- Blind recognition of the STBC --\n\n');

%Optimal Classifier (can be computational expensive)
fprintf('------- Optimal Classifier --------\n');
Optimal_Classifier(Y,H,Modulation,Mod_State_Nb,noise_variance,code_name_list,rate_list,num_code_list,1);
%SOS-STBC Classifier
fprintf('------- SOS-STBC Classifier -------\n');
SOS_STBC_Classifier(Y,H,noise_variance,code_name_list,rate_list,num_code_list,1);
%CP Classifier
fprintf('---------- CP Classifier ----------\n');
CP_Classifier(Y,code_name_list,rate_list,num_code_list,1);

   

Contact us at files@mathworks.com