cm_sm.m

来自「16QAM的MATLAB源程序」· M 代码 · 共 52 行

M
52
字号
function[p]=cm_sm(snr_in_dB)
N=10000;
d=1;
Eav=10*d^2;
snr=10*(snr_in_dB/10);
if snr==0
    delta=1/1000;
    snr=snr+delta;
end
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
    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);
     

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?