登录论坛

查看完整版本 : [求助]圣地亚哥州立大学期中考试题


vivyzheng
2008-10-15, 15:51
实现8PSK 1-6dB 的Eb/N0的比特误码率和Pb和符号误码率Pe,以下是我的程序,图已经出来了,但是和理论值相比,数量级不正确,明天就要交了,希望得到您的指正,跪谢了~~~~ 可以直接把程序复制到文件里运行.

clear all
close all
N0=1;
T=4;
w0=2*pi*10000; %%%%%Carrier frequency(Hz)
d1=randint(1,5000);
d2=randint(1,5000);
d3=randint(1,5000);

%8-PSK SIGNAL
snr_in_dB=1:1:6;
for m=1:length(snr_in_dB)
Eb(m)=10^(snr_in_dB(m)/10);
Es(m)=3*Eb(m);
end
Es_reg=1;
for p=1:length(Es)
Es_reg=Es(p);
Psi=sqrt(Es_reg/T)*ones(1,4);
angle_000=0;
angle_001=pi/4;
angle_010=pi/2;
angle_011=3*pi/4;
angle_100=-pi;
angle_101=-3*pi/4;
angle_110=-pi/2;
angle_111=-pi/4;
for i=1:length(d1)
if ((d1(i)==0)&(d2(i)==0)&(d3(i)==0)) %s000=[1 0]
I=cos(0);
Q=sin(0);
angle(i)=angle_000;
elseif ((d1(i)==0)&(d2(i)==1)&(d3(i)==0)) %s010=[0 1]
I=cos(pi/2);
Q=sin(pi/2);
angle(i)=angle_010;
elseif ((d1(i)==1)&( d2(i)==0)&(d3(i)==0)) %s100=[-1 0]
I=cos(pi);
Q=sin(pi);
angle(i)=angle_100;
elseif ((d1(i)==1)&(d2(i)==1)&(d3(i)==0)) %s110=[0 -1]
I=cos(-pi/2);
Q=sin(-pi/2);
angle(i)=angle_110;
end
if ((d1(i)==0)&(d2(i)==0)&(d3(i)==1)) %s001=[sqrt(2)/2 sqrt(2)/2]
I=cos(pi/4);
Q=sin(pi/4);
angle(i)=angle_001;
elseif ((d1(i)==0)&(d2(i)==1)&(d3(i)==1)) %s011=[-sqrt(2)/2 sqrt(2)/2]
I=cos(3*pi/4);
Q=sin(3*pi/4);
angle(i)=angle_011;
elseif ((d1(i)==1)&( d2(i)==0)&(d3(i)==1)) %s101=[-sqrt(2)/2 -sqrt(2)/2]
I=cos(-3*pi/4);
Q=sin(-3*pi/4);
angle(i)=angle_101;
elseif ((d1(i)==1)&(d2(i)==1)&(d3(i)==1)) %s111=[sqrt(2)/2 -sqrt(2)/2]
I=cos(-pi/4);
Q=sin(-pi/4);
angle(i)=angle_111;
end
sI((4*i-3):(4*i))=sqrt(Es_reg/T)*I;
sQ((4*i-3):(4*i))=sqrt(Es_reg/T)*Q;
%sI2((4*i-3):(4*i))=sqrt(Es_reg/T)*I2;
%sQ2((4*i-3):(4*i))=sqrt(Es_reg/T)*Q2;
end
%%%%AWGN SIGNAL
nI=random('normal',0,1,1,4*length(d1));
nQ=random('normal',0,1,1,4*length(d1));
rI=sI+nI;
rQ=sQ+nQ;
rrI=reshape(rI,4,length(d1));
rrQ=reshape(rQ,4,length(d1));
X = sum(rrI*Psi(1));
Y = sum(rrQ*Psi(1));


%%%%RECIEVED SIGNAL

for i=1:1:length(d1)
bhat(i)=atan2(Y(i),X(i));
b_diff000(i)=abs(angle_000-bhat(i));
b_diff001(i)=abs(angle_001-bhat(i));
b_diff010(i)=abs(angle_010-bhat(i));
b_diff011(i)=abs(angle_011-bhat(i));
b_diff100(i)=abs(angle_100-bhat(i));
b_diff101(i)=abs(angle_101-bhat(i));
b_diff110(i)=abs(angle_110-bhat(i));
b_diff111(i)=abs(angle_111-bhat(i));
b_min(i)=min([b_diff000(i) b_diff001(i) b_diff010(i) b_diff011(i) b_diff100(i) b_diff101(i) b_diff110(i) b_diff111(i)]);
if (b_diff000(i)==b_min(i))
d1_recieved(i)=0;
d2_recieved(i)=0;
d3_recieved(i)=0;
elseif (b_diff010(i)==b_min(i))
d1_recieved(i)=0;
d2_recieved(i)=1;
d3_recieved(i)=0;
elseif (b_diff100(i)==b_min(i))
d1_recieved(i)=1;
d2_recieved(i)=0;
d3_recieved(i)=0;
elseif (b_diff110(i)==b_min(i))
d1_recieved(i)=1;
d2_recieved(i)=1;
d3_recieved(i)=0;

elseif (b_diff001(i)==b_min(i))
d1_recieved(i)=0;
d2_recieved(i)=0;
d3_recieved(i)=1;
elseif (b_diff011(i)==b_min(i))
d1_recieved(i)=0;
d2_recieved(i)=1;
d3_recieved(i)=1;
elseif (b_diff101(i)==b_min(i))
d1_recieved(i)=1;
d2_recieved(i)=0;
d3_recieved(i)=1;
elseif (b_diff111(i)==b_min(i))
d1_recieved(i)=1;
d2_recieved(i)=1;
d3_recieved(i)=1;
end

end
%%%%error check
num_of_symbol_error=0;
num_of_bit_error=0;
symbol_error=0;
for i=1:1:length(d1)
if (d1_recieved(i)==d1(i))
num_of_bit_error=num_of_bit_error;
symbol_error=0;
else
num_of_bit_error=num_of_bit_error+1;
symbol_error=1;
end
if (d2_recieved(i)==d2(i))
num_of_bit_error=num_of_bit_error;
symbol_error=0;
else
num_of_bit_error=num_of_bit_error+1;
symbol_error=1;
end
if (d3_recieved(i)==d3(i))
num_of_bit_error=num_of_bit_error;
symbol_error=0;
else
num_of_bit_error=num_of_bit_error+1;
symbol_error=1;
end
if symbol_error==1
num_of_symbol_error=num_of_symbol_error+1;
end

end

Pe(p)=num_of_symbol_error/length(d1);
Pb(p)=num_of_bit_error/(3*length(d1));
end
figure
subplot(1,2,1)
semilogy(snr_in_dB,Pb,'o')
title('Pb vs Eb/N0')
hold on
subplot(1,2,2)
semilogy(snr_in_dB,Pe,'o')
title('Pe vs Es/N0')