发布时间 : 星期日 文章tcm_网格编码(MATLAB程序)更新完毕开始阅读48642603eff9aef8941e065d
dsource2(i)=0; dsource3(i)=0; elseif (temp<0.25), dsource1(i)=0; dsource2(i)=0; dsource3(i)=1
elseif (temp<0.375), dsource1(i)=0; dsource2(i)=1; dsource3(i)=0; elseif (temp<0.5), dsource1(i)=0; dsource2(i)=1; dsource3(i)=1;
elseif (temp<0.625), dsource1(i)=1; dsource2(i)=0; dsource3(i)=0;
elseif (temp<0.75), dsource1(i)=1; dsource2(i)=0; dsource3(i)=1;
elseif (temp<0.875), dsource1(i)=1; dsource2(i)=1; dsource3(i)=0; else
dsource1(i)=1; dsource2(i)=1; dsource3(i)=1; end; end;
numoferr=0; for i=1:N,
n(1)=gngauss(sgma); n(2)=gngauss(sgma);
if ((dsource1(i)==0)&(dsource2(i)==0)&dsource3(i)==0), r=s000+n;
5
elseif ((dsource1(i)==0)&(dsource2(i)==0)&(dsource3(i)==1)), r=s001+n;
elseif((dsource1(i)==0)&(dsource2(i)==1)&(dsource3(i)==0)), r=s010+n;
elseif((dsource1(i)==0)&(dsource2(i)==1)&(dsource3(i)==1)), r=s011+n;
elseif((dsource1(i)==1)&(dsource2(i)==0)&(dsource3(i)==0)), r=s100+n;
elseif((dsource1(i)==1)&(dsource2(i)==0)&(dsource3(i)==1)), r=s101+n;
elseif((dsource1(i)==1)&(dsource2(i)==1)&(dsource3(i)==0)), r=s110+n;
else((dsource1(i)==1)&(dsource2(i)==1)&(dsource3(i)==1)), r=s111+n; end;
c000=dot(r,s000); c001=dot(r,s001); c010=dot(r,s010); c011=dot(r,s011); c100=dot(r,s100); c101=dot(r,s101); c110=dot(r,s110); c111=dot(r,s111);
c_max=max([c000 c001 c010 c011 c100 c101 c110 c111]); if (c000==c_max),
decis1=0;decis2=0;decis3=0; elseif (c001==c_max),
decis1=0;decis2=0;decis3=1; elseif (c010==c_max),
decis1=0;decis2=1;decis3=0; elseif (c011==c_max)
decis1=0;decis2=1;decis3=1; elseif (c100==c_max)
decis1=1;decis2=0;decis3=0; elseif (c101==c_max)
decis1=1;decis2=0;decis3=1; elseif (c110==c_max)
decis1=1;decis2=1;decis3=0;
6
else
decis1=1;decis2=1;decis3=1; end;
if (decis1~=dsource1(i)), numoferr=numoferr+1; end;
if (decis2~=dsource2(i)), numoferr=numoferr+1; end;
if (decis3~=dsource3(i)), numoferr=numoferr+1; end; end;
pb=numoferr/(3*N);
对TCM的仿真调用程序:
function [p]=smld2(snr_in_dB) N=input('number'); Es=3;
snr=10^(snr_in_dB/10); sgma=sqrt(1/(2*snr)); k=1;
g=[1 0 1;0 0 1]; for i=1:N, temp=rand;
if (temp<0.25), dsource1(i)=0; dsource2(i)=0; elseif (temp<0.5) dsource1(i)=0; dsource2(i)=1; elseif (temp<0.75) dsource1(i)=1; dsource2(i)=0; else
dsource1(i)=1; dsource2(i)=1; end; end;
7
int=zeros(1,2*N); for o=1:N,
int(1,2*o-1)=dsource2(o); end;
for b=1:N,
int(1,2*b)=dsource1(b); end;
rrr=reshape(int,2,N); eee=rrr';
m=size(eee,1); y=zeros(1,m) for n=1:m
y(:,n)=eee(n,1) end;
z=cnv_encd(g,k,y); tyu=length(z)/2; s=zeros(1,3*tyu); for i=1:m
s(:,3*i-2)=eee(i,2) end
s(:,3*N+1)=0;
s(:,3*(N+1)+1)=0; for j=1:tyu
s(:,3*j-1)=z(2*j-1); end;
for k2=1:tyu
s(:,3*k2)=z(2*k2); end;
uu=reshape(s,3,tyu); kk=uu';
n1=gngauss(sgma); n2=gngauss(sgma) for i=1:tyu
f(i)=bin2deci(kk(i,:)); if ((f(i)>=3)&(f(i)<7))
R(i)=sqrt(Es)*cos(2*pi*f(i)/8)+n1; H(i)=sqrt(Es)*sin(2*pi*f(i)/8)+n2; T(i)=pi+atan(H(i)/R(i));
8