?? jc.m
字號:
%space-time code matrix:[x1 x2 x3 x4;-x2* x1* -x4* x3*;x1 x2 -x3- x4;-x2* x1* x4* -x3*];
clear
Nt=4;
Nr=1;
l=0;
co_time=4;
min_snr=0; %minimum SNR
max_snr=20;%maximum SNR
SNR_step=2;
symbol_per_frame=1200;
tot_frame_tx=zeros(1,(max_snr-min_snr)/SNR_step+1);
tot_err_bit=zeros(1,(max_snr-min_snr)/SNR_step+1);
M=2;
if M==2
dh=[1;j;-j;-1]/2;
jd=[];
dc=[0 0;0 1;1 0;1 1];
else
dh=[1;(1-j)/sqrt(2);(-1+j)/sqrt(2);-1;(1+j)/sqrt(2);-j;j;(-1-j)/sqrt(2)]/2;
dc=[0 0 0;0 0 1;0 1 0;0 1 1;1 0 0;1 0 1;1 1 0;1 1 1];
end
for snr=min_snr:SNR_step:max_snr
clc
disp('Wait until SNR=');disp(max_snr);
snr
sig =sqrt(1/4*Nt/(10^(snr/10)));
index=(snr-min_snr)/SNR_step+1;
for fcnt=1:10
tot_frame_tx(index) = tot_frame_tx(index)+1;
bit_sequence=round(rand(1,symbol_per_frame));
X1=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1];
softbit=[];
mapping_sequence =Mpskmod(bit_sequence,dh,M);
for k=1:4:symbol_per_frame/M
if((conj(mapping_sequence(k))*mapping_sequence(k+3)-mapping_sequence(k+1)*conj(mapping_sequence(k+2))~=0)&((abs(mapping_sequence(k)))^2+(abs(mapping_sequence(k+1)))^2+(abs(mapping_sequence(k+2)))^2+(abs(mapping_sequence(k+3)))^2)==1)
b=(conj(mapping_sequence(k+1))*mapping_sequence(k+2)-mapping_sequence(k)*conj(mapping_sequence(k+3)))/(conj(mapping_sequence(k))*mapping_sequence(k+3)-mapping_sequence(k+1)*conj(mapping_sequence(k+2)));
jd=acos(real(b));
end
X2=[ mapping_sequence(k) mapping_sequence(k+1) mapping_sequence(k+2) mapping_sequence(k+3);
-conj(mapping_sequence(k+1)) conj(mapping_sequence(k)) -conj(mapping_sequence(k+3)) conj(mapping_sequence(k+2));
mapping_sequence(k+3)*exp(j*jd) -mapping_sequence(k+2) -exp(j*jd)*mapping_sequence(k+1) mapping_sequence(k);
-conj(mapping_sequence(k+2)) -exp(-j*jd)*conj(mapping_sequence(k+3)) conj(mapping_sequence(k)) exp(-j*jd)*conj(mapping_sequence(k+1));];
X=X2*X1;
H=(randn(Nt,Nr)+j*randn(Nt,Nr))/sqrt(2);
addtional_gaussian_noise1=sig*(randn(co_time,Nr)+j*randn(co_time,Nr))/sqrt(2);
addtional_gaussian_noise=sig*(randn(co_time,Nr)+j*randn(co_time,Nr))/sqrt(2);
R1=X1*H+addtional_gaussian_noise1;
R=X*H+addtional_gaussian_noise;
D1=0;
D2=0;
D3=0;
D4=0;
for ii=1:Nr
D1=D1+real((R1(1,ii)*conj(R(1,ii))+conj(R1(2,ii))*R(2,ii)+R1(4,ii)*conj(R(4,ii))+conj(R1(3,ii))*R(3,ii))*dh);
D2=D2+real((-R(1,ii)*conj(R1(1,ii))+conj(R(2,ii))*R1(2,ii)-exp(j*jd)*R1(3,ii)*conj(R(3,ii))+exp(j*jd)*conj(R1(4,ii))*R(4,ii))*dh);
D3=D3+real((R1(3,ii)*conj(R(3,ii)) +conj(R1(4,ii))*R(4,ii)-R1(2,ii)*conj(R(2,ii))-conj(R1(1,ii))*R(1,ii))*dh);
D4=D4+real((R1(1,ii)*conj(R(1,ii)*exp(j*jd))-conj(R1(3,ii))*R(3,ii)+R1(4,ii)*conj(R(4,ii))-conj(R1(2,ii))*R(2,ii)*exp(j*jd))*dh);
end
jd=pi
a1=max(real((R1(1,ii)*conj(R(1,ii))+conj(R1(2,ii))*R(2,ii)+R1(4,ii)*conj(R(4,ii))+conj(R1(3,ii))*R(3,ii))*(1/2))+real((-R(1,ii)*conj(R1(1,ii))+conj(R(2,ii))*R1(2,ii)-exp(j*jd)*R1(3,ii)*conj(R(3,ii))+exp(j*jd)*conj(R1(4,ii))*R(4,ii))*(-1/2))+real((R1(3,ii)*conj(R(3,ii)) +conj(R1(4,ii))*R(4,ii)-R1(2,ii)*conj(R(2,ii))-conj(R1(1,ii))*R(1,ii))*(-j/2))+real((R1(1,ii)*conj(R(1,ii)*exp(j*jd))-conj(R1(3,ii))*R(3,ii)+R1(4,ii)*conj(R(4,ii))-conj(R1(2,ii))*R(2,ii)*exp(j*jd))*(j/2)))
a2=max(real((R1(1,ii)*conj(R(1,ii))+conj(R1(2,ii))*R(2,ii)+R1(4,ii)*conj(R(4,ii))+conj(R1(3,ii))*R(3,ii))*(1/2))+real((-R(1,ii)*conj(R1(1,ii))+conj(R(2,ii))*R1(2,ii)-exp(j*jd)*R1(3,ii)*conj(R(3,ii))+exp(j*jd)*conj(R1(4,ii))*R(4,ii))*(-1/2))+real((R1(3,ii)*conj(R(3,ii)) +conj(R1(4,ii))*R(4,ii)-R1(2,ii)*conj(R(2,ii))-conj(R1(1,ii))*R(1,ii))*(j/2))+real((R1(1,ii)*conj(R(1,ii)*exp(j*jd))-conj(R1(3,ii))*R(3,ii)+R1(4,ii)*conj(R(4,ii))-conj(R1(2,ii))*R(2,ii)*exp(j*jd))*(-j/2)))
a3=max(real((R1(1,ii)*conj(R(1,ii))+conj(R1(2,ii))*R(2,ii)+R1(4,ii)*conj(R(4,ii))+conj(R1(3,ii))*R(3,ii))*(j/2))+real((-R(1,ii)*conj(R1(1,ii))+conj(R(2,ii))*R1(2,ii)-exp(j*jd)*R1(3,ii)*conj(R(3,ii))+exp(j*jd)*conj(R1(4,ii))*R(4,ii))*(-j/2))+real((R1(3,ii)*conj(R(3,ii)) +conj(R1(4,ii))*R(4,ii)-R1(2,ii)*conj(R(2,ii))-conj(R1(1,ii))*R(1,ii))*(1/2))+real((R1(1,ii)*conj(R(1,ii)*exp(j*jd))-conj(R1(3,ii))*R(3,ii)+R1(4,ii)*conj(R(4,ii))-conj(R1(2,ii))*R(2,ii)*exp(j*jd))*(-1/2)))
a4=max(real((R1(1,ii)*conj(R(1,ii))+conj(R1(2,ii))*R(2,ii)+R1(4,ii)*conj(R(4,ii))+conj(R1(3,ii))*R(3,ii))*(j/2))+real((-R(1,ii)*conj(R1(1,ii))+conj(R(2,ii))*R1(2,ii)-exp(j*jd)*R1(3,ii)*conj(R(3,ii))+exp(j*jd)*conj(R1(4,ii))*R(4,ii))*(-j/2))+real((R1(3,ii)*conj(R(3,ii)) +conj(R1(4,ii))*R(4,ii)-R1(2,ii)*conj(R(2,ii))-conj(R1(1,ii))*R(1,ii))*(-1/2))+real((R1(1,ii)*conj(R(1,ii)*exp(j*jd))-conj(R1(3,ii))*R(3,ii)+R1(4,ii)*conj(R(4,ii))-conj(R1(2,ii))*R(2,ii)*exp(j*jd))*(1/2)))
a5=max(real((R1(1,ii)*conj(R(1,ii))+conj(R1(2,ii))*R(2,ii)+R1(4,ii)*conj(R(4,ii))+conj(R1(3,ii))*R(3,ii))*(-j/2))+real((-R(1,ii)*conj(R1(1,ii))+conj(R(2,ii))*R1(2,ii)-exp(j*jd)*R1(3,ii)*conj(R(3,ii))+exp(j*jd)*conj(R1(4,ii))*R(4,ii))*(j/2))+real((R1(3,ii)*conj(R(3,ii)) +conj(R1(4,ii))*R(4,ii)-R1(2,ii)*conj(R(2,ii))-conj(R1(1,ii))*R(1,ii))*(1/2))+real((R1(1,ii)*conj(R(1,ii)*exp(j*jd))-conj(R1(3,ii))*R(3,ii)+R1(4,ii)*conj(R(4,ii))-conj(R1(2,ii))*R(2,ii)*exp(j*jd))*(-1/2)))
a6=max(real((R1(1,ii)*conj(R(1,ii))+conj(R1(2,ii))*R(2,ii)+R1(4,ii)*conj(R(4,ii))+conj(R1(3,ii))*R(3,ii))*(-j/2))+real((-R(1,ii)*conj(R1(1,ii))+conj(R(2,ii))*R1(2,ii)-exp(j*jd)*R1(3,ii)*conj(R(3,ii))+exp(j*jd)*conj(R1(4,ii))*R(4,ii))*(j/2))+real((R1(3,ii)*conj(R(3,ii)) +conj(R1(4,ii))*R(4,ii)-R1(2,ii)*conj(R(2,ii))-conj(R1(1,ii))*R(1,ii))*(-1/2))+real((R1(1,ii)*conj(R(1,ii)*exp(j*jd))-conj(R1(3,ii))*R(3,ii)+R1(4,ii)*conj(R(4,ii))-conj(R1(2,ii))*R(2,ii)*exp(j*jd))*(1/2)))
a7=max(real((R1(1,ii)*conj(R(1,ii))+conj(R1(2,ii))*R(2,ii)+R1(4,ii)*conj(R(4,ii))+conj(R1(3,ii))*R(3,ii))*(-1/2))+real((-R(1,ii)*conj(R1(1,ii))+conj(R(2,ii))*R1(2,ii)-exp(j*jd)*R1(3,ii)*conj(R(3,ii))+exp(j*jd)*conj(R1(4,ii))*R(4,ii))*(1/2))+real((R1(3,ii)*conj(R(3,ii)) +conj(R1(4,ii))*R(4,ii)-R1(2,ii)*conj(R(2,ii))-conj(R1(1,ii))*R(1,ii))*(j/2))+real((R1(1,ii)*conj(R(1,ii)*exp(j*jd))-conj(R1(3,ii))*R(3,ii)+R1(4,ii)*conj(R(4,ii))-conj(R1(2,ii))*R(2,ii)*exp(j*jd))*(-j/2)))
a8=max(real((R1(1,ii)*conj(R(1,ii))+conj(R1(2,ii))*R(2,ii)+R1(4,ii)*conj(R(4,ii))+conj(R1(3,ii))*R(3,ii))*(-1/2))+real((-R(1,ii)*conj(R1(1,ii))+conj(R(2,ii))*R1(2,ii)-exp(j*jd)*R1(3,ii)*conj(R(3,ii))+exp(j*jd)*conj(R1(4,ii))*R(4,ii))*(1/2))+real((R1(3,ii)*conj(R(3,ii)) +conj(R1(4,ii))*R(4,ii)-R1(2,ii)*conj(R(2,ii))-conj(R1(1,ii))*R(1,ii))*(-j/2))+real((R1(1,ii)*conj(R(1,ii)*exp(j*jd))-conj(R1(3,ii))*R(3,ii)+R1(4,ii)*conj(R(4,ii))-conj(R1(2,ii))*R(2,ii)*exp(j*jd))*(j/2)))
A=[a1,a2,a3,a4,a5,a6,a7,a8];
[y,I]=max(A)
if l==1
x1=1/2;x2=-1/2;x3=-j/2;x4=j/2;
elseif l==2
x1=1/2;x2=-1/2;x3=j/2;x4=j/2;
elseif l==3
x1=j/2;x2=-j/2;x3=1/2;x4=-1/2;
elseif l==4
x1=j/2;x2=-j/2;x3=-1/2;x4=1/2;
elseif l==5
x1=-j/2;x2=j/2;x3=1/2;x4=-1/2;
elseif l==6
x1=-j/2;x2=j/2;x3=-1/2;x4=1/2;
elseif l==7
x1=-1/2;x2=1/2;x3=j/2;x4=-j/2;
else
x1=-1/2;x2=1/2;x3=-j/2;x4=j/2;
end
softbit=[softbit x1 x2 x3 x4];
X1=X;
end
for k=1:symbol_per_frame
if bit_sequence(k)~=softbit(k);
tot_err_bit(index)=tot_err_bit(index)+1;
end
end
end
end
ber_snr=tot_err_bit./(tot_frame_tx*symbol_per_frame);
semilogy(min_snr:SNR_step:max_snr,ber_snr,'-*');
xlabel('SNR');
ylabel('BER');
title('Ideal CSI');
grid on;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -