📄 softdecoder9.m
字号:
function data_out=softdecoder9(data_enc,dlt,slt)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 译码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[m,n,frames]=size(data_enc);%%%%%% m 编码长度 n 每比特数据表示的编码数 %%%%%%%%%%%%%%
[s,level,foo]=size(dlt); %%%%%%%%%%%%% s 表示状态数 %%%%%%%%%%%%%%%%
metric(1,2:s)=realmax; %%%%%%%%%%%%% 这个矩阵存储每条路径的距离 %%%%%%%%%%%%%
for k=1:frames %%%%%%%%%%%%% fames 解码帧数 %%%%%%%%%%%%%%%
for l=1:m
for j=1:s
%%%%%%%%%%%%% 寻找导致这一状态的前一状态 %%%%%%%%%%%%%%%%%%%
[s_pre,foo]=find(slt==j);
%%%%%%%%%%%%% 将状态转移分区 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pos=mod(j-1,level)+1;
%%%%%%%%%%%%% 取可能传送的数据 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
data_test=dlt(s_pre,pos,:);
data_test=reshape(data_test,[level,n]);
%%%%%%%%%%%%%% 计算可数据与接收数据的距离 %%%%%%%%%%%%%%%%%
metric_d=softbrmet(data_enc(l,:,k),data_test);
%%%%%%%%%%%%%%%%%%%%% 将data_test的距离值加到前一状态上 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
metric_md=metric(l,s_pre)+metric_d;
%%%%%%%%%%%%%%% 算出最小距离,并找到最可能导致当前状态的前一状态 %%%%%%%
[metric_max,metric_pos]=min(metric_md);
%%%%%%%%%%%%%%%% 将这个最小距离加到metric矩阵上 %%%%%%%%%
metric(l+1,j)=metric_max;
%%%%%%%%%%%%%%% 创建一个用于存储状态的矩阵 %%%%%%%%%
vit_state(l+1,j)=s_pre(metric_pos);
%%%%%%%%%%% 创建一个存储可能传送数据的矩阵 %%%%%%%%
vit_data(l+1,j)=pos-1;
end
end
[foo,state_best]=max(metric(end,:));
state_possible(m+1)=state_best;
%%%%%%%%%%% 回溯 %%%%%%%%%%%%%%%%%%%%%
for l=m:-1:1
state_possible(l)=vit_state(l+1,state_possible(l+1));
data_possible(l)=vit_data(l+1,state_possible(l+1));
end
data_out(k,1:m-8)=data_possible(1:m-8);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -