end
EBtheo_qpsk=1-(1-EBtheo_bfsk).*(1-EBtheo_bfsk);
figure;semilogy(t,EB_qpsk,'r.',t,EBtheo_qpsk,'r-');title('qpsk');xlabel('r/dB');ylabel('Pe');
figure;semilogy(t,EB_bpsk,'y.',t,EBtheo_bpsk,'y-');title('bpsk');xlabel('r/dB');ylabel('Pe');
figure;semilogy(t,EB_bfsk,'g.',t,EBtheo_bfsk,'g-');title('bfsk');xlabel('r/dB');ylabel('Pe');
figure;semilogy(t,EB_qam16,'b.',t,EBtheo_qam16,'b-');title('16qam');xlabel('r/dB');ylabel('Pe');
figure('name','几种调制方式的理论误码率和实际误码率比较','numbertitle','off'); semilogy(t,EBtheo_qpsk,'r-');hold on; semilogy(t,EBtheo_bpsk,'y-');hold on; semilogy(t,EBtheo_bfsk,'g-');hold on; semilogy(t,EBtheo_qam16,'b-');hold on; semilogy(t,EB_qpsk,'r-');hold on; semilogy(t,EB_bpsk,'y-');hold on; semilogy(t,EB_bfsk,'g-');hold on; semilogy(t,EB_qam16,'b-');hold on;
title('各系统理论值比较');xlabel('r/dB');ylabel('Pe');
legend('EBtheo_qpsk','EBtheo_bpsk','Btheo_bfsk','EBtheo_qam16','EB_qpsk','EB_bpsk','EB_bfsk','EB_qam16')
误
码
性
能
误
码
性
能
误
码
性
能
误
码
性
能
3.2 仿真结果
6
7
8
3.3 结果分析
由仿真结果可以看出,
1、16QAM失真大,还有问题尚未校正
2、在误码率相同的情况下,相干解调的2FSK需要的信噪比与QPSK的相近, BPSK对信噪比的要求最低,16QAM对于信噪比的需要最高。
3、仿真时,在误码率小的区域,仿真与理论值差距较大,因为此时样本数目不够。
4 matlab编程实现在高斯噪声条件下的几种误码率比较
4.1 仿真代码
clc; M = 2; Fs = 16; nsamp = 17; freq_sep = 8;
x = randint(10000,1,M);
y_2fsk = fskmod(x,M,freq_sep,nsamp,Fs); y_2psk = pskmod(x,M); y_4psk = pskmod(x,4); y_16qam = qammod(x,16);
9
N=10; for j=1:N SNR=j; y_2fsk_noise
awgn(y_2fsk,SNR-10*log10(Fs),'measured',[],'dB');
y_2psk_noise = awgn(y_2psk,SNR,'measured',[],'dB');
y_4psk_noise = awgn(y_4psk,SNR,'measured',[],'dB'); y_16qam_noise=awgn(y_16qam,SNR,'measured',[],'dB'); z_2fsk=fskdemod(y_2fsk_noise,M,freq_sep,nsamp,Fs); z_2psk=pskdemod(y_2psk_noise,M); z_4psk = pskdemod(y_4psk_noise,4); z_16qam=pskdemod(y_16qam_noise,16); [num_2fsk(j),ber_2fsk(j)]=biterr(x,z_2fsk); [num_2psk(j),ber_2psk(j)]=biterr(x,z_2psk); [num_4psk(j),ber_4psk(j)] = biterr(x,z_4psk); [num_16psk(j),ber_16psk(j)] = biterr(x,z_16psk); [num_16qam(j),ber_16qam(j)] = biterr(x,z_16qam); end
figure('name','BPSK,2FSK,QPSK,16QAM在高斯信道下的误码率比较','numbertitle','off')
semilogy(1:N,ber_2fsk,'-*b'); grid; hold on;
semilogy(1:N,ber_2psk,'--dk'); hold on;
semilogy(1:N,ber_4psk,'-.dr'); hold on;
semilogy(1:N,ber_16qam,'-.sk');
title('BPSK,2FSK,QPSK,16QAM在高斯信道下的误码率比较');
10
=