Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
初级会员
注册日期: 2008-10-14
年龄: 36
帖子: 2
声望力: 0 ![]() |
![]()
实现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) ![]() sQ((4*i-3) ![]() %sI2((4*i-3) ![]() %sQ2((4*i-3) ![]() 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') |
![]() |
![]() |