BPSK QPSK 8PSK 16QAM等调制方式的性能仿真及频率利用率的对比及分析 下载本文

end;

for i=1:length(SNRindB2)

SNR=exp(SNRindB2(i)*log(10)/10); the_err_prb(i)=Qfunct(sqrt(2*SNR)); end;

semilogy(SNRindB1,smld_bit_err_prb,'*');%以对数形式作Y坐标绘图 Hold%将上一曲线保留

semilogy(SNRindB1,smld_symbol_err_prb,'0'); %作出实际的信噪比--误比特率点

semilogy(SNRindB2,theo_err_prb); %作出理论的信噪比——误比特率点 在Simulink上的仿真图如图2所示:

图 2 仿真出的误码率如下图3所示:

图 3

注:横坐标表示信噪比,纵坐标表示误码率,一条线是根据公式pe?1?[1?1rerfc]2计22算出的理想性能曲线,另一条是仿真测出的误码率。由图可见仿真结果和理论曲线符合的比

较好。

1.2 16QAM 的性能仿真

单独使用幅度或相位携带信息时,不能最充分地利用信号平面,这可以由矢量图中信号矢量端点的分布直观地观察到。随着M增大,这些矢量端点之间的最小距离也随之减小。但如果充分地利用整个平面,将矢量端点重新合理分布,则有可能在不减少最小距离的情况下增加信号矢量的端点数目。基于上述概念可以引出幅度与相位相结合的调制方式APK。APK信号可看作两个正交调制信号之和,APK有时也称为星座调制,因为在其矢量图平面上信号的分布如星座。当前研究较多并被建议用于是数字通信中的一种APK信号,是

16QAM信号。它是利用两个独立的基带波形对两个相互正交的同频载波进行抑制载波的双边带调制,利用着这种已调信号载同一带宽内频谱正交的性质来实现两路并行的数字信息传输。

现用矩形信号星座图16QAM通信系统进行蒙特卡洛仿真。用均匀随机数发生器产生一个对应4位b1b2b3b4共有16种可能的信息符号序列。将符号映射位相应的信号点,信号的坐标为[Amc,Ams],用两个高斯噪声发生器产生噪声分量[nc,ns]。假设信道相移为0,。接收到的信号加噪声分量为[Amc?nc,Ams?ns]。

判决器的距离量度由下式决定: D(r,sm)?r?sm m=1,2,3....M

2r?[r1,r2],r1?Amc?nccos??nssin?,r2?Ams?ncsin??nscos?

sm?(EsAmc,EsAms) m=1,2,3.....M

并且选择最接近接收向量r的信号点。计错器记录判决到的序列错误符号数。 用MATLAB进行仿真 程序清单如下: echo on

SNRindB1=0:2:15; SNRindB2=0:0.1:15; M=16; k=log2(M);

for i=1:length(SNRindB1),

smld_err_prb(i)=qammoto(SNRindB1(i)); end;

for i=1:length(SNRindB2),

SNR=exp(SNRindB2(i)*log(10)/10;

theo_err_prb(i)=4*Qfunt(sqrt(3*k*SNR/(M-1))); end;

semilogy(SNRindB1,smld_err_prb,'*');

%用对数坐标作出实际信噪比——误比特率曲线 Hold %保持住上一曲线

semilogy(SNRindB2,theo_err_prb);%画出对数坐标理论信噪比——误比特率曲线 函数文件qammoto.m用于实现仿真运算: function[p]=qammoto(snr_in_dB) N=10000; d=1;

Eav=10*d^2;

snr=10^(snr_in_dB/10); sgma=sqrt(Eav/8*snr); M=16;

for i=1:N

temp=rand;

dsource(i)=1+floor(M*temp); end;

mapping=[-3*d 3*d;

-d 3*d; d 3*d; 3*d 3*d; -3*d d; -d d; d d; 3*d d; -3*d -d; -d -d; d -d; 3*d -d -3*d -3*d; -d -3*d; d -3*d; 3*d -3*d]; for i=1:N, end;

for i=1:N,

n=gngauss(sgma);%产生高斯随机噪声

r(i,:)=qan_sig(i,:)+n;%在信号上叠加噪声 end;

numoferr=0;%误比特数初始值置0 for i=1:N, for j=1:M,

metrices(j)=(r(i,1)-mapping(j,1)^2+(r(i,2)-mapping(j,2))^2; end;

[min_metric decis]=min(metrice);

if(decis=dsource(i)),%若出现错误情况,误比特数加1 numoferr=numoferr+1; end; end;

p=numoferr/(N);

在Simulink上的仿真图如图4所示:

图 4

仿真出的误码率如图5所示: