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

📄 rx_viterbi_decode.m

📁 该文件夹给出了卷积编码、交织及维特比软译码仿真程序
💻 M
字号:
function out_bits = rx_viterbi_decode(rx_bits)
ConvCodeGenPoly=[1 0 1 1 0 1 1;1 1 1 1 0 0 1];
%以下初始化viterbi译码参数
prev_state = zeros(64, 2);
prev_state_outbits = zeros(64, 2, 2);
for state = 0:63
   state_bits = de2bi(state, 6);
   input_bit = state_bits(1);
   for transition = 0:1
      prev_state_bits = [state_bits(2:6) transition];
      prev_state(state+1, transition+1) = bi2de(prev_state_bits);
      
      prev_state_outbits(state+1, transition+1, 1) = 2*(rem(sum(ConvCodeGenPoly(1,:).* ...
         [input_bit prev_state_bits]),2)) - 1;
      prev_state_outbits(state+1, transition+1, 2) = 2*(rem(sum(ConvCodeGenPoly(2,:).* ...
         [input_bit prev_state_bits]),2)) - 1;
   end
end
%以上初始化viterbi译码参数

cum_metrics = -1e6*ones(64, 1);
cum_metrics(1) = 0;

tmp_cum_metrics = zeros(64,1);
max_paths = zeros(64, length(rx_bits)/2);
out_bits = zeros(1, length(rx_bits)/2);

for data_bit = 1:2:length(rx_bits)
   for state = 1:64
      tmp_max_cum_metric = -1e7;
      
      path_metric1 = prev_state_outbits(state, 1, 1)*rx_bits(data_bit) + ...
         prev_state_outbits(state, 1, 2)*rx_bits(data_bit+1);
      
      path_metric2 = prev_state_outbits(state, 2, 1)*rx_bits(data_bit) + ...
         prev_state_outbits(state, 2, 2)*rx_bits(data_bit+1);
         
      if cum_metrics(prev_state(state, 1)+1) + path_metric1 > ...
            cum_metrics(prev_state(state, 2)+1) + path_metric2
         tmp_cum_metrics(state) = cum_metrics(prev_state(state, 1)+1) + path_metric1;
         max_paths(state, (data_bit+1)/2) = 0;
      else
         tmp_cum_metrics(state) = cum_metrics(prev_state(state, 2)+1) + path_metric2;
         max_paths(state, (data_bit+1)/2) = 1;            
      end
   end
   
   for state = 1:64
      cum_metrics(state) = tmp_cum_metrics(state);
   end
end

% trace back
state = 0;
for data_bit = length(rx_bits)/2:-1:1
   bit_estimate = rem(state,2);
   out_bits(data_bit) = bit_estimate;
   state = prev_state(state+1, max_paths(state+1, data_bit)+1);
end

⌨️ 快捷键说明

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