📄 pskmoto.m
字号:
function [channelout]=pskmoto(input,No)
u=input.x;
sgma=sqrt(No);
%信号映射成8psk
n=[0 0];
s000=[1 0];
s001=[1 1]./sqrt(2);
s010=[0 1];
s011=[-1 1]./sqrt(2);
s100=[-1 0];
s101=[-1 -1]./sqrt(2);
s110=[0 -1];
s111=[1 -1]./sqrt(2);
for i=1:length(u)
switch u(i)
case 0
dsource1(i)=0;
dsource2(i)=0;
dsource3(i)=0;
case 1
dsource1(i)=0;
dsource2(i)=0;
dsource3(i)=1;
case 2
dsource1(i)=0;
dsource2(i)=1;
dsource3(i)=0;
case 3
dsource1(i)=0;
dsource2(i)=1;
dsource3(i)=1;
case 4
dsource1(i)=1;
dsource2(i)=0;
dsource3(i)=0;
case 5
dsource1(i)=1;
dsource2(i)=0;
dsource3(i)=1;
case 6
dsource1(i)=1;
dsource2(i)=1;
dsource3(i)=0;
otherwise
dsource1(i)=1;
dsource2(i)=1;
dsource3(i)=1;
end
end
%经过高斯信道
for i=1:length(u)
n=gngauss(sgma);
if((dsource1(i)==0)&(dsource2(i)==0)&(dsource3(i)==0))
r=s000+n;
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
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);
%对第i个符号进行判决
c_max=max([c000 c001 c010 c011 c100 c101 c110 c111]);
if(c000==c_max)
decis1(i)=0;
decis2(i)=0;
decis3(i)=0;
elseif(c001==c_max)
decis1(i)=0;
decis2(i)=0;
decis3(i)=1;
elseif(c010==c_max)
decis1(i)=0;
decis2(i)=1;
decis3(i)=0;
elseif(c011==c_max)
decis1(i)=0;
decis2(i)=1;
decis3(i)=1;
elseif(c100==c_max)
decis1(i)=1;
decis2(i)=0;
decis3(i)=0;
elseif(c101==c_max)
decis1(i)=1;
decis2(i)=0;
decis3(i)=1;
elseif(c110==c_max)
decis1(i)=1;
decis2(i)=1;
decis3(i)=0;
else
decis1(i)=1;
decis2(i)=1;
decis3(i)=1;
end
end
%映射成多进制信号
for i=1:length(u)
if((decis1(i)==0)&(decis2(i)==0)&(decis3(i)==0))
channelout(i)=0;
elseif((decis1(i)==0)&(decis2(i)==0)&(decis3(i)==1))
channelout(i)=1;
elseif((decis1(i)==0)&(decis2(i)==1)&(decis3(i)==0))
channelout(i)=2;
elseif((decis1(i)==0)&(decis2(i)==1)&(decis3(i)==1))
channelout(i)=3;
elseif((decis1(i)==1)&(decis2(i)==0)&(decis3(i)==0))
channelout(i)=4;
elseif((decis1(i)==1)&(decis2(i)==0)&(decis3(i)==1))
channelout(i)=5;
elseif((decis1(i)==1)&(decis2(i)==1)&(decis3(i)==0))
channelout(i)=6;
else
channelout(i)=7;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -