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

📄 softdecoder9.m

📁 用于通讯仿真的viterbi算法完整实现方案.用途广泛.
💻 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 + -