%qammotocalo.m
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*Qfunct(sqrt(3*k*SNR/(M-1)));
end;
semilogy(SNRindB1,smld_err_prb,'*'); %用对数坐标做出实际信噪比
hold
semilogy(SNRindB2,theo_err_prb); %画出理论信噪比
%函数文件gugauss.m产生高斯分布的随机函数
function grsv=gngauss(m,sgma)
if(nargin==0),
m=0; sgma=1;
elseif nargin==1
sgma=m; m=0;
end;
u=rand;
z=sgma*(sqrt(2*log(1/(1-u)))); %利用上面的U产生一个瑞利公布随机数
u=rand;
grsv(1)=m+z*cos(2*pi*u); grsv(2)=m+z*sin(2*pi*u);
%函数文件Qfunct.m用于求出理论误码率
function[y]=Qfunct(x)
y=(1/2)*erfc(x/sqrt(2));