📄 ofdmstbc1.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% All rights reserved by A. Elazreg and Prof J. Chambers %
% Loughborough University %
% % A SPACE TIME CODED TRANSMITTER DIVERSITY TECHNIQUE %
% FOR FREQUENCY SELECTIVE FADING CHANNELS %
% Script for computing the BER for QPSK in STBC-OFDM %
% %
% Author : Abdulghani M.Elazreg %
% Email : A.elazreg@lboro.ac.uk %
% Version : 2.0 %
% Date : 10 -10- 2008 %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clear
dataNo=64;
%Number of OFDM Blocks
No_of_block=200;
%Number of multipath channel
Mc=2;
% Single to Noise Ratio
snrdb=0:20
% Start of BER index
counter=1;
% Start of cycilc prefix
cp_start=50;
for i=0:length(snrdb)-1
%Start of SER value
SERerror=0;
%Start of SER value
BERerror=0;
for k=1:No_of_block
n_scale=sqrt(10.^(-i/10));
qpsk=(sign(randn(dataNo,2,1))+j*sign(randn(dataNo,2,1)))./sqrt(2);
%Start of OFDM
%1- IFFT to STBC signal during two time slot
x1=sqrt(dataNo)*ifft(qpsk(:,1));
x2=sqrt(dataNo)*ifft(qpsk(:,2));
x11=sqrt(dataNo)*ifft(-conj(qpsk(:,2)));
x22=sqrt(dataNo)*ifft(conj(qpsk(:,1)));
%2-Adding CP to STBC signal during two time slot
t1=[x1(cp_start:dataNo);x1];
t2=[x2(cp_start:dataNo);x2];
t11=[x11(cp_start:dataNo);x11];
t22=[x22(cp_start:dataNo);x22];
[t1 t11 t2 t22];
%generate Noise
%1- Noise 1 for channel one
noise1=((n_scale)*(randn(1,length(t1))+j*randn(1,length(t1))))./sqrt(2);
%1- Noise 2 for channel two
noise2=((n_scale)*(randn(1,length(t2))+j*randn(1,length(t2))))./sqrt(2);
% generate channel
h0=(randn(1,3)+j*randn(1,3))./sqrt(2);
h1=(randn(1,3)+j*randn(1,3))./sqrt(2);
%frequncey domain
h0f=fft([h0 zeros(1,64)]);
h1f=fft([h1 zeros(1,64)]);
%Received signals
r0=(filter(h0,[1],t1))+(filter(h1,[1],t2))+noise1.';
r1=(filter(h0,[1],t22)+filter(h1,[1],t11))+noise2.';
%Remove CP
y1=r0(dataNo-cp_start+2:length(r0));
y2=r1(dataNo-cp_start+2:length(r1));
[y1 y2];
yT1=sqrt(1/dataNo)*fft(y1);
yT2=sqrt(1/dataNo)*fft(y2);
[yT1 yT2];
%### Combiner ###
for m=1:64
hmat=[h0f(m) h1f(m);conj(h1f(m)) -conj(h0f(m))];
rmat=[yT1(m) conj(yT2(m))];
xtemp=rmat*hmat';
s_11 = sign(real(xtemp(1)))
s_22 = sign(imag(xtemp(1)))
s0hat(m) = (s_11 + j*s_22)./sqrt(2)
s_33 = sign(real(xtemp(2)));
s_44 = sign(imag(xtemp(2)));
s1hat(m) = (s_33 + j*s_44)./sqrt(2)
end
Errors1 = sum(qpsk(:,1).'~=s0hat);
Errors2 = sum(qpsk(:,2).'~=s1hat);
[Errors1 Errors2];
BERerror= BERerror+Errors1+Errors2;
end
BER(counter)=BERerror./(4*dataNo*No_of_block);
%Ser(counter)=SERerror./(dataNo*No_of_block) ;
counter=counter+1;
end
semilogy(snrdb,BER,'mx-','LineWidth',3,'Color',[.4 1 .3]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -