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.

[]=Blind_recognition_STBC4_simulation_results(N,nr,Modulation,Mod_State_Nb)
function []=Blind_recognition_STBC4_simulation_results(N,nr,Modulation,Mod_State_Nb)

%HELP Blind_recognition_STBC4_simulation_results
%
%Section VI.B of the paper. Perform monte-carlo simulation to approximate
%the average_probability of correct recognition (APCR). 7 STBCs using 4 antennas are
%considered.
%
%Input:    
%
%        - N (Number of received sample)
%        - nr: Number of receiver antennas
%        - Modulation: 'PSK','PAM' or 'QAM'
%        - Mod_State_Nb: Nomber of state of the modulation
%
%Ouput:  - graphics and matlab files are stored in the
%          simulation_results directory.
%
%exemple: Blind_recognition_STBC4_simulation_results(512,8,'PSK',4)
%
%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];
SNR_list=[-15:5:5];
Nb_Monte_Carlo_trials_per_SNR=1;
nt=4;


fprintf('----- Simulation parameters -----\n');
fprintf('Modulation: %i-%s \n',Mod_State_Nb,Modulation);
fprintf('Receiver: %i samples intercepted by %i antennas\n',N,nr);


% for loop for each SNR value

for index_SNR=1:length(SNR_list)

    SNR=SNR_list(index_SNR);
    fprintf('----- SNR=%i dB (%i sur %i) -----\n',SNR,index_SNR,length(SNR_list));
   
    % For each SNR, counts the number of correct detection
    % Nb_correct_detection_Optimal=0;
    Nb_correct_detection_SOS=0;
    Nb_correct_detection_CP=0;

    % Probability_correct_recognition_Optimal(index_SNR,:)=zeros(1,length(num_code_list));
    Probability_correct_recognition_SOS(index_SNR,:)=zeros(1,length(num_code_list));
    Probability_correct_recognition_CP(index_SNR,:)=zeros(1,length(num_code_list));


    % Monte Carlo trials
    for index_trial=1:Nb_Monte_Carlo_trials_per_SNR
      
        for index_code=1:length(num_code_list)

            code_name=code_name_list(index_code);
            rate=rate_list(index_code);
            num_code=num_code_list(index_code);
            
            %% MIMO Communication Simulation
            
            symbol_rate=str2num(cell2mat(rate));
            
            data=randint(1,N*symbol_rate,Mod_State_Nb);
            
            %modulation
            switch Modulation
                case 'PSK'
                    symbols=pskmod(data,Mod_State_Nb); 
                    alphabet_modulation=pskmod([0:Mod_State_Nb-1],Mod_State_Nb);
                case 'PAM'
                    symbols=pammod(data,Mod_State_Nb);
                    alphabet_modulation=pammod([0:Mod_State_Nb-1],Mod_State_Nb);
                case 'QAM'
                    symbols=qammod(data,Mod_State_Nb);
                    alphabet_modulation=qammod([0:Mod_State_Nb-1],Mod_State_Nb);
            end

            %normalisation $E[|s|^2]=2$.
            variance_signal=mean(abs(alphabet_modulation).^2);
            symbols=symbols/sqrt(variance_signal);    
            coded_signals=space_time_coding(symbols,cell2mat(code_name),cell2mat(rate),num_code);
            coded_signals=coded_signals(:,1:N);   %%make sure that the number of symbols transmitted is equal to N 
            
            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;
       
            %% Optimal Classifier (too computational-expensive)
            % [code_name_d,Rate_d,Num_code_d]=Optimal_Classifier(Y,H,Modulation,Mod_State_Nb,noise_variance,code_name_list,rate_list,num_code_list,0);
            %             
            % result=(strcmp(code_name,code_name_d)+strcmp(rate,Rate_d)+(num_code==Num_code_d))==3;
            % Nb_correct_detection_Optimal=Nb_correct_detection_Optimal+result;
            % Probability_correct_recognition_Optimal(index_SNR,index_code)=Probability_correct_recognition_Optimal(index_SNR,index_code)+result;
            
            %% SOS-STBC Classifier            
                        
            [code_name_d,Rate_d,Num_code_d]=SOS_STBC_Classifier(Y,H,noise_variance,code_name_list,rate_list,num_code_list,0);
            
            result=(strcmp(code_name,code_name_d)+strcmp(rate,Rate_d)+(num_code==Num_code_d))==3;
            Nb_correct_detection_SOS=Nb_correct_detection_SOS+result;     
            Probability_correct_recognition_SOS(index_SNR,index_code)=Probability_correct_recognition_SOS(index_SNR,index_code)+result;

            %% CP Classifier    
                
            [code_name_d,Rate_d,Num_code_d]=CP_Classifier(Y,code_name_list,rate_list,num_code_list,0);
            
            result=(strcmp(code_name,code_name_d)+strcmp(rate,Rate_d)+(num_code==Num_code_d))==3;
            Nb_correct_detection_CP=Nb_correct_detection_CP+result;     
            Probability_correct_recognition_CP(index_SNR,index_code)=Probability_correct_recognition_CP(index_SNR,index_code)+result;
         
        end          
    end        

    % Compute Average Probability of Correct recognition (AVPCR)

    % APCR_Optimal(index_SNR)=Nb_correct_detection_Optimal/(Nb_Monte_Carlo_trials_per_SNR*length(num_code_list));
    % fprintf('Average Probability of correct detection: Optimal %f\n',APCR_Optimal(index_SNR));
       
    APCR_SOS(index_SNR)=Nb_correct_detection_SOS/(Nb_Monte_Carlo_trials_per_SNR*length(num_code_list));
    fprintf('Average Probability of correct detection: Optimal %f\n',APCR_SOS(index_SNR));
    
    APCR_CP(index_SNR)=Nb_correct_detection_CP/(Nb_Monte_Carlo_trials_per_SNR*length(num_code_list));
    fprintf('Average Probability of correct detection: Optimal %f\n',APCR_CP(index_SNR));
    
    % Compute Probabilty of correct recognition for each code
    % Probability_correct_recognition_Optimal(index_SNR,:)=Probability_correct_recognition_Optimal(index_SNR,:)/Nb_Monte_Carlo_trials_per_SNR;
    Probability_correct_recognition_SOS(index_SNR,:)=Probability_correct_recognition_SOS(index_SNR,:)/Nb_Monte_Carlo_trials_per_SNR;
    Probability_correct_recognition_CP(index_SNR,:)=Probability_correct_recognition_CP(index_SNR,:)/Nb_Monte_Carlo_trials_per_SNR;
    
    
end    


cd simulation_results
              
%% Display Average Probability of Correct recognition (AVPCR)
h_APCR=figure;
hold on;
plot(SNR_list,APCR_SOS,'o-');
plot(SNR_list,APCR_CP,'*-');
hold off;
grid;
xlabel('SNR (dB)');
legend('SOS-STBC','(blind) CP');
ylabel('Average Probability of Correct Detection');
% save figure
instruction=sprintf('Simulation_result_STBC4_APCR_N_%i_nr_%i.fig',N,nr);
saveas(h_APCR,instruction);

%% Display Probability of Correct recognition for each code
for index_code=1:length(num_code_list)
    
    symbol_rate=cell2mat(rate_list(index_code));

    h=figure;
    hold on;
    plot(SNR_list,Probability_correct_recognition_SOS(:,index_code),'o-');
    plot(SNR_list,Probability_correct_recognition_CP(:,index_code),'*-');
    hold off;
    grid;
    xlabel('SNR (dB)');
    legend('SOS-STBC','(blind) CP');
    ylabel(sprintf('Probability of Correct Detection for %s-rate %s (%i)',symbol_rate(find(symbol_rate ~= '/')),code_name_list{index_code},num_code_list(index_code)));
    ylim([0 1.01]);
    
    % save figure
    instruction=sprintf('Simulation_result_STBC4_PCR_%s_rate_%s_%i_N_%i_nr_%i.fig',symbol_rate(find(symbol_rate ~= '/')),code_name_list{index_code},num_code_list(index_code),N,nr);
    saveas(h,instruction);
end

fprintf('OK\n\n');



Contact us at files@mathworks.com