一个简单的Viterbi解码程序
2014-04-02 23:47
246 查看
以下是一个简单的Viterbi解码程序的MATLAB实现。
% ********************************************* % * * % * This function implements the viterbi * % * decoding mechanism. * % * * % ********************************************* function output = viterbi_decode(input,L,K) ref_bit = [0 0 ; 0 1; 1 0 ; 1 1 ]; path = zeros(4,1); for i = 1:L+2 r = kron(ones(4,1),input(2*i-1:2*i)); hs = sum(xor(r,ref_bit),2); if (i == 1) || (i == 2) temp_path(1,1) = path(1,1) + hs(1); survivor_path(1,1) = 1; %survivor path temp_path(2,1) = path(3,1) + hs(3); survivor_path(2,1) = 3; temp_path(3,1) = path(1,1) + hs(4); survivor_path(3,1) = 1; temp_path(4,1) = path(3,1) + hs(2); survivor_path(4,1) = 3; else [temp_path(1,1), index] = min([path(1,1) + hs(1),path(2,1) + hs(4)]);%find the minimum survivor_path(1,1) = index; [temp_path(2,1), index] = min([path(3,1) + hs(3),path(4,1) + hs(2)]); survivor_path(2,1) = index+2; [temp_path(3,1), index] = min([path(1,1) + hs(4),path(2,1) + hs(1)]); survivor_path(3,1) = index; [temp_path(4,1), index] = min([path(3,1) + hs(2),path(4,1) + hs(3)]); survivor_path(4,1) = index+2; end path = temp_path; surPath(:,i) = survivor_path; end ipLUT = [0 0 0 0;0 0 0 0;1 1 0 0;0 0 1 1 ];%use as the reference cur_state = 1; decode = zeros(1,length(input)/2); for j = length(input)/2:-1:1 prev_state = surPath(cur_state,j); %survivor path found decode(j) = ipLUT(cur_state,prev_state);% cur_state = prev_state; end output = decode; end
相关文章推荐
- 【2009】设计一个简单的编码、解码程序
- 采用MVC设计模式实现一个简单程序
- 一个简单的采用SPRING框架的登录及验证程序
- 一个简单的jsp程序
- socket编程的一个简单的hello world程序
- 从头开始学习JSP(1)采用MyEclipse和Tomcat运行一个简单的.jsp程序 .
- 写一个简单猜数字游戏的小程序
- 手写一个简单的Servlet程序
- C++反汇编揭秘1 – 一个简单C++程序反汇编解析 (Rev. 3)
- 一个简单的局域网Socket聊天程序
- VS2010配置opencv2.4.8,用MFC创建显示一个图片的简单程序
- SDK一个简单的GDI程序(就是画图)
- 一个简单的server和client程序
- 今天调试一个WebPart的简单程序出现的问题
- 创建一个简单的openlaszlo程序(转)
- 一个简单的CUDA程序
- 一个简单的中断程序
- 一个简单的shell程序
- 一个简单、漂亮、功能强大的Android日志程序:logger
- 新闻发布程序(1):建立一个通过前台输入文本内容的简单网页程序