Below is the matlab code for alamouti model
%Transmitter part if syms_in is the symbols to the input of 2 Tx antenna
function syms_out = tx_Alamouti(syms_in)
num_symbols = length(syms_in);
ant1_syms = zeros(1,num_symbols);
ant2_syms = zeros(1,num_symbols);
syms_out = zeros(2,num_symbols);
% unchanged symbols
ant1_syms(1:2:num_symbols) = syms_in(1:2:num_symbols);
ant2_syms(1:2:num_symbols) = syms_in(2:2:num_symbols);
% transformed symbols
ant1_syms(2:2:num_symbols) = -conj(syms_in(2:2:num_symbols));
ant2_syms(2:2:num_symbols) = conj(syms_in(1:2:num_symbols));
syms_out(1,
= ant1_syms;
syms_out(2,
= ant2_syms;
%Receiver Alamouti with fading coefficints(csi) and received symbols as input
function syms_out = rx_Alamouti(syms_in,csi)
[nr n_syms] = size(syms_in);
decoupled_syms = zeros(1,n_syms);
combined_syms = zeros(1,n_syms);
% for spread
if n_syms~=(size(csi,2)*2)
ns = n_syms/(size(csi,2)*2);
m = size(csi,1);
h = reshape(repmat(csi,ns,1),m,[]);
else
h = csi;
end
% combine
for rx_ant = 1:nr
decoupled_syms
,1:2:n_syms) = conj(h((rx_ant-1)*2+1,
).*syms_in(rx_ant,1:2:n_syms) + h((rx_ant-1)*2+2,
.*conj(syms_in(rx_ant,2:2:n_syms));
decoupled_syms
,2:2:n_syms) = conj(h((rx_ant-1)*2+2,
).*syms_in(rx_ant,1:2:n_syms) - h((rx_ant-1)*2+1,
.*conj(syms_in(rx_ant,2:2:n_syms));
combined_syms = combined_syms + decoupled_syms;
end
syms_out = combined_syms/nr;