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

📄 decode.m

📁 STTC和OFDM编程
💻 M
字号:
function output=decode(input,h1,h2);
%------------------------------------------------------
%空时格状码的维特比译码
%------------------------------------------------------
Cons=sqrt(1/2)*[1 j -1 -j];
len=length(input);
output=zeros(1,len-1);
dis=zeros(1,4);
dis(1)=(input(1)-h1(1)*Cons(1)-h2(1)*Cons(1))*conj(input(1)-h1(1)*Cons(1)-h2(1)*Cons(1));
dis(2)=(input(1)-h1(1)*Cons(1)-h2(1)*Cons(2))*conj(input(1)-h1(1)*Cons(1)-h2(1)*Cons(2));  
dis(3)=(input(1)-h1(1)*Cons(1)-h2(1)*Cons(3))*conj(input(1)-h1(1)*Cons(1)-h2(1)*Cons(3));
dis(4)=(input(1)-h1(1)*Cons(1)-h2(1)*Cons(4))*conj(input(1)-h1(1)*Cons(1)-h2(1)*Cons(4));
state=zeros(4,len-1);
Curren_state=zeros(4,len-1);
state(1,1)=0;
state(2,1)=1;
state(3,1)=2;
state(4,1)=3;
DIS=zeros(1,4);
Dis=zeros(1,4);
for i=2:1:len-1  
    for k=1:4
        for m=1:4
            Dis(m)=dis(m)+(input(i)-h1(i)*Cons(m)-h2(i)*Cons(k))*conj(input(i)-h1(i)*Cons(m)-h2(i)*Cons(k));
        end
        n=find(Dis==min(Dis));
        DIS(k)=Dis(n);
        Dis=zeros(1,4);
        Curren_state(k,1:i)=[state(n,1:i-1),k-1];
    end
    dis=DIS;
    state=Curren_state;    
    Currren_state=zeros(4,len-1);
end
for i=1:1:4
    dis(i)=dis(i)+(input(len)-h1(len)*Cons(i)-h2(len)*Cons(1))*conj(input(len)-h1(len)*Cons(i)-h2(len)*Cons(1));
end
n=find(dis==min(dis));
last_state=state(n,:);
for i=1:1:length(last_state)
   if  last_state(i)==0
       output(i)=1*sqrt(1/2);
   elseif last_state(i)==1
       output(i)=j*sqrt(1/2);
   elseif last_state(i)==2
       output(i)=-1*sqrt(1/2);
   else 
       output(i)=-j*sqrt(1/2);
   end
end
output=[output sqrt(1/2)];
    
    
    

⌨️ 快捷键说明

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