|
我遇到这样一个题目,要用C语言实现HDB3码到解码的双向转换,意思就是当我在编译的DOS选框里输入解码时会输出HDB3码,当我输入HDB3码时会输出解码,下面是它的转换原理:一、编码规则:
1 先将消息代码变换成AMI码,若AMI码中连0的个数小于4,此时的AMI码就是HDB3码;
2 若AMI码中连0的个数大于4,则将每4个连0小段的第4个0变换成与前一个非0符号(+1或-1)同极性的符号,用表示(+1+,-1-);
3 为了不破坏极性_交替反转,当相邻符号之间有偶数个非0符号时,再将该小段的第1个0变换成+B或-B,符号的极性与前一非零符号的相反,并让后面的非零符号从符号开始再交替变化。
例如:
消息代码: 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1
AMI码: +1 0 0 0 0 -1 0 0 0 0 +1 -1 0 0 0 0 +1 -1
HDB3码:+1 0 0 0 +V -1 0 0 0 -V +1 -1 +B 0 0 +V -1 +1
二、HDB3码的特点:
1 由HDB3码确定的基带信号无直流分量,且只有很小的低频分量;
2 HDB3中连0串的数目至多为3个,易于提取定时信号。
3 编码规则复杂,但译码较简单。
三、解码规则
1从收到的符号序列中找到破坏极性_交替的点,可以断定符号及其前面的3个符号必是连0符号,从而恢复4个连码;
2再将所有的-1变换成+1后,就可以得到原消息代码
[编辑本段]【HDB3码的特点】
1. 由HDB3码确定的基带信号无直流分量,且只有很小的低频分量;
2. HDB3中连0串的数目至多为3个,易于提取定时信号。
3. 编码规则复杂,但译码较简单。
[编辑本段]【HDB3码的解码规则】
1虽然编码很复杂,但解码规则很简单,若3连“0”前后非零脉冲同极性,如+1000+1 就应该译成“10000”,及后面的三个零后面的还要再添一个零;若2连 “0”前后非零脉冲极性相同,则两零前后都译为一,如-100-1,就应该译为0000.
2.再将所有的-1变换成+1后,就可以得到原消息代码。
以上就是它的原理,我所使用的语言环境是VC6.0,麻烦大家帮我编写一段程序(麻烦大家注释到行,写明每行的意思和实现的功能),小弟感激不尽!请把程序用留言的形式贴在上面,谢谢,辛苦大家,小弟跪谢! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|