本发明涉及一种解码方法,尤其涉及一种适用于低脉冲时间的解码方法。
背景技术:
常规的解码方式是根据理论的CLK周期计算同步头时间、数据的宽、窄脉冲时间,判断捕获的脉冲时间是否符合同步头、数据宽、窄脉冲的范围来解码的。通常CLK周期是由一个电阻调节的。实际使用过程中,由于环境造成CLK的周期在一个范围内变化,不同的厂家使用的电阻不一致造成有时解码错误或不能解码。
技术实现要素:
本发明的目的在于克服现有技术存在的以上问题,提供一种适用于低脉冲时间的解码方法。
为实现本发明的目的,适用于低脉冲时间的解码方法,其中:设低脉冲为t,设同步码长度为ts,设1个数据位长度为td,设数据位宽脉冲为tw,设数据位窄脉冲为tn,设上一个数据沿与当前捕获的数据沿的长度为t,设时间常数为T,设已捕获的数据位数量为n,设需要捕获的数据位数量为N,设已捕获到的数据帧数为f,设判断为有效捕获的帧数为F,设立关系式ts=td*8=tw*32/3=tn*32,其中tw=12CLK,tn=4CLK,解码时,通过MCU的硬件定时器捕获低脉冲t后与时间常数T进行比较后进行判断,继而与上一帧数据比较,获取解码信息,所述的时间常数T的取值范围为0至实 测最短同步头时间之间,所述的判断为有效捕获的帧数F的取值范围是大于0的整数。
进一步地,上述的适用于低脉冲时间的解码方法,其中,所述的低脉冲t大于0且小于ts/16,则收到一位数据,计为1;或是,所述的低脉冲t大于等于同步码长度ts/16且小于同步码长度ts/8,则收到一位数据,计为0;或是,所述的低脉冲t大于等于同步码长度ts/8且小于同步码长度ts/2,则数据错误;或是,所述的低脉冲t大于等于同步码长度ts/2,则收到同步码。
更进一步地,上述的适用于低脉冲时间的解码方法,其中,所述的解码时,步骤1,捕获到低脉冲t,将低脉冲t与时间常数T进行比较,若t大于T,则记为ts=t,n=0;步骤2,再次捕获一个低脉冲t,若低脉冲t大于同步码长度ts/2,则ts=t,n=0;若t大于ts/8,则跳到步骤1;若t大于等于ts/16,则收到一位数据1;否则,收到一位数据0,且n=n+1;若n大于等于N,则接收数据与上一帧数据比较,若两者相同,则f=f+1,若不同,则f=1并丢弃之前收到的数据帧,若f大于等于F,则解码成功,否则跳到步骤2。
再进一步地,上述的适用于低脉冲时间的解码方法,其中,所述的解码时,若F=1,则直接判断解码成功;若第一次收到数据帧,则不比较,且令f=1。
采用本发明技术方案,即便是遇到不同的厂家使用的电阻不一致而导致解码出错的情况,也可以通过有效的容错率,根据设定的编码格式,有效分析出数据宽、窄脉冲与同步头符对应的比例关系。由此,在实际处理时,只需要知道同步码、数据宽脉冲与数据窄脉冲三个中的任一值都可以由它们之间的比例关系计算出其它两个。并且,由于同步码的宽度最宽,由其计算数据宽、窄脉冲时间受干扰的影响最小。则解码时只要捕获到同 步码的时间即可,提高了处理效率。
本发明的目的、优点和特点,将通过下面优先实施例的非限制性说明进行图示和解释,这些实施例是参照附图仅作为例子给出的。
附图说明
图1是适用于低脉冲时间的解码方法所涉及到的编码格式示意图。
图2是本适用于低脉冲时间的解码方法的实施流程示意图。
具体实施方式
如图1、图2所示的适用于低脉冲时间的解码方法,其与众不同在于:为了便于实现只关注低脉冲时间来进行解码,且可以允许适当的误差,提高容错率,首先设低脉冲为t,设同步码长度为ts(通常为低脉冲),设1个数据位长度为td,设数据位宽脉冲为tw,设数据位窄脉冲为tn。同时,设上一个数据沿与当前捕获的数据沿的长度为t,用来配合高脉冲或低脉冲,满足不同工况的处理需要。并且,设时间常数为T,设已捕获的数据位数量为n,设需要捕获的数据位数量为N,设已捕获到的数据帧数为f,设判断为有效捕获的帧数为F。
由此,可以设立关系式:ts=td*8=tw*32/3=tn*32,其中tw=12CLK,tn=4CLK。这样,在解码时,通过MCU的硬件定时器捕获低脉冲t后与时间常数T进行比较后进行判断,继而与上一帧数据比较,获取解码信息。由于本发明所涉及的数据解码基本在物理层,由此只有同步码0和1。并且,为了提高实际数据处理的容错率,减少运算数据过于冗长,时间常数T的取值范围为0至实测最短同步头时间之间。结合实际实施来看,脉冲的宽度是通过电阻阻值调节的,电阻阻值受温度影响。同时,因为不同的厂家选择的电阻阻值也有差别,为此,通过多次对比试验后发现实测取值3ms效果较好。
与之对应的是,考虑到能够对捕获的帧数是否有效进行精确判断,对于判断为有效捕获的帧数F的取值范围是大于0的整数。同时,通过多次对比试验后发现,效捕获的帧数F的值取2较为适宜。其原因在于,相邻的两帧数据同时出现相同的错误概率很小。而取1时数据是否错误无法判断,没有比较对象。同时,取大于2的值对提高错误码判断意义不大。F值越大,则需要检测的数据帧越多,响应越慢。结合多种因素权衡后来看,还是2较为适宜。
结合本发明一较佳的实施方式来看,本发明所涉及的低脉冲t实际数值为大于0且小于ts/16,则收到一位数据,计为1。如果低脉冲t大于等于同步码长度ts/16且小于同步码长度ts/8,则收到一位数据,计为0。也有可能出现低脉冲t大于等于同步码长度ts/8且小于同步码长度ts/2,则表示这个数据错误。这些数据错误往往涉及干扰数据,可以进行丢弃处理。并且,本发明涉及的低脉冲小于0~ts/16,与ts/16~ts/8这两个条件就是容错处理,且理论的低脉冲宽度为ts/32或ts*3/32。同时,也会出现低脉冲t大于等于同步码长度ts/2的情况,这个状态就表示则收到同步码。具体来说,数据是串行进入MCU的,MCU的定时器每次捕获一个低脉冲,记为时间t。当没有检测到同步码时,若t大于T,则记ts为t,否则丢弃。这样,即使出现误差,在考虑实时性后也可忽略。
进一步来看,本发明所采用的具体解码过程如下:首先,捕获到低脉冲t,将低脉冲t与时间常数T进行比较。若t大于T,则记为ts=t,n=0。接着,再次捕获一个低脉冲t,在此期间,若低脉冲t大于同步码长度ts/2,则ts=t,n=0。若t大于ts/8,则返回到之前的捕获步骤。若t大于等于ts/16,则收到一位数据,记为1。否则,收到一位数据,记为0,且n=n+1。
同时,为了减少数据的重复比较,影响处理效率,在上述的处理过程 中,若n大于等于N,则接收数据与上一帧数据比较。若两者相同,则f=f+1。若不同,则f=1并丢弃之前收到的数据帧。并且,如果出现f大于等于F,则解码成功。否则跳回到上述步骤,再次来对低脉冲t进行捕获处理。
并且,考虑到缩减不必要的判断流程,在实际的解码期间,若出现F=1的情况,则直接判断解码成功。同时,如果是第一次收到数据帧,则不比较,且令f=1,便于后续处理。
通过上述的文字表述并结合附图可以看出,采用本发明后,即便是遇到不同的厂家使用的电阻不一致而导致解码出错的情况,也可以通过有效的容错率,根据设定的编码格式,有效分析出数据宽、窄脉冲与同步头符对应的比例关系。由此,在实际处理时,只需要知道同步码、数据宽脉冲与数据窄脉冲三个中的任一值都可以由它们之间的比例关系计算出其它两个。并且,由于同步码的宽度最宽,由其计算数据宽、窄脉冲时间受干扰的影响最小。则解码时只要捕获到同步码的时间即可,提高了处理效率。
当然,以上仅是本发明的具体应用范例,对本发明的保护范围不构成任何限制。除上述实施例外,本发明还可以有其它实施方式。凡采用等同替换或等效变换形成的技术方案,均落在本发明所要求保护的范围之内。