📄 decode.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 + -