一、报文格式:1、长报文:1023 bits,具体如下图2、短报文:341 bits 格式:二、编码流程图:1、830bits:按照实际所需限速等条件整理出830bits用户数据。
2、选择12bits加扰位。
选定加扰位的初始值。
3、加扰:(1)长报文格式中m=830,短报文格式中让m=210。
假设Um-1,….,U0是830bits用户数据位,m-1=829。
将用户数据位从左到右分成K块,每块为10bits,Uk-1=(Um-1…Um-10),Uk-2=(Um-11…Um-20),…,U0=(U9…U0),长报文K=83。
通过计算生成新序列U`为U`k-1,U`k-2,…,U`0, U`,新序列的U`k-1为:即U`82=(U82+U81+…+U0)mod。
(mod为求余计算)U`新序列的U`k-2,…,U`0分别与U序列的Uk-2,...,U0相同。
(2)计算S:其中B为:利用12bits加扰位计算B.2801775573为这种类型随机数发生器的通用选择(3)利用加扰器进行加扰生成新数据。
如下图正方形为延时单元,加号代表异或操作。
系数h31,h30,h29,h27,h25,h0为1,即相当于连接,其他h28,h26,h24,h23,…,h1为0,即不连接。
S的32位二进制数从最高有效位到最低有效位即S31,…,S0,被定义为上图中移位寄存器的初始值。
然后移位寄存器在每个时钟后向左移动一次,共移动m-1次,并且在每来一个时钟时,将U1m-1,…,U`0,依次分别输入,最后加扰生成Sm-1,…,S0。
(在第一个时钟之前先读输出Sm-1)。
4、10bits-11bits 整形变换:将加扰后生成的新序列Sm-1,…,S0,分成K=83块,每块10bits ,生成新序列Sk-1,…,S0,分别将Sk-1,…,S0,的十位二进制数转换成十进制数并以此十进制数为地址进行查表B2,将所查地址中的数据分别一一替换Sk-1,…,S0,最后生成83*11bits=913bits 数据。
(036附录B2)。
5、检查1:本次检查只是初步检查,尽可能多的检查相关条件,以提高效率。
所有的检查在检查2中都会进行。
(1)字母表条件:很明显该条件在报文10bits-11bits 整形部分应自动满足(913bits )。
(整个1023bits 报文都应该符合字母表条件,但是为了提高效率在检查1中只进行部分尽可能多的检查。
)(2)同步偏离条件:首先将913bits 分成83*11bits,i=1023即(bi-1,bi-2,…bi-11),(bi-12,…,bi-22),(bi-23,…bi-33),…。
向右偏移1bits 后,去11bits 数据,即(b1021,…,b1011),b1021为序列的第1022项,若偏移量为b=1,i-1+b=1023能被11整除,所以对其进行查表后连续有效数的个数不能超过2个。
当i-1+b 不能被11整除的话即偏移2-10位的话连续有效字的个数,长报文不能超过10个,短报文不能超过6个。
这个条件的意义是,可以使报文具备在发生移位性错误时,能够被发现出来,并判断发生该错误的报文为无效报文。
(3)长报文的非周期条件:这个条件仅适用与长报文。
它防止在噪声和比特滑动时,长报文的一部分被判断成一个短报文。
它的实现是通过检测相距341bits 的两个字长的两端bits 流的汉明距来实现的。
i 是11的整数倍,那么bi-1…bi-22和bi-341-1…bi-341-22之间的汉明距大于等于3。
当k=+1,-1,+2,-2,+3,-3时,bi-1…bi-22和bi-341-k-1…bi-341-k-22之间的汉明距大于等于2。
所谓汉明距就是两组数据流按从高位到底位或从低位到高位分别依次对比,其中数据不一样的个数为汉明距。
(4)欠采样条件:为了确保当以2、4、8、16倍的分频采样时,采样得到的比特流,当从这个比特流的任意位开始检测时,确保其最大的连续有效的字(11bits )的个数不能超过30。
6、esb :选择额外整形位初始值。
7、校验:目的是计算生成85位检查位。
校验比特用多项式形式表示成下面的形式:841858410()()185...[...]()n f x g x n b x b x b R b x b x o x (3) 多项式f(x),g(x),o(x)的定义和报文的格式有关。
在长报文中,f(x)=f L (x),g(x)=g L (x),O(x)=g L (x):10976432()1L f x x x x x x x x x757372716762616057()L g x x x x x x x x x x565552514946454443x x x x x x x x x413735343331302826x x x x x x x x x24211716151312119x x x x x x x x x 41x x短报文时,()()s f x f x ,()()S g x g x ,()()S o x g x :108753()1S f x x x x x x x757271706968666564()S g x x x x x x x x x x636055544947464544x x x x x x x x x434241393837363433x x x x x x x x x323130272522191713x x x x x x x x x 121110631x x x x x x多项式()L g x ()S g x 满足:682341()[()(1)]0gL x R gS x x x(4) 这说明将短报文重复三次得到的“报文”是满足长报文的奇偶校验的。
8、检查2:检查检查1中所有四个条件。
三、译码流程:1、取窗:去n+r,长报文为n=1023、r=77,短报文n=341、r=121。
2、奇偶校验:将所取的1023 bits n看成多项式的形式即n(x)=b1022x1022+b1021x1021+…+b1x+b0,若n(x)能被g(x)整除,则说明数据中没有错误,可以用于下面的解码过程,否则的话,通过移窗的方法,直到找到一段这样的数据。
3、r=r`?:额外的r检测,窗右边的r`和窗开始的r是否一致?不一致的话,移窗,回到步骤1。
4、同步计算:在实际的报文发送、接收过程中,发送机采用的是不断循环发送报文信号的方式,在接收机方面,往往不可能从一份报文的第一位开始接收,因此需要找出接收到的报文的初始位(即同步)。
欧标中,根据其报文生成的特点,定义了同步多项式:f(x)。
f(x)的表示方式对于不同格式的报文是不同的。
对于长报文:f(x)=()L f x ;对于短报文:f(x)=()S f x ;()L f x 和()S f x 分别为:10976432()1L f x x x x x x x x x108753()1s f x x x x x x x算法具体描述,如下图所示:其中n b 发送的序列,n V 是接收序列,那么二者的关系用多项式可以表示为: 1()[()]n s x v x R x b x ,其中R 表示求余运算,n 对于长报文和短报文分别是1023和341;s 表示接收序 列的第一个比特相对与报文的头已经滑动了s 个比特;因此要使报文同步,必须 求出s(在0到n 范围内)的值;校正子()f s x 可用下式表示:()()[()](1)f f x s x R v x()()[()](2)s f f x s x R x o x由于s 的范围在0到n 间,所以先将s=0,s=1,…,s=n 分别代入(2)式这样得到一张关于sf(x)的数据对应表,然后利用(1)式计算出sf(x)的值,然后根据计算的sf(x)值进行查表,从而确定s 的值。
其中对于长报文和短报文,()f x 分别为()l f x 和()s f x ,()()o x g x ;由此可见,决定s 的值是校正子()f s x 的值;对于没有错误的报文,上面(2)式不可能等于0;但是对于(1)式,若()v x 的长度为n ,周期小于n (但可以整除n ),那么(1)式就等于0,所以,当输入为短报文,而接收端是长报文形式接收机时,(1)式就会等于0;这样一来,就可以避免在报文切换时发生的错。
由于()f x 不是1x 的倍数,也就是说()f x 不能被1x 整除,那么则有:1221()()[()1][()]n n f x f x R v x x x x x R v x从上式可知,当报文中的所有比特都取反后,该同步算法仍然适用。
假如(1)式为计算值为0,则返回按短报文进行处理。
5、字母表查询:将所得1023bits 分成93*11bits 数据,查表进行判断其有效性。
6、检查b109:反转比特b109=1?如果是,反转报文所有bits,同时记录b10的值,报告给车载计算机。
7、另外两个bits b108、b107检测:若果它们分别等于0,1,接收机应答宣布这组消息是“unknown telegram format”8、11bits-10bits 转换:这个过程是接收端进行提取原始用户数据的基本过程。
通过前面的介绍可以知道,这一步之前所接收到的同步后的数据并不是最初始的用户数据的形式,而是为了使报文在传送过程中具备良好的抗干扰能力而转换后的数据。
因此,要得到原来的数据,就需要将前面编码过程中所进行过的转换采取逆转换处理。
反10-to-11-bits 转换是这个处理过程的第一步,它的实现方法与编码过程中的10-to-11-bits 转换基本上是相反的:将接收到的数据长报文的前913bits(短报文的前231bits)按照每组11bits 分组分成83(21)组。
然后将每组的11位比特数据看成是最高位在左的十进制数字。
找到转换表(转换成10进制)中对应的码字,读取出这个码字的坐标(协议中坐标从0开始,而matlab 中坐标只能从1开始,故这个值需要减1),将坐标值转换成最高位在左的10位的比特流,这样就完成一个小组的反转换了,其它的分组也采用同样的方法,实现全部的转换。
9、解扰:分三步(1)将12bit 的加扰比特(sb )10695...b b 看成一个整数,最高位在左,这样B=1110696952...2b b b ,通过下面公式计算32-bit 整数S:S= (2801775573*B)mod2^32 。
(2)解扰的第2步与加扰的第3步相同,采用同样的扰码电路对数据进行处理。
在这一步上,二者的算法是完全一样的,这里不做赘述。
(3)解扰的第3步与加扰的第一步大致相同,不过略有差别。