本发明属于rlhdb3编译码技术领域,具体涉及一种基于c54x的rlhdb3解码方法、装置及存储介质。
背景技术:
rlhdb3码:riselevelhighdensitybipolaroforder3code,升电平三阶高密度双极性码。rlhdb3码是在aim码(alternativemarkinversion,传号交替翻转码)的基础上改进的一种升电平单极性不归零码,克服了ami码连0数过多造成定时提取困难的问题,克服了hdb3码存在负电平使led灯不能点亮进行照明的问题,从而实现led灯始终有正向电流通过,满足既能传输数据同时又能解决照明的需要。
itu-t在g.703建议中推出hdb3码作为一种数字接口的编码方式,为实现对hdb3码的解码,可以采用如cd22103之类的专用ami/hdb3编/译码器芯片进行设计;也可以利用cpld/fpga进行hdb3编/译码器的设计;还可以利用单片机进行hdb3编/译码器的设计。上述三种解码方式各有利弊,本发明提出采用ti公司的dsp芯片stm320c54x进行解码的设计方案,只需要在芯片中下载解码软件便可根据不同传输码速进行相应的解码。
技术实现要素:
针对现有技术中的上述不足,本发明提供的基于c54x的rlhdb3解码方法、装置及存储介质解决了现有的解码方法需要依赖硬件电路、难以适应不同传输码率的问题,并解决即使连续传输0码时也既能传输数据同时又能解决照明的需要。
为了达到上述发明目的,本发明采用的技术方案为基于c54x的rlhdb3解码方法,包括以下步骤:
s1、通过信号接收模块接收led发出的rlhdb3编码信号,并将其输入到电平转换模块;
s2、通过电平转换模块去除rlhdb3编码信号中的直流信号,将得到的hdb3码输出到c54x系列的dsp芯片中;
s3、通过c54x系列的dsp芯片对hdb3码进行解码,进而实现rlhdb3码的解码。
进一步地,所述步骤s1中,所述信号接收模块包括一个光电接收管及与其负极连接的接地电阻,所述光电接收管的负极作为信号接收模块的输出端与电平转换模块连接;
所述步骤s1具体为:
通过光电接收管接收led发出的rlhdb3编码信号,使光电接收管d随着rlhdb3编码信号的变化而导通,通过接地电阻r获得rlhdb3编码信号变化过程的电平信号,并将其输入到电平转换模块。
进一步地,所述步骤s3具体为:
在c54x系列的dsp芯片中,通过设置连续0标识符来确定hdb3码中连续0码的个数,根据连续0码的个数确定hdb3码中000v±码组、b±00v±码组、±1码和0码中0及±1的解码输出对hdb3进行解码,进而实现rlhdb3码的解码。
进一步地,设置的连续0标识符包括f20和f30;
当f20=1时,表示当前接收到的hdb3码为b±00v±码组;
当f30=1时,表示接收到的hdb3码为000v±码组。
进一步地,根据连续0的个数确定hdb3码中000v±码组、b±00v±码组、±1码和0码中0及±1的解码输出的方法具体为:
a1、对hdb3码的每个码值依次进行检测;
a2、当当前hdb3码中出现的连续0码个数不超过3时,将对应的每个0码均解码输出为0;
a3、当当前hbd3码中出现±1码时,将每个±1码解码输出为+1;
a4、当当前hdb3码中出现±1码且f20=1时,表示当前接收到的为b±00v±码组中的v±的±1码,通过设置4个单元的线性滑移窗口来存放b±00v±码组,将接收到的±1解码输出为0码,并将线性滑移窗口中前三个单元中存放的b±、0和0对应解码输出为0、0和0;
a5、当当前hdb3码中出现±1码且f30=1时,表示当前接收到的为000v±码组中的v±的±1码,通过设置4个单元的线性滑移窗口来存放000v±码组,将接收到的±1解码输出为0码,并将线性滑移窗口中前三个单元中存放的0、0和0对应解码输出为0、0和0;
a6、重复步骤a2~a5,对待解码的hdb3码的每个码位值进行解码输出,实现hdb3解码。
一种基于c54x的rlhdb3解码装置,所述装置包括:
信号接收模块,用于接收led发出的rlhdb3编码信号,并将其输入至电平转换模块;
电平转换模块,用于将信号接收模块接收到的rlhdb3编码信号转换成hdb3码,并输入至信号处理模块进行hdb3码的解码;
信号处理模块,用于对hdb3码进行解码,进而实现rlhdb3解码。
进一步地,所述信号处理模块包括:
输入检测单元,用于检测当前输入的hdb3码为0或±1;
标识确定单元,用于对当前输入为±1时的hdb3码进行标识,并确定其为b±00v±码或000v±码;
码位滑移单元,用于进行在输入检测模块对hdb3码进行0或±1检测时的码位移动操作;
数据暂存单元,用于暂存当前输入的hdb3码中的b±00v±码组或000v±码组;
解码输出单元,用于根据数据暂存模块中存储的数据和输入检测模块输入的数据进行对应的解码输出,进而实现rlhdb3解码。
进一步地,所述解码输出单元包括0码解码输出机构和±1码解码输出机构;
所述0码解码输出机构用于将输入检测单元中检测到连续0码个数不超过3个时的0码解码输出为对应的0码;
所述±1码解码输出机构用于将输入检测单元中检测到±1码解码输出为+1,并将数据暂存模块单元的b±00v±码组或000v±码组中的b±码和0码解码输出为0,将b±00v±码组或000v±码中检测到标识为±1的v±码解码输出为0。
进一步地,所述信号处理模块为c54x系列的dsp芯片。
一种c54x可读存储介质,所述c54x可读存储介质存储有c54x程序,其特征在于,执行所述计算程序时实现如权利要求1至5任一所述的基于c54x的rlhdb3解码方法的步骤。
本发明的有益效果为:
(1)本发明分析了rlhdb3编码规则,提出了首先利用电路转换电路将输入的rlhdb3码转换为hdb3码,再利用c54x系列dsp芯片通过软件编程实现hdb3解码的设计方案,通过设置接收到二个连续0和三个连续0标识来判断接收连续0的个数,从而确定对000v±、b±00v±、±1码中0和±1的输出处理;
(2)通过添加空操作指令来调节不同输入码占用不同解码指令周期,即由此引起的传输码速抖动、延迟和速率问题;
(3)本发明利用dsp芯片软件编程来实现rlhdb3解码的设计方法更具有解码快、可适应不同传输速率的解码要求、成本相对较低、应用灵活的优点,当需要调整技术要求或指标时,不用修改硬件电路,只需将新程序下载到存储器即可,可克服现有技术中led中不能通过hdb3码中的“-1”码,采用2fsk码有半个周期会使led灯失去照明功能,以及当基带码连续传输0码时会使系统失去同步时钟提取信号和led灯失去照明功能的上述不足,实现在传输数据的同时完成照明的功能,具有较好的应用价值。
附图说明
图1为本发明提供的rlhdb3解码方法流程图。
图2为本发明提供的rlhdb3解码装置结构图。
图3为本发明提供的c54x的hdb3解码方法流程图。
图4为本发明提供的dsp芯片存储空间分配示意图。
图5为本发明提供的hdb3解码程序设计流程图。
图6为本发明提供的hdb3解码仿真输出波形示意图。
具体实施方式
下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
按照数字通信原理中所确定的hdb3编码规则,为了适应dsp芯片的程序编码,可将其编码规则描述为:
(1)输入连续0的个数不超过3时,输入码中的0不进行处理,在输出时其值保持不变直接输出,输入码中1变为-1和+1的交替输出;
(2)若连续0的个数超过3,则将每4个0看作一小节,并将其定义为b00v、b、v可以是0,-1和+1;
其中,b和v具体为何值应满足的条件为:v和前面相邻的非0码极性相同;不看v时,1码极性交替;v和v之间极性交替;一般去第一个b取0,第一个非0码取-1;由于v会破坏极性交替的规律,b有3种变化以满足规则,所以b称为破坏脉冲、b称为调节脉冲,b00v称为取代节、破坏节。例如:单极性归零码序列:
10000101000001110000000001
编码后的hdb3码序列:
-1000v-+10-1b+00v0-1+1-1000v-b+00v+0-1
在对hdb3码流中,依照编码规则每码位可能是0码、±1码三种形态之一,连0码最多为3个,解码时需要对连0码进行识别,判断是否插入000v±码组和b±00v±码组。
实施例1:
本发明实施例提供了与上述编码方法对应的利用c54x系列dsp芯片通过软件编程实现的基于c54x的rlhdb3解码方法,如图1所示,具体方法为:
s1、通过信号接收模块接收led发出的rlhdb3编码信号,并将其输入到电平转换模块;
s2、通过电平转换模块去除rlhdb3编码信号中的直流信号,将得到的hdb3码输出到c54x系列的dsp芯片中;
s3、通过c54x系列的dsp芯片对hdb3码进行解码,进而实现rlhdb3码的解码。
如图2所示,上述实施例1中的信号接收模块包括一个光电接收管及与其负极连接的接地电阻,所述光电接收管的负极作为信号接收模块的输出端与电平转换模块连接;
本实施例的步骤s1具体为:
通过光电接收管接收led发出的rlhdb3编码信号,使光电接收管d随着rlhdb3编码信号的变化而导通,通过接地电阻r获得rlhdb3编码信号变化过程的电平信号,并将其输入到电平转换模块
上述rlhdb3编码信号为升电平hdb3码,传输2单位电平表示传输‘1’码元,传输1单位电平表示传输‘0’码元,传输0单位电平表示传输‘-1’码元,通过电平转换模块去除接收到的rlhdb3编码信号中的直流信号,并对其进行放大、整形、电平转换后输出hdb3码,此时hdb3码传输1单位电平表示传输‘1’码元,传输0单位表示传输‘0’码元,传输-1单位表示传输‘-1’码元;再然后通过c54x系列的dsp芯片对hdb3码进行解码,具体地,本实施例的上述步骤s3具体为:
在c54x系列的dsp芯片中,通过设置连续0标识符来确定hdb3码中连续0码的个数,并根据连续0码的个数确定hdb3码中000v±码组、b±00v±码组、±1码和0码中0及±1的解码输出,实现hdb3解码;
如图3所示,根据连续0的个数确定hdb3码中000v±码组、b±00v±码组、±1码和0码中0及±1的解码输出的方法具体为:
a1、获取待解码的hdb3码,并对hdb3码的每个码值依次进行检测;
对当前接收到的hdb3码中的0码进行解码为:
a2、当当前hdb3码中出现的连续0码个数不超过3时,将对应的每个0码均解码输出为0;
具体地,hdb码中只有一个0码单独出现,表示原码中出现0,应输出0码;hdb3码中如果只有连续两个0,表示原码中出现的连续两个00,也应输出00码;hdb3码中如果有三个连续0,表示原码中出现的三个连续000,同样应输出000码。根据编码规则,hdb3码不可能出现四个连续0,当原码中出现四个以上连续0码时,hdb3编码规则会通过插入000v±码组、b±00v±码组来取代四个连续的0码;
对当前接收到的hdb3码中的±1码解码方法为:
a3、当当前hbd3码中出现±1码时,将每个±1码解码输出为+1;
具体地,当原码中出现1码时,按照hdb3编码规则编码输出为±1,因此当出现±1码时,应解码输出为+1;
当接收到hdb3码中的000v±码组、b±00v±码组中的±1码时,应在接收到b±和v±时输出0码;具体地,通过设置连续0标识符来识别000v±码组、b±00v±码组,连续0标识符包括f20和f30,当f20=1时,表示当前接收到连续两个0,接收到的为hdb3码中的b±00v±码组;当f30=1时,表示当前接收到连续三个0,接收到的为hdb3码中的000v±码组;因此,对000v±码组、b±00v±码组的解码方法为:
a4、当当前hdb3码中出现±1码且f20=1时,表示当前接收到的为b±00v±码组中的v±的±1码,通过设置4个单元的线性滑移窗口来存放b±00v±码组,将接收到的±1解码输出为0码,并将线性滑移窗口中前三个单元中存放的b±、0和0对应解码输出为0、0和0;
a5、当当前hdb3码中出现±1码且f30=1时,表示当前接收到的为000v±码组中的v±的±1码,通过设置4个单元的线性滑移窗口来存放000v±码组,将接收到的±1解码输出为0码,并将线性滑移窗口中前三个单元中存放的0、0和0对应解码输出为0、0和0。
a6、重复步骤a2~a5,对待解码的hdb3码的每个码位值进行解码输出,实现hdb3解码。
其中,在编程实现解码操作时,线性滑移窗口是通过delay指令将低地址单元数据复制到下一高地址单元来实现的。为了能连续接收到hdb2码数据,没执行一次对000v±码组和b±00v±码组的处理时,应将f20和f30复位为0,以便为接收后面的数据做准备。
在本发明实施例中,按照上述解码规则,对hdb3码:-1000v-0+1b-00v-0+10-100进行解码时,解码方法为:-1解码输出为1,000v-码组解码输出为0000,+1解码输出为1,b-00v-码组解码输出为0000,+10-100解码输出为10100,得到完整的解码输出为1000010000010100。
实施例2:
本发明实施例提供了一种基于c54x的hdb3解码装置,如图2所示,包括:
信号接收模块,用于接收led发出的rlhdb3编码信号,并将其输入至电平转换模块;
电平转换模块,用于将信号接收模块接收到的rlhdb3编码信号转换成hdb3码,并输入至信号处理模块进行hdb3码的解码;
信号处理模块,用于对hdb3码进行解码,进而实现rlhdb3解码。
本实施例中的信号接收模块包括一个光电接收管及与其负极连接的接地电阻,光电接收管的负极作为信号接收模块的输出端与电平转换模块连接;当外界led灯发出的rlhdb3照明与编码信号被接收模块的光电接收管d接收到后,使光电接收管d随rlhdb3信号的变化而导通,并在电阻r上获得rlhdb3编码信号电平,该信号经输入与电平转换模块进行放大、整形、电平转换后,输出hdb3码,然后由c54x系列的dsp芯片进行解码。
本实施例中的信号处理模块为c54x系列的dsp芯片,该芯片中的ram中完成hdb解码过程中相关数据的暂存,rom中存有的dsp进行解码时的解码程序,c54x系列的dsp芯片具体包括以下功能单元:
输入检测单元,用于检测当前输入的hdb3码为0或±1;
标识确定单元,用于对当前输入为±1时的hdb3码进行标识,并确定其为b±00v±码或000v±码;
码位滑移单元,用于进行在输入检测模块对hdb3码进行0或±1检测时的码位移动操作;
数据暂存单元,用于暂存当前输入的hdb3码中的b±00v±码组或000v±码组;
解码输出单元,用于根据数据暂存模块中存储的数据和输入检测模块输入的数据进行对应的解码输出,进而实现rlhdb3解码。
本发明实施例中的解码输出模块包括0码解码输出机构和±1码解码输出机构;
其中,0码解码输出机构用于将输入检测单元中检测到连续0码个数不超过3个时的0码解码输出为对应的0码;±1码解码输出机构用于将输入检测单元中检测到±1码解码输出为+1,并将数据暂存模块单元的b±00v±码组或000v±码组中的b±码和0码解码输出为0,将b±00v±码组或000v±码中检测到标识为±1的v±码解码输出为0。
实施例3:
本发明实施例提供了一种c54x可读存储介质,所述c54x可读存储介质存储有c54x程序,其特征在于,执行所述计算程序时实现上述基于c54x的rlhdb3解码方法的步骤。
实施例4:
本发明实施例提供了执行上述hdb3解码时的程序设计流程:
(1)初始化设置:
dsp芯片中的数据存储器分配空间分配如图4所示,其中(a)为对数据存储器的预先分配,(b)为程序运行后对数据存储器的实际占用情况。初始化设置主要是完成对页指针dp=0的设置、连续0标识符包括f20=0,f30=0的初值,另将hdb3解码输出中的0、+1两种可能分别用64(取名tpv10)、65(取名tpv11)两个单元存放,供输出时调用。然后对辅助寄存器ar7中存放检测输入2个连0的计数初始值2。
(1)对hdb3码中的三种状态的处理:
hdb3码解码过程的程序实现流程如图5所示:
1)输入新数据:
利用指令portr从输入端口pa1输入待解码数据到new_hdb3,再将该输入数据装载到累加器a。此后判断输入是否为0,并分别转向分支标号hdb30处理进行对0的处理或转向分支标号hdb31处对1的处理;
2)对输入0的处理:
若hdb3码输入为0,在标号hdb3分支对0的处理中,对ar7做减1计算,然后判断ar7是否为0。如果ar7不为0,再判断f20是否为0,如果此时f20=0,表示未接收到两个连续0,去到out0分支执行输出为0的处理。如果ar7不为0,f20=1,表示已接收到三个连续0,并设置f30=1,然后去到out0分支执行输出为0的处理。如果ar7-1为0,表示已接收到两个连续0,去到zro3分支执行设置f20=1,再去out0分支执行输出为0的处理。
3)对输入±1的处理:
若输入hdb3码为+1或-1码,不为0,在标号为hdb31的分支对±1码的处理中,判断f20是否为0。若f20=0,表示该±1码为原码中的1码,转到out1分支输出为1码,并复位标志信号f20=0、f30=0、ar7=2,然后经slide转到滑动窗口进行移位处理。若f20=1,表示已接收两连0,转到df30分支,再判断f30是否为0。若为0,表示该±1码为hdb3中的b±00v±码组中的v±码的±1码,转向b00v分支,并置前3个存储单元中的b±码的±1码为0码。若f30=1,表示该±1码为hdb3中的000v±码中的v±码的±1码,转向000v分支。在处理完hdb3的±1码后,无论是输出0、1,都应重新设置ar7=2,f20=0、f30=0,以便处理后续输入hdb3码流。
slide分支的线性滑动窗口为5单元双寻址数据空间数据,利用延迟指令delay将数据从低地址单元复制到下一个高地址单元,目的是解决在处理v码时,在前三个码的处理已输出了b码。通过不立即输出b码而是将其暂存,可在出现v码时对未输出的b码值进行修改,然后输出正确的b值。
本发明实施例中,在ccs开发环境下运行上述程序,当输入-1000v-0+1b-00v-0+10-100时的输出10000010000010100仿真波型如图6所示,图中输出解码波型与输入的hdb3波型在时间上有m个周期的时延。这是因为解码输入的0、±1码所走程序分支不同,执行的程序指令数目不同,所花费的周期数不同,这会导致输出码持续时间不同,引起码位抖动。解决方法是找出解码输入的0、±1码所执行的程序中周期数最大的解码输出周期数m,以此为基准,通过对其他执行周期短的输出支路加nop空操作来调整其输出符号所占用的时间,使对3种符号输出的0、1码持续时间相同。此外还应考虑接收码的解码速度应与发送端编码速度相同,这也需要通过添加nop空操作指令来达到每个编码的持续时间一致。