⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pskmoto.m

📁 完整的RS编译码仿真程序
💻 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 + -