📄 diversity_stbc.m
字号:
% Space time block codes
% This is for the simple senario involving 2 transmit antennas and 1-2 receive antennas with BPSK modulation.
% Reference: S.M. Alamouti, "A simple transmit diversity technique for wireless communications",IEEE Journal on Selected Areas in Communications, vol. 16, pp. 1451-1458, Oct. 1998.
clear all;
close all;
M=2;
bps=log2(M);
% Your range of SNR
EbNodB=[1:1:12];
[a,datapoints]=size(EbNodB);
EbNo=10.^(EbNodB/10);
EsNo=bps*EbNo;
var=1./(EsNo);
%Bits per frame
NumberBits=2000;
NumberSymbols=NumberBits/bps;
%Number of transmit antennas
Mt=2;
%Number of receive antennas
Mr=2;
%Number of frame errors per SNR (since these are Monte Carlo trials, the more errors you log, the more accurate your simulated results)
err_vector=[100*ones(1,datapoints)];
max_errors = err_vector;
minBER = 10^-5;
% initialize storage
frame_errors = zeros( 1,datapoints);
bit_errors = zeros(1, datapoints);
trials = zeros(1, datapoints );
P_e = zeros(1, datapoints);
P_b = zeros(1, datapoints);
fname = strcat( 'STBC','Mt',sprintf('%d', Mt),'times','Mr',sprintf('%d', Mr),'.mat' );
% % % % see if this is a continuation
% if (fopen(fname, 'r') > 0)
% load (fname);
% end
% reseed the random number generator
randn( 'state', cputime);
for snrpoint = 1:datapoints
fprintf( '\nEbNo = %f dB\n', EbNodB(snrpoint) );
while frame_errors( snrpoint) < max_errors( snrpoint )
trials(snrpoint) = trials(snrpoint) + 1 ;
% Generate random data bits
cin=round(rand(1, NumberBits));
x=2*cin-1;
cnt=1;
r=zeros(Mr,2);
for i=1:Mt:NumberBits
h=randn(Mt,Mr)+sqrt(-1)*randn(Mt, Mr);
data_slot1=sqrt(0.5)*[x(i), x(i+1)]';
r(1:Mr,1)=transpose(h)*data_slot1+sqrt(var(snrpoint))*(randn(Mr,1)+sqrt(-1)*randn(Mr,1));
data_slot2=sqrt(0.5)*[-x(i+1), x(i)]';
r(1:Mr,2)=transpose(h)*data_slot2+sqrt(var(snrpoint))*(randn(Mr,1)+sqrt(-1)*randn(Mr,1));
MF_in(1:Mt:Mt*Mr,1)=r(1:Mr,1);
MF_in(Mt:Mt:Mt*Mr,1)=conj(r(1:Mr,2));
% For 1 receive antenna, simply comment out the the last two rows
H =[h(1,1), h(2,1);...
conj(h(2,1)), -conj(h(1,1))];
h(1,2), h(2,2);...
conj(h(2,2)), -conj(h(1,2))];
d(1:2)=H'*MF_in(1:Mt*Mr,1);
cout(1,i:i+1)=(real(d)>0);
cnt=cnt+1;
end
errors=0;
[err,vec]=find(cin~=cout);
errors=sum(err);
frame_errors(snrpoint) = frame_errors( snrpoint ) + (errors >0);
bit_errors(snrpoint ) = bit_errors(snrpoint ) + errors;
P_e(snrpoint) = frame_errors(snrpoint)/trials( snrpoint );% Frame error rate
P_b(snrpoint) = bit_errors(snrpoint)/( trials(snrpoint)*(NumberBits) );% Bit error rate
save (fname, 'frame_errors','bit_errors','trials', 'P_e', 'P_b','EbNodB');
end% trials
fprintf('%f %f \n',EbNodB(1,snrpoint),P_b(1,snrpoint) );
end%snrpoint
% STBC with 2 transmit and 2 receive antennas should have the same diversity gain as 4 branch MRC, but with a 3 dB loss in the SNR
semilogy(EbNodB, P_b,'b-o');
grid on;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -