『原创』Viterbi译码器的C语言实现

[复制链接]
4485|3
 楼主| DSP探路者 发表于 2007-6-6 09:58 | 显示全部楼层 |阅读模式
这个版本是06年2月修改过的版本,在VC下面调试通过。<br /><br />注意:TraceBack长度等于输入数据的长度,在输入数据不太长的情况下获得很好的效果。<br /><br /><br />/*********************************************************************************************************<br />**&nbsp;函数名称:&nbsp;convenc<br />**&nbsp;功能描述:&nbsp;卷积编码的通用编码函数,通过查表trillis得到。<br />**&nbsp;输 入:&nbsp;DATAINF&nbsp;*pData:&nbsp;描述待编码数据信息的指针。<br />**&nbsp;输 出:&nbsp;无<br />**&nbsp;全局变量:&nbsp;无<br />**&nbsp;调用模块:&nbsp;无<br />**&nbsp;备&nbsp;&nbsp;&nbsp;&nbsp;注:注意,这个模块的输入是以紧凑的8bit为单位(字节)<br />**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输出数据是以码元为单位,需要特别注意!<br />**<br />**&nbsp;作 者:&nbsp;DSP探路者<br />**&nbsp;日 期:&nbsp;2005年11月18日<br />**-------------------------------------------------------------------------------------------------------<br />**&nbsp;修改人:<br />**&nbsp;日 期:<br />**------------------------------------------------------------------------------------------------------<br />********************************************************************************************************/<br />void&nbsp;convenc(INT8U&nbsp;*pin,&nbsp;INT8U&nbsp;*pout,&nbsp;INT16U&nbsp;BitNum)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT16U&nbsp;bit_num_cnt,&nbsp;bit_cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;data_in,&nbsp;data_out,&nbsp;bit_in;<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;&nbsp;CURSTATE,&nbsp;NEXTSTATE;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CURSTATE&nbsp;=&nbsp;0;<br />//&nbsp;search&nbsp;state&nbsp;change&nbsp;trace&nbsp;and&nbsp;output&nbsp;data&nbsp;as&nbsp;input<br />&nbsp;&nbsp;&nbsp;&nbsp;for(bit_num_cnt&nbsp;=&nbsp;0;&nbsp;bit_num_cnt&nbsp;&lt&nbsp;BitNum&nbsp;;&nbsp;bit_num_cnt++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data_in&nbsp;=&nbsp;*pin++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//for(bit_cnt&nbsp;=&nbsp;8;&nbsp;bit_cnt&nbsp;&gt&nbsp;0;&nbsp;bit_cnt--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bit_in&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(data_in&gt&gt(bit_cnt-1))&nbsp;&&nbsp;0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bit_in&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;data_in;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NEXTSTATE&nbsp;=&nbsp;trellissta[(CURSTATE&lt&lt1)&nbsp;+&nbsp;bit_in];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data_out&nbsp;&nbsp;=&nbsp;trellisout[(CURSTATE&lt&lt1)&nbsp;+&nbsp;bit_in];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*pout++&nbsp;=&nbsp;data_out;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CURSTATE&nbsp;=&nbsp;NEXTSTATE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//data_in&nbsp;=&nbsp;data_in&nbsp;&lt&lt&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br /><br /> 相关链接:<a href='http://www.evmdiy.com/viewthread.php?tid=153&extra=page%3D1'>http://www.evmdiy.com/viewthread.php?tid=153&extra=page%3D1</a>
ZHAOJIUDE 发表于 2007-6-8 09:52 | 显示全部楼层

不是译码吗?怎么是编码?很惊讶如此简洁,原来只是编码!!

不是译码吗?怎么是编码?很惊讶如此简洁,原来只是编码!!
 楼主| DSP探路者 发表于 2007-6-8 10:22 | 显示全部楼层

编码和译码的程序在链接中能够找到

下载这个链接是包括编码和译码,还有vc的工程<br /> <br /> 相关链接:<a href='http://www.evmdiy.com/viewthread.php?tid=153&extra=page%3D1'>http://www.evmdiy.com/viewthread.php?tid=153&extra=page%3D1</a>
 楼主| DSP探路者 发表于 2007-6-12 08:53 | 显示全部楼层

viterbi是通信中的重要算法

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

84

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部