decode.m

来自「STTC和OFDM编程」· M 代码 · 共 55 行

M
55
字号
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 + =
减小字号Ctrl + -
显示快捷键?