function[p]=cm_sm41(snr_in_dB)
%[p]=cm_sm41(snr_in_dB)
% CM_SM41求出16 QAM以dB为单位的给定信噪比的
% 符号误码率
N=10000;
d=1; %符号间的最小距离
Eav=10*d^2; %每符号能量
snr=10^(snr_in_dB/10); %信噪比
sgma=sqrt(Eav/(3*snr)); %噪声标准方差
M=64;
%数据源产生如下
for i=1:N,
temp=rand; %在区间(0,1 )间的一个均匀随机变量
dsource(i)=1+floor(M*temp); %在1到16间的一个数,均匀的
end;
%随后为信号星座的映射
mapping=[-7*d 7*d; -5*d 7*d; -3*d 7*d; -d 7*d; d 7*d; 3*d 7*d; 5*d 7*d;7*d 7*d;
-7*d 5*d; -5*d 5*d; -3*d 5*d; -d 5*d; d 5*d; 3*d 5*d; 5*d 5*d;7*d 5*d;
-7*d 3*d; -5*d 3*d; -3*d 3*d; -d 3*d; d 3*d; 3*d 3*d; 5*d 3*d;7*d 3*d;
-7*d d; -5*d d; -3*d d; -d d; d d; 3*d d; 5*d d;7*d d;
-7*d -d; -5*d -d; -3*d -d; -d -d; d -d; 3*d -d; 5*d d;7*d -d;
-7*d -3*d;-5*d -3*d;-3*d -3*d;-d -3*d;d -3*d;3*d -3*d;5*d -3*d;7*d -3*d;
-7*d -5*d;-5*d -5*d;-3*d -5*d;-d -5*d;d -5*d;3*d -5*d;5*d -5*d;7*d -5*d;
-7*d -7*d;-5*d -7*d;-3*d -7*d;-d -7*d;d -7*d;3*d -7*d;5*d -7*d;7*d -7*d;]
for i=1:N,
qam_sig(i,:)=mapping(dsource(i),:);
end;
%接收信号
for i=1:N,
[n(1) n(2)]=gngauss(sgma);
r(i,:)=qam_sig(i,:)+n;
end;
%判决、错误概率的计算
numoferr=0;
for i=1:N,
%随后为量度计算
for j=1:M,
metrics(j)=(r(i,1)-mapping(j,1))^2+(r(i,2)-mapping(j,2))^2;
end;
[min_metric decis]=min(metrics);
if (decis~=dsource(i)),
numoferr=numoferr+1;
end;
end;
p=numoferr/N;