版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
应答器编译码策略解读2009/12/17应答器报文主要具有如下几个特征:两种不同长度的报文:n=1023和n=341,供实际需要选择。2. 两种不同长度的报文分别可传送大量不受限制的信息比特: 830和210bits。(中间有些比特是为报文发送系统的高级应用预留的,比如上行和下行报文的区分。可证实的抵抗各种传播过程中可能出现的错误的安全性。报文的反转码通常能被解码设备识别。反转的报文要么被当成错误处理(这样一来译码的尝试就会失败)要么被当成一个合法的报文,并能很容易将它反转回来。报文的发送和接收都不必从报文的开始或结束为止开始,也就是说可以从报文的中间任意位置。我们有对循环移位的报文有完备的检测程序。支持对以后未知报文格式的兼容。报文格式的设计上,考虑到了在传送过程中抵抗随机比特错误、突发错误、比特滑动和比特插入等常见性错误的能力, 同时还特别注意了报文转换时的潜在问题和报文长短格式的误判(将长报文误判成应答器编译码策略解读 短报文或短报文误判成长报文) 。本文主要对欧洲应答器标准下通信编码部分进行了研究和分析。面向实际应用,对关键算法和报文的生成和接收端的处理过程进行了较为详细的解读。内容上紧扣标准中的规范,方便读者对标准进行准确的理解尹华镜
需要注意的是,无论哪个安全性防范都只在特定的接收机下可用。上面提到的安全防范是针对附录A中的接收机的,但是安全防范和接收机都不是目前的已定配套功能规格。假如能够提供这种完备的安全防范,没有列在附录A中的接收机也是可以使用的。报文的格式说明:2009/12/17报文的具体格式如图 1所示。有两个形式:长度为nL=1023(=93*11)的长报文和长度为nS=341(=31*11)的短报文。报文的bits用bn1,bn2,...,b1,b0表示(其中n=nL=1023或者n=nS=341)。编码方式按照递减的下标(从左到右),这和图1中的“左”和“右”是一致的。报文发送的顺序是从左到右(但并不需要从最左边的bn1开始)。整形后数据控制比加扰比额外整校验比特特形比特8311=913或者特CbSbEsb2111=231bits85bits3bits12bits10bits报文开始部分的整形后数据, 是由后面要介绍的用户数据 (userdata)经“加扰”、“整形转换”(
10-to-11
转换)后得到的。在长报文中,这一块包括
913bits
(83
个
11-bit字),也即是
b1022...b110。短码报文中,这一块包括
231bits(21
个字),也即是
b340...b110。在下面的介绍中,除非特别说明,一个“字”都是包含 11bits。每个字包含 10bits用户数据。长码报文包含 830bits用户数据,短码报文包含 210bits用户数据。
的接下来的
3bits
是控制比特(controlbits
)b109...b107。控制比特的第一位
b109是反转比特(
inversionbit
),必须被设为
0.另外的两个
bit
(b108和b107)在当前版本中不起作用,是为以后的多种报文格式准备的,目前的报文中,将他们分别设为: b108=0,b107=1。接下来的 12bits,b106...b95是加扰比特(scramblingbits:sb),它们存储的是加扰器对用户数据进行加扰时的初始状态,在后面介绍加扰过程时会用到它。接下来的10bits是额外整形比特( extrashapingbits(esb))b94...b85,它们被用于对校验比特进行整形(符合“字”要求)。在接收机方,它们是不被识别的(除非需要进行整形系数的检查)。最后的 85bitsb84...b0是校验比特(checkbits),由75位就校验bits用于错误检测和 10bits用于同步。通常而言,报文是不断重复发送的,也就是说,在整个列车通过的时间段里,不断接收到报文: bn1...b0,bn1,bn2,...如果发送端在列车通过期间转换到一个新的报文,一串至少长度为 75位的连续0或1必须被插入到新旧报文之间(这里的新旧报文并不一定是在完整报文的结束和开始位置被中断和作为起点) 。编码过程:选择12位加扰比特:scramblingbits。对用户数据进行加扰(这一步需要用到加扰比特)。3.将加扰后的数据按照每10bits一组的方式分成若干组(长码83组,短码21组),然后按照转换表,将每个分组转换成11-bit的“字”。4.检查整形参数(约束条件,在后面介绍),如果不满足约束条件,返回步骤1。5.选择10位额外整形比特(如果所有的210种组合都用完,那么返回步骤1。通过计算得到校验比特。7.检查整形参数(校验条件),如果报文通过了,停止。否子返回步骤5。编码的程序流程图可以这样表示:开始选择12比特的加扰位对用户报文进行扰码10-to-11bit 转换确定10bit的esb进行BCH编码NYCheck通过?N1023种组合耗尽?Y结束应答器编码流程步骤4的条件检查从纯逻辑观点来看是不必要的:所有的检查在步骤 7都可以完成。但是出于处理运算的效率原因,它可以尽快地排除掉不合格的候选报文,这样在程序上内循环(步骤 5-6-7)就只需要改变额外整形比特就可以了。所以说在步骤 4的检测中,我们只要检查尽量多的约束条件,而不必要检查所有的条件。这样的编码格式,其背后意义是这样的:每个报文是一个循环码的码字,提供足够的抵抗随机比特错误和突发错误的保护。10-to-11转换增加了抵抗比特滑动和比特插入以及排除大量连续0或1的情况的能力。检查候选报文(步骤4和步骤7)排除了对比特滑动错误抵抗能力弱报文和某段与短报文即为相似的长报文。加扰是为了使给定的用户数据能够产生足够多的可供选择的候选报文,这样才有可能存在一个最后能通过所有检测的报文。这种编码方案具有不断重复的编码尝试,它的优点是使得特定必需的严格安全性防范所需要的报文性质,能够很容易地从候选报文中选择出来,而这一点通过确定性的编码过程是很难保证实现的(除非牺牲大量的信息比特)。然而,在理论上来说,是存在不能被变成这样的码的数据的,因为有可能用于整形过程的bits用完了,仍然没有候选报文通过所有的约束条件检测。不过这种可能性非常低(就随机数据而言,可能性低于
10
100)。如果这种情况发生的话,稍微改变一下用户数据(例如,减少速度限制1km/h)就能满足数据编码的条件了。同时应该指出的是,在一个可以接收的报文被找出之前,产生的候选报文的数量可能是非常大的。相比之下,接收机这边就相对简单和快速多了。加扰和10-to-11 扩展加扰和10-to-11扩展变化时应答器编码过程中两个非常重要的过程,其作用和意义在前面的介绍中已有说明,这里将对它们的具体实现和操作过程进行讲解。任何n元二进制数组 v=[vn1,vn2,...,v1,v0],都可以用数组多项式表示:v(x) vn1xn1 vn2xn2 ... v1x v0。对于任意两个二进制多项式 c(x)和d(x),Rc(x)[d(x)]表示d(x)除以c(x)所得到的余式,也就是的到的余式r(x)的次数低于c(x),有下面等式成立:d(x)=q(x)c(x)+r(x)。(计算过程中,使用的是模2加法)加扰过程由下面 3步完成:将前10位比特替换为所有数据通过一个函数计算后得到数据;通过12位加扰比特计算得出32-bit整数S;S作为32-bit线性反馈移位寄存器电路的初始状态,对输入数据进行加扰。步骤1(以及步骤3中使用的公式)的目的是确保改动用户数据中的一个比特都将得到完全不同的加扰后的序列。步骤1:设长报文m=830短报文m=210,um1,um2,...,u0为用户数据。将用户数据从左到右分成k组10-bit数据,Uk1(um1...um10),Uk2(um11...um20),,U0(u9...u0)。长码下k=83,短码下k=21。用这样的序列组重新得到一个新的序列组:',',,Uk1Uk2U0'k1。新的序列组中,只有第一个分组不同:Uk'1Uimod210(1)i0当i=0k-2时,Ui'Ui。所有的10-bit数组被解释成高位在左的整数。序列Uk'1,Uk'2,,U0'被转换回比特流um'1u0'后,除了um'1,...,um'10,其他的位都与um1,...,um10相等。步骤2:将12bit的加扰比特(sb)b106...b95看成一个整数,最高位在左,这样B=b106211...b962b95,通过下面公式计算32-bit整数S:S=(2801775573*B)mod2^32(2)(注意:2801775573=690693mod232;后者数字是这种随机数字产生的普通选择)。步骤3:使用图2所示的移位寄存器电路,方框位延迟单元,+符号表示异或操作。系数h3230,h,h29,h,h和h等于1,其他系数都为0(不连接)。延迟单元的个数是32。S表示成27250二进制比特流,作为寄存器的初始状态。然后通过m-1个时钟后,由输入序列um'1u0'得到加扰后的比特流:sm1,sm2,...,s0(第一个输出sm1在第一个时钟之前得到,也就是用寄存器的初始状态得到)。10-to-11-bi转换
输入h31 h2 h1 h0输出加扰 32位线性反馈移位寄存器过后的数据 bits被分成每组10bits,下标位递减形式(sm1,sm2,...,sm10为第一组bits),在长报文中有83个这样的分组,而短报文是21个。每个这样的分组在这一步的处理后都会通过一个替换表格变成11-bit的字。这1024个替换值(11-bit字)在标准的附录中有详细列出,这里不做赘述。将一下它的使用方法,也就是转换的规则:首先将10-bit的每个小分组按照最高位在左的原则转换成十进制的整数(i取值为0到1023之间),然后在转换表中找出第i个字(原表是八进制表示方法,需在转换成11-bit二进制比特流)(举例说明就是加入原10位比特转换成10进制数字后,值等于0,那么就找到表中第0(下标从0开始)个八进制字,将其转换回11-bit二进制比特流)。本来如果是11-bit的字的话,所有可能的字是2048个,表中只有1024个(对应原10-bit的1024种可能),也就是说只有表中列出的1024种值是合法可用的,其他1024种都是非法的。(为了检测的目的,前512个可用字的和是267528,所有1024个字的和是512*2047=1048046)。计算校验比特按照编码流程,用户数据在完成加扰、10-to-11-bit转换之后,需要进行约束条件的检测(关于这些条件将在后面介绍),在满足条件的情况下,接下来的工作是计算校验比特。首先是选择额外整形 bits(esb)b94...b85,校验比特用多项式形式表示成下面的形式:b84x84...b1xb0Rf(x)g(x)[bn1xn1...b85x85]o(x)(3)多项式f(x),g(x),o(x)的定义和报文的格式有关。在长报文中, f(x)=fL(x),g(x)=gL(x),O(x)=gL(x):fL(x) x10 x9 x7 x6 x4 x3 x2 x 1gL(x)x75x73x72x71x67x62x61x60x57x56 x55x52x51x49x46x45x44x43x41 x37x35x34x33x31x30x28x26x24 x21x17x16x15x13x12x11x9x4 x 1短报文时, f(x) fs(x),g(x) gS(x),o(x) gS(x):fS(x) x10 x8 x7 x5 x3 x 1gS(x)x75x72x71x70x69x68x66x65x64x63 x60x55x54x49x47x46x45x44x43 x42x41x39x38x37x36x34x33x32 x31x30x27x25x22x19x17x13x12 x11x10x6x3x1多项式gL(x)gS(x)满足:R[gS(x)(x682x3411)]0(4)gL(x)这说明将短报文重复三次得到的“报文”是满足长报文的奇偶校验的。校验位的计算可以用下面的电路来得到:gnkg0gg2gnk2gnk1Gate11+++++OutputDDDDDGate2MuxInputmx()Gate3方框为寄存器,反馈系数由编码g(x)*f(x)来确定,输入为经过加扰和转换之后的bit数据流,每次的bit输入,都将对寄存器的值产生影响。寄存器的最终状态就是计算校验位的结果。检测候选报文(约束条件)每个应用报文应该满足下面的所有条件,不满足的报文必须被抛弃,通过改变额外整形比特(只影响校验比特)或者改变加扰比特(影响到整个报文)。1. 码字表条件(AlphabetCondition )“码字表”是欧标中规定的,用于编码过程更中,将用户数据进行“10-to-11”转换的实现。这个转换就是将比特流分成每组10bits,按照一定规则(码字表)转换成每组11bits。很显然,由于用户数据是经过这么一个转换过程,所以报文的这个部分是符合“码字表条件”的。但是,这里并不仅仅是要求报文表示用户数据的这一部分满足这个条件,而是将这个条件扩大到整个报文,也就是说,紧跟用户数据后面的控制比特( controlbits)、扰码比特(scramblebits)、额外整形比特(Esbbits)、校验位(checkbits)都需要满足“码字表条件”。同步偏离条件(Off-Synch-ParsingCondition)这个条件的定义是:当我们将报文分成每11bits一组时,如果不是按照原始的从报文的初始位开始分组序列,而是从中间非“组头”位置开始分成11bits每组的话,这样的可以看成是原来正常分组向左或向右滑动i位的情况下,出现连续有效的“字”的个数是有限制的。当滑动的位数是1时,这个连续有效“字”的个数,不能超过2;当滑动的位数是2-10位时,连续有效“字”的个数,长报文时不能超过10,短报文时不能超过6。这个条件的意义是,可以使报文具备在发生移位性错误时,能够被发现出来,并判断发生该错误的报文为无效报文。3. 下抽样条件(
Under-samplingCondition
)它的定义是:当原始的报文被因数2、4、8、16抽样时,抽样得到的比特流,当我们从这个比特流的任意位置i开始检测它时,最大的连续有效“字”的个数不能超过30。也就是说,经过抽样后的短报文或长度为341的抽样后长报文的一段,都必须满足这个条件,否则就是无效报文。4. 长报文的非周期条件( AperiodicityConditionforLongFormat )这个条件仅仅针对长报文。它的作用是防止在噪声和比特滑动时,长报文的一部分被误判断成一个短报文。它的实现是通过检测相聚341bits的两个“字”长的两段bit流的汉明距来实现的:i是11的整数倍,那么bi1...bi22和bi3411...bi34122之间的汉明距大于等于 3。当k=+1,-1,+2,-2,+3,-3时,bi1...bi22和bi341k1...bi341k22之间的汉明距大于等于 2。报文的接收调制解调应答器报文在与列车和线边之间传送是通过天线进行的,这就需要对报文进行转换,中间的调制、解调技术在这里不做说明,可根据情况采用相应的技术即可。
D/A、A/D报文检错:对接受到的报文,需要对其进奇偶校验,检测得出一段符合要求的无错数据,才能对其进行下一步的操作。这里的奇偶校验的具体操作就是将接收到的数据取一段报文长度,如果对报文形式未知的话, 可以选取长度为 1023(即长报文长度)的数据(前面有介绍过,3段重复的短报文也是满足长报文的奇偶校验的) ,将其看成多项式形式,除以校验多项式g(x)(前面编码过程中有介绍),如果所得余式为0(能被整除),则说明得到的数据中是没有错误的,可以用于下面的解码过程,否则得话,通过移窗的方法,直到找到一段这样的数据。检查控制
bits
:接收机必须检查控制比特(cb)。如果反转比特应该被反转,并且这个反转必须满上上报给上级处理单元
b109等于1,所有接收到的bite(由上级处理单元决定接收或
都者舍弃这个报文)。控制比特的另外两个bits:b108和b107也要被检查(在报文被解码并被认为是安全之后),如果它们不是分别等于0和1,接收机应当宣布这组消息是“未知的报文格式”。最后,禁止接收机检查下抽样条件,理由是以后多种格式报文的设计(如实时可编码)可能无法满足这个条件。接收机方必须接到没有错误的收额外 bits(超出报文的长度部分):长报文时需要77bits,接收短报文时需要 121bits。任何安全性接收都必须考虑这样的额外 bits。同步算法:在实际的报文发送、接收过程中,发送机采用的是不断循环发送报文信号的方式,在接收机方面,往往不可能从一份报文的第一位开始接收,因此需要找出接收到的报文的初始位(即同步)。欧标中,根据其报文生成的特点,定义了同步多项式:f(x)。f(x)的表示方式对于不同格式的报文是不同的。对于长报文:
f(x)=
fL
(x)
;对于短报文:
f(x)=
fS(x);fL
(x)
和
fS(x)
分别为:fL(x)x10x9x7x6x4x3x2x1fs(x)x10x8x7x5x3x1算法具体描述,如下图所示:其中bn发送的序列,Vn是接收序列,那么二者的关系用多项式可以表示为:v(x)Rxn1[xsb(x)],其中R表示求余运算,n对于长报文和短报文分别是1023和341;s表示接收序列的第一个比特相对与报文的头已经滑动了s个比特;因此要使报文同步,必须求出s(在0到n范围内)的值;校正子sf(x)可用下式表示:sf(x)Rf(x)[v(x)]KKKKK(1)s(x)Rf(x)[xso(x)]KKKK(2)f其中对于长报文和短报文,f(x)分别为fl(x)和fs(x),o(x)g(x);由此可见,决定s的值是校正子sf(x)的值;对于没有错误的报文,上面(2)式不可能等于0;但是对于(1)式,若v(x)的长度为n,周期小于n(但可以整除n),那么(1)式就等于0,所以,当输入为短报文,而接收端是长报文形式接收机时,(1)式就会等于0;这样一来,就可以避免在报文切换时发生的错。由于f(x)不是x1的倍数,也就是说f(x)不能被x1整除,那么则有:Rf(x)[v(x)xn1xn2Kx2x11]Rf(x)[v(x)]从上式可知,当报文中的所有比特都取反后,该同步算法仍然适用。反10-to-11-bits转换这个过程是接收端进行提取原始用户数据的基本过程。通过前面的介绍可以知道,这一步之前所接收到的同步后的数据并不是最初始的用户数据的形式,而是为了使报文在传送过程中具备良好的抗干扰能力而转换后的数据。因此,要得到原来的数据,就需要将前面编码过程中所进行过的转换采取逆转换处理。反10-to-11-bits 转换是这个处理过程的第一步,它的实现方法与编码过程中的10-to-11-bits 转换基本上是相反的:将接收到的数据长报文的前913bits(短报文的前231bits)按照每组11bits分组分成83(21)组。然后将每组的11位比特数据看成是最高位在左的十进制数字。找到转换表(转换成 10进制)中对应的码字,读取出这个码字的坐标(协议中坐标从 0开始,而matlab中坐标只能从 1开始,故这个值需要减 1),将坐标值转换成最高位在左的位的比特流,这样就完成一个小组的反转换了,其它的分组也采用同样的方法,实现全部的转换。解扰在通信上,解扰的过程和加扰是采用同样的电路实现的。在实现的过程上,大体存在下面的差异:1)流程上,解扰要从加扰的第 2步开始,即:将 12bit的加扰比特(sb)b106...b95看成一个整数,最高位在左,这样 B=b106 211 ... b962 b95,通过下面公式计算 32-bit整数S:S=(2801775573*B)mod2^322)解扰的第2步与加扰的第3步相同,采用同样的扰码电路对数据进行处理。在这一步上,二者的算法是完全一样的,这里不做赘述。3)解扰的第3步与加扰的第一步大致相同,不过略有差别。这一步在实际上就是要还原数据的第一个10bit分组。在加扰中,这个分组是由所有分组按十进制取和然后再对1024取模而得到的。所以在解扰过程中,为了还原原始数据,首先要将上一步得到的数据取出除第一个分组之外的所有分组, 看成十进制数后取和,对这个和进行 mod(和,1024),判断结果与输入数据第一个分组比较,最后得到真正的第一个分组十进制数,进而得到正确的原始数据。它在数学上的推导可用下面的关系得到:设z为加扰后的第一个分组, x为原始第一个分组, y为后面所有分组的和,那么有:Z=mod(x+y,1024),我们知道x为10bits数据,其十进制数小于1024,那么:Z=mod{[mod(x,1024) +mod(y,1024)],1024}=mod{[x +mod(y,1024)],1024}如果[x+mod(y,1024)]<1024 ,z=x+mod(y,1024),也说明mod(y,1024)<z,则x=z-mod(y,1024)如果[x+mod(y,1024)]>=1024 ,z+1024=(x+mod(y,1024),则x=1024+z-mod(y,1024)。这样便可以得出原始的第一个 10bits分组,将其转换成比特流,就可以还原原始数据了。接收处理的具体流程:取一个长度为n+r的窗,接收连续的比特流。(长报文r=77,短报文r=121。如果窗已经移动超过 7500bits,r=n);2. 判断奇偶校验是否满足,如果不满足,移窗,回到步骤 1;r位额外bits(窗的右边r位)是否和开始的r位(窗的左边)一致?如果不一致,移窗,回到步骤1;利用同步算法找到报文的开始位置(bn-1),如果Rf(x)[v(x)]是不可能的值,移窗,返回步骤1;5. 对报文进行字母表条件检测,如果存在非法字,移窗,返回步骤 1;到这一步,可以判定报文是安全的。7.反转比特b109=1?如果是,反转报文的所有bits。8.检查控制比特的另外两个bits:b108和b107,如果它们不是分别等于0和1,接收机应当宣布这组消息是“unknowntelegramformat”。进行反10-to-11-bit转换;解扰;输出用户数据bits和反转bit(b109)。整个数据处理过程可以用下面的流程图来表示:取窗b109不为1?N截取报文NY能被g(x)整除?N另两个控制位N分别为0和1?YY前后r位一致?N逆10-to-11-bit转换Y
反转所有比特另两个控制位分别为0和1?NUnknownYtelegramformat逆10-to-11-bit转换同步算法计算N解扰解扰Sf(x)值Sf(x)值有效?输出用户信息输出用户信息和反转位b109和反转位b109Y字表条件检查所有字都合法?Y报文安全应答器接收端报文处理流程图应答器编解码算法的实现和验证根据协议,对整个应答器报文的生成和接收,利用 Matlab工具进行了一系列的仿真和验证工作。工作的内容主要包括两个方面: 报文编码算法部分和接收端对报文的处理过程。下面将对这两个部分详细说明。一、 应答器报文的生成编码算法的实现经过上面的介绍,我们对协议中应答器编码方法应该会有这样的印象:整个编码过程是由加扰、 10-to-11-bit 转换、计算 bch校验位三个主要的步骤实现的,同时在整个流程中,通过选择加扰位和额外整形比特位,控制两次约束条件的检查,最终得到具有良好抗噪声干扰能力的可供使用的报文。1)加扰的实现加扰的实现算法在前面的介绍中已经介绍过了, 对其过程还不了解的读者可以查看前面的章节,这里不做赘述。在 Matlab中可以用下面的语句实现:分组,将每组都看成是一个整数。fori=1:blocku(i,:)=msg0((1+(i-1)*10):(10+(i-1)*10));u_int(i)=bi2de(u(i,:),'left-msb');end计算新的第一组的表示数:u_1=sum(u_int);u_1=mod(u_1,1024);U=zeros(block,10);U(1,:)=de2bi(u_1,10,'left-msb');%%其余的组不变:这样得到新序列 Ufori=2:blockU(i,:)=u(i,:);end%%step2:将加扰bits看成是一个整数:B=bi2de(scramble_bits,'left-msb');S=mod(2801775573*B,2^32);计算出S后,再将S转换成bit流:s=de2bi(S,32,'left-msb');%%%step3:扰乱电路进行加扰hx=[1111010100...0000000000...0000000000...001];redundance=s;fori=1:blockforj=1:10feed_back=xor(U(i,j),redundance(1));y(i,j)=feed_back;fork=1:31redundance(k)=xor(redundance(k+1),and(feed_back,hx(k+1)));endredundance(32)=feed_back;endend扰码完成,将block组数据重新组成用户数据,得到msg_scrambledfori=1:blockforj=1:10msg_scrambled(j+10*(i-1))=y(i,j);endend2)10-to-11-bits 转换的实现协议提供了这个转换所需的转换表,整个过程就是一个查找、替换的流程,具体的规则在前面的章节中也已经介绍过了,有需要的读者可以查阅。转换的对象是前面加扰后的数据,协议中提供的转换表是八进制的,考虑到实际转换过程中用到的是10进制表示的,因此需要将表转先转换成十进制的形式,其它过程可以由下面代码实现:%%读入分组的 bits,并转换成 10进制数,在表中找到对应码后,变回 bit流fori=1:blockbits_block=double(y(i,:));读入第i块数据index=bi2de(bits_block,'left-msb');变成10进制的数,作为坐标y_change8(i)=list(index+1);%%matlab 里,坐标从 1开始,所以要加 1,得到表中的八进制码y_change10(i)=oct2dec(y_change8(i));八进制码变成10进制的y_change(i,:)=de2bi(y_change10(i),11,'left-msb');%%10进制再变回 bit流。end%%10-to-11 转换完成,然后再将分组的 bit变回用户数据流:fori=1:blockforj=1:11msg_scrambled_changed(j+11*(i-1))=y_change(i,j);endend这两个过程的实现在实际应用中基本是固定的,算法的过程里,将这两个过程固定写成一个函数:通过这两步转换,得到用于后面编码的信息数据
很少需要进行改动调整, 故在实际编写creat_msg,用于将原始的用户数据 msg0msg_scrambled_changed。3)约束条件的实现进行约束条件的检查, 需要进行大量的运算, 为了提高编码程序的执行效率, 在进行加扰位的选择上,首先进行了一次手工的筛选: 根据control_bits 固定为001,与scramble_bits的前八位必须组成有效 11bits的字,因此,scramble_bits的前八位可由查表得到, 只有157种可能,后四位用 0-15数字转换成 4位比特流来确定,这样可以得到所有实际可用的scramble_bits为157*16=2512 种可能值。bin_list=zeros(1024,11);pre_scramble_bits=zeros(157,8);fori=1:1024bin_list(i,:)=de2bi(num_dec_list(i),11,'left-msb');endScramble_bits=zeros(157*16,12);pre_scramble_bits(1:157,:)=bin_list(105:261,4:11);fork=1:157forj=1:16back_scramble_bits=de2bi(j-1,4,'left-msb');Scramble_bits((j+(k-1)*16),:)=[pre_scramble_bits(k,:),back_scramble_bits];endend根据协议,将约束检查中的四项分别编写成 matlab函数,供今后在报文生成的过程中调用,它们分别是 Alphabet_test(用于检验字母表条件)、 Aperiodicity (用于检验非周期条件)、off_synch_parsing(用于检验同步偏离条件)、 Under_sampling(用于检验下抽样条件)。同时为了使编码过程更加易于理解,将加扰、10-11转换也用编写的函数creat_msg来表示,计算bch码校验位的过程用函数BCH来实现。整个报文的生成过程将可以用下面的程序段表示:kkk=1;forkk=1:2fori=kkk:2512%%1--2^12-1.scramble_bits=de2bi(i,12,'left-msb');%%用i生成12位的加扰 bits,并逐次增大。scramble_bits=Scramble_bits(i,:);msg_scrambled_changed=creat_msg(msg0,scramble_bits,block);调用creat_msg函数,生成加扰,10-11后的比特流。检测-----control_bits和scramble_bits的前11位(共15位,留下4位放在后头与Esb_bits再做检查)-----%%tt=[control_bitsscramble_bits(1:8)];Flag1=Alphabet_test(tt,num_dec_list);进行字母表条件检查,Flag1=1表示为合法字,Flag1=0表示非法字。Flag2=off_synch_parsing([msg_scrambled_changedtt],num_dec_list,code_type);进行同步偏离条件检查,Flag2=1表示为通过,Flag2=0表示不通过。Flag=Flag1*Flag2;ifFlagkkk=i+1;breakendend%%---------------- 选择Esb_bits,并计算校验位 ------------------%%fore=1:1023Esb_bits=de2bi(e,10,'left-msb');msg=[msg_scrambled_changedcontrol_bitsscramble_bitsEsb_bits];组合成除校验位之外的bit(长码938,短码256)bchcode=BCH(msg,code_type);编码过程中的第二次约束条件检查,全面检查所有条件Flag3=Alphabet_test(bchcode((11*block+1):(11*block+25+85)),num_dec_list);Flag4=off_synch_parsing(bchcode,num_dec_list,code_type);Flag5=Under_sampling(bchcode,num_dec_list);Flag6=1;ifcode_type==1Flag6=Aperiodicity(bchcode);endifFlag3*Flag4*Flag5*Flag6breakendendifFlag1*Flag2*Flag3*Flag4*Flag5*Flag6breakendendfid=fopen('new_test_telegram.txt','w');fprintf(fid,'%2d\n',bchcode);fclose(fid);在上面的过程中, 会对进行约束条件检查的情况进行判断, 如果所有条件均符合, 程序将退出编码循环,输出生成的报文到文件 'new_test_telegram.txt' 保存起来,供后面的测试过程使用。在进行条件检查时, 如果有一个条件不符合, 程序将重新选取加扰位或额外整形位,处理后重新检查条件,知道符合条件的报文出现为止。约束条件函数的检验约束条件函数是由自己编写的, 对其有效性需要进行相应的测试, 在验证其符合协议条件后,才能够真正用于今后的报文编码过程,在这里将对其检验的有效性进行一些测试,以证实它们的可用性。在欧洲应答器协议的一些参考文献中,提供了一些可用于检验的可用报文,在我的检验过程中使用的报文就是这些数据。在这里只应用长、短报文个一个来进行介绍,其它的报文情况读者如果感兴趣也可以自己尝试,这里不做赘述。短报文使用下面的有效报文:21FD51D8406EF3AC30C153B38E911334E1122C03DE309E102F7F4BCCFDBFA36564AB8E0FD35A563344B2A8长报文使用下面的有效报文:983BE6327B2375ED9619469A3D0EF2A63D2D7C3788CDF777C3DDEBD18265A7F522D4BBD4753ADC4D342F5E6391C7B39296BA7D7BECDB142F245C87F8EA7D3E0D2BF6F2F1AB995B7EDF453C413CAE77C23BE97C475A7DF2C55D49AAF3306774FC4AC759F2D9ED5EF913E2E6178592CD7B0FD9101B5167292FB5DF89B8ACDEDA7C1)读入有效短报文,分别调用 Alphabet_test,off_synch_parsing,Under_sampling 函数进行三个约束条件的检查(短报文不需要进行非周期条件检查)。实验的结果是 flag1=1,flag2=1,flag3=1 ,就是说对于有效报文而言, 三个约束函数是能够保证其通过检测的。2)将可用报文做改动(例如改动任意位,或将某段全置零、置 1),可能出现的情况有:改动后,报文能够全部通过三个约束检查;其中 1个或2个条件不能满足; 3个条件全不满足。这些情况说明,约束条件函数能够对不符合其条件的报文做出反应,即是有效的。3)读入有效长报文,分别调用 Alphabet_test,off_synch_parsing,Under_sampling,Aperiodicity 四个函数进行 4个约束条件检查。实验结果是 flag1=1,flag2=1,flag3=1,flag4=1 ,这说明对于有效报文而言, 4个约束函数是能够保证其通过检测的。4)将可用报文做改动(例如改动任意位,或将某段某几段全置 0、置1),可能出现的情况有:改动后,报文能够全部通过三个约束检查;其中 1个或2个条件不能满足; 3个条件全不满足。这些情况说明,约束条件函数能够对不符合其条件的报文做出反应,即是有效的。3.编码算法的初期测试通过上面的过程之后,从协议要求上来说,就已经生成了实际可供使用的报文。这个算法是否可用,还需进一步的测试,在后面介绍完接收段的处理过程和实现方法之后,将进行一个比较全面的算法检测工作。但在进行下一步工作之前,简单的测试工作还是有必要的。在此,可以利用前面的已知报文,在提取出其原始用户数据之后,在通过前面编写的编码程序,生成自己的报文,通过与已知报文的比较,证实所编写算法的有效性。在此,使用的用于测试的长报文为:BE094BAD38415FE742D46BA07961361B64279CDF2BED3DE5BCD9E2F6DF78CC52E2B316BCB95DCD8E73D75BF608B90EF5A3E5035B3DD7B315E40CFB4555D68F755F6D751A4F7F697CF67B6D8A193F4C07B7A96EFC73F4C6EFD4D870DBF7EF7990C9A1258E676ECAD0E1C269CED925AE0FF1219011CDA97DBFA560F6F5F4BD0BD8用于测试的短报文为:B29BEBC199DF37806928BC6E06602C3F94373F878779F7BBE2081CFEDE40711611C02FD27CF9E3C9EB4D681)反10-to-11 转换和解扰进行这个测试的前提是要讲上面的用于测试的报文进行反转换和解扰, 提取出原始的用户数据。这个过程的算法在前面的章节中已有介绍,具体过程请参照前文所述。经过试验得出:长报文中,
scramble_bits=[000000010001]
;esb=[1100110110].短报文中,
scramble_bits=[000000010000]
;esb=[0100010110].2)编码,得到报文用上面步骤得到的用户数据作为编码算法的输入,通过调用算法和函数,得到程序产生的报文。经算法实验得出:长报文中,
scramble_bits=[000000010001]
;esb=[1100110110].短报文中,
scramble_bits=[000000010000]
;esb=[0100010110].3)比较将得到的报文和上面从资料中得到的报文(转换成二进制比特流)进行比较。首先我们可以看到,两种报文的前后加扰bits和额外整形bits是完全一致的,说明编写的编码程序能够完全按照协议的定义,实现报文的编写工作。同时通过比较二进制的报文,可以得出参照报文和得出的报文也bit对应的,完全一致,所以可以得出结论:目前的编码算法是有效的,完全能够面向实际使用。4)问题实验中选取的两种报文长度的参考报文,经解码获得原始数据并重新编码之后,得出的数据是完全一致的, 这说明编码算法上没有什么问题。 不过通过多次的实验可以发现, 某些参考报文在经过重新编码之后, 并不能得到与其一致的报文, 尽管新得到的报文完全满足各约束条件,且在后面的结合接收端进行数据接收处理时, 也是可以正确进行的, 不过与参考报文的差异的存在,本人对其进行了一些研究。通过对编码过程中循环所停止的位置和设置的最大可能位置的比较发现, 往往所设定的最大可能位置大大超过了实际停止的位置,这说明如果在编码最开始满足条件而停止的位置,继续进行其他加扰 bits和额外整形 bits的选择并进行编码尝试的话,完全可以得到一个新的报文。通过初步的参数设置和实验, 这个推理也是真实存在的, 不过由于编码在算法上比较费时,如果要跑完所有的可能情况,需花费大量的时间,因此就目前而言并没有做更进一步的实验。进一步研究参考文献, 发现各种可用参考报文的 0或1的在整个报文段中的比例是不一样的,所以前面的实验中, 由参考报文提取用户信息并重新编码得到新报文与原报文不一致的情况,是由报文中 0或1的比例需求所决定的。也就是,如果没有这种比例上的规定或要求的话,在编码尝试时,直接选取在第一次得到符合要求的报文便能满足应用要求了; 如果有这种比例需求的话,则需要将这种条件加进编码过程,以得到满足这种比例的报文。就目前的使用来看,还没有这种比例上的需求,所以在本版本的编码算法中,对这个条件并没有进行考虑。今后如果有需要的话,可以在这方面进行改进。二、报文的接收和处理前面已经介绍过应答器在接收端对报文进行接收和处理的基本流程和算法, 这里将就其实现过程进行分析和仿真,对存在的一些问题进行探讨。调制和解调上一章报文的生成的最终结果是产生可用于发送传播的报文,不过在实际通信上,要提高信号的传输效率和抗干扰力, 在真正发送报文之前, 需要对报文进行调制。 当前应答器在发送端采用的调制方式是 fsk调制方式。调制参数是:中心频率:4.23M 200k调制频偏:282k 5%信号码率:564 2.5%输出信号功率:>0dBm载波功率:4.23M,传“0”时,发送载频为 3.948M,传“1”时,发送载频为 4.512M;FSK信号传输带宽:1.692M。在FSK信号接收机中,从天线接收的的信号经过带通滤波器滤除带外杂波后送入放大器将信号放大。放大器将信号送入ADC对模拟输入信号进行采样,得到数字化中频信号;乘法器将采样得到的数字化信号和其信号本身的延时信号相乘,以实现 FSK信号的解调。最后用低通滤波器滤除高频分量后将信号输出。其中低通滤波器由积分梳状滤波器、补偿滤波器和抽取率为2的FIR滤波器组成。带通滤波器的指标:中心频率:4.23M通带带宽:1.692M通带衰减:小于等于 1dB阻带衰减:大于等于 60dB 偏移载波中心频率 2M处功率载波:27.095M 隔离度:大于等于 92dB调制和解调的方案设计基本上采用本项目前阶段得到的方案即可, 通过对该方案的仿真和实验,得出结论是该方案是可以满足现阶段需要的。 不过针对该方案中, 对信号数据进行判决方面的缺失,在下面的介绍中,将对其进行补充。解调的数据判决:通过前期的调制和解调之后,得到的是低通滤波之后的时域波形,可以看到该信号具有比较明显的高低值分布,如果是理想状态的话,可用通过这样的高低值的分布来对信号进行判决(取0还是取1),但是仔细分析的话,这些信号的变化比较大,通过多次尝试和仔细分析,决定暂时采用下面的代码对信号进行判决:value_max=max(g); %g为fsk解调后的时域波形gg=g/value_max;figure(6)plot(gg);%%av_gg0=-sum(gg(40:60))/20;ifav_gg0>=.5aa(1)=1;elseaa(1)=0;endfori=2:length(a)av_gg(i)=-sum(gg(40+(i-1)*60:i*60))/20;ifav_gg(i)>=(.35)aa(i)=1;elseifav_gg(i)<=(-.35)aa(i)=0;elseaa(i)=xor(aa(i-1),1);endend这样判决主要是出于在出现
0-1
变化时,信号的变化波动比较大,
分析发现一般一段数据的前面
40个比特波动很大,很难用固定的规律来限定,而后
20比特相对稳定,故主要对这一段进行分析,用于判决。阈值和非常条件的判决,
主要是为了应对某些发生
0-1
间变化时,时域信号值有时无法满足规律而设定的。 经过多次实验和仿真, 得出这样的判决方式, 在信噪比为30dB时,基本上能够保证无错误地解调信号。0.250.20.15率码误0.10.05015202530354010信噪比如果实际情况下,信噪比能达到 30dB以上的话,那么该调制解调方案是可行的,如果在今后的测试时,不能满足该条件,则需要对判决算法进行改进。加窗、检错按照前面的介绍,对接收到的数据加窗,截取用于处理、分析的数据数据。然后在窗内选取一个报文长度的数据,对其进行奇偶校验检测。这个校验的过程主要是对“报文”对g(x)求余,如果余式结果为0向量,则说明能被整除,选取的报文中是没有错误的,可以用于接下来的处理操作。在实现上,将这个求余式的操作用函数Redundance来进行。下面就这个函数的实际效果进行检验。1)读取正确的可用报文 bchcode和用于校验的 gx,作为变量,调用 Redundance函数,得出的结果,如果是全零向量,则说明校验通过,报文无错;否则说明报文有错,需要继续移窗。长报文时:load('bchcode_long') ,读入前面生成的长报文, gx=gx_long;调用函数:redundance=Redundance(bchcode,gx_long)计算结果:redundance为1×75向量,取值全为0。加错:任意改动bchcode中的一位比特值,然后调用函数,得出结果是一个1×75的非零向量。这说明校验算法能够准确的检测出报文中是否存在错误,以便将不正确的报文抛弃,通过移窗,直到得到正确的报文为止。通过对短报文进行同样的测试实验,得出的结论和长报文是一致的。2)将短报文重复三次,利用长报文的校验
gx,进行校验算法检测:前面在介绍 bch校验比特计算的时候,分析了 gL(x)与gS(x)之间的关系,得出重复三次的短报文是满足长报文的奇偶校验条件的。在此,将对短报文的这一性质进行测试,同时这也可以从另一个方面验证前面的编码程序和校验检错程序。首先,任意选择一份生成的短报文,这里,可以采用自己的编码程序利用随机用户信息生成的短报文。短报文的长度是
341,重复三次得到的新序列长度为
1023,正好为长报文的长度。将上面得到的报文和 gL(x)所表示的二进制序列作为
Redundance
函数的参数,计算结果是:得到的余式向量为全 0向量。这样变验证了短报文的这条性质,也进一步验证了校验程序和编码程序的有效性。3)将报文进行循环移位后,进行奇偶校验检错:协议中定义报文的检错是在同步之前的,并且提出报文的发送、接收并不一定是从报文的第一位开始,在报文的最后一位停止。那么在接收端进行报文的移窗、检错操作时,大多数情况下都不是对上面那样的正常序列进行处理的。故有必要对报文在非正常序列进行模拟,并进行检错测试。首先要随机产生接收序列是从正常序列的哪个位置开始的: s=randint(1,1,1023) ,这个函数可以产生从 1到1022的随机整数,确定接收段的接收起始位。将正常报文按照这个值,进行循环移位:fori=1:telegram_lengthif(i+s<=telegram_length)Received1(i)=Received0(s+i);elseReceived1(i)=Received0(mod(i+s,telegram_length));endend这样Received1便可以表示为按照随机位置接收到的信号了。如果是要将短报文重复 3次按照长报文来进行测试,则必须先将短报文扩展成长报文长度后,在定随机位置,这样才符合实际的发送、接收情况。将Received1作为变量参数代入函数Redundance,结果是这样循环移位之后,余式仍然为0向量,符合设计要求。4)对上面三种条件下的测试,分别加入随机错误,进行检错移窗测试:测试的目的是检测程序在对无错报文能够保证其通过时,对有错报文是否具有识别能力。产生错误的位置可以用randint来产生。测试的结果是在加入错误之后,报文被除的余式不再是0向量,这样便验证了算法对错误的检测能力。按照协议规定,在检测到有错报文的情况下,需要移动窗口位置,得到新的报文数据,再次进行检错,知道错误的报文比特被移出窗口,得到被检测为无错的报文,才能进行下一步的处理工作。判断窗内的左r位与右r位是否相等。窗长度的设定使得窗内的数据长度是大于一段报文长度的, 这样的一个检测主要是为了判断接收到的数据是否经历了报文的切换。如果在接收端窗内的数据存在切换的话,所接收到的内容将会被判定是不安全的,需要继续移窗,知道移出危险区段为止。同步算法的测试同步算法在实现上,首先需要事先计算出所有可能的移位对应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川绵阳市第三人民医院春季招聘28人备考题库附参考答案详解(黄金题型)
- 2026四川德阳市高校能源装备区域技术转移转化中心招聘备考题库带答案详解(黄金题型)
- 2026广西柳州融安县长安镇卫生院乡村医生招聘2人备考题库附参考答案详解(培优)
- 2026年职业形象塑造与礼仪规范考核试卷及答案
- 2026辽宁铁岭市调兵山市4月份公益性岗位招聘18人备考题库含答案详解(达标题)
- 2026河南郑州巩义市产业投资发展有限公司招聘副总经理1人备考题库及答案详解(各地真题)
- 2026广西贵港市桂平市垌心乡卫生院招聘编外人员1人备考题库带答案详解(培优a卷)
- 2026年4月西南医科大学附属中医医院招聘23人备考题库(四川)附答案详解(满分必刷)
- 2025-2030智慧消防系统建设必要性及市场可行性分析
- 2025-2030智慧楼宇运维系统市场竞争分析与发展流程建议
- 工程质量验收规范练习题及答案
- 2026年池州市保险行业协会工作人员招聘备考题库含答案详解(能力提升)
- 2026年中国农业银行招聘考试笔试试题(含答案)
- 上海政治高考试卷及答案(2025年)
- 2025学年3 不懂就要问教案
- 2025年北京市各区高三语文一模作文范文汇编(议论文部分)
- 中石化油品采购制度规定
- 2026江苏南通市苏锡通科技产业园区消防救援大队消防文员招录2人笔试模拟试题及答案解析
- 清醒俯卧位通气护理专家共识
- 尽调项目工作方案范文
- 发电公司现货交易奖惩制度
评论
0/150
提交评论