推动现代化空中交通管制 全球逐渐导入ADS-B
由民航机所发送出来的自动相关监视广播(ADS-B),提供容易取得的无线电讯号,可用来展示基于与Xilinx Zynx-7000 All Programmable SoC连接的AD9361的快速原型建构流程。
民航机使用ADS-B传送器向空中交通管制者(Air Traffic Controllers)报告它们的位置、速度、高度及飞机标识符,其飞行数据格式是定义于国际民航组织(ICAO)的S模式扩展电文(Mode S Extended Squitter)标准中。目前ADS-B正在全球各地导入中,以推进空中交通管制及防撞系统的现代化。除了欧洲已正式采用外,美国也正在逐步普及中。
S模式扩展电文标准提供RF传送格式与编码数据字段的细节,而转发器(Transponder)的传送具有以下的特性:
.传送频率:1090MHz
.调变:脉冲位置调变(PPM)
.数据速率:1Mbit/s
.讯息长度:56微秒(μs)或112μs
.24位CRC检查总和(Checksum)
RF收发器AD9361能涵盖整个调谐频率(Tuning Frequency)及带宽,而收到的I/Q取样值,可透过多种的软件或嵌入式平台选项,来加以侦测及解碼。
本文将讨论如何使用基于AD9361的接收平台,来补捉这些S模式讯号,然后再透过MATLAB及Simulink来开发能够译码这些讯息的算法。此算法的最终开发目标,在于能将解决方案布局到Zynq SoC平台上,例如Avnet的PicoZed SDR模块化系统(SoM)。
克服四大挑战 助S模式接收/译码讯息
S模式讯息短为56μs,长则可达112μs。短讯息包含讯息类型、飞机标识符、以及一循环冗余检测(CRC)检查总和,长讯息则还包含高度、位置、速度及飞行状态。但不论是何者,S模式传送都是以8μs前置讯号(Preamble)为开始,接收器可使用此前置讯号的式样(Preamble Pattern)得知有效讯息正要被传送,此前置讯号式样还可协助接收器判断讯息的位何时开始。相关细节请参考图1。
图1 S模式讯息的架构
S模式的波形相当简单,但要成功地接收及译码被传送的讯息,还是有一些挑战须要克服。
一、接收环境通常包含非常短且穿插长闲置期间(Idle Period)的讯息,而当发射讯息的飞机与接收器的距离很远时,接收到的讯号还可能会相当地微弱。
由于旧(Legacy)波形也是以1090MHz来传送,因此接收器必须利用前置讯号,在拥塞的频带中辨识出高与低振幅的S模式传送。
二、在每一个1μs的位期间内,位有两种可能的式样。逻辑1为第一个1/2μs为ON,而第二个1/2μs为OFF。逻辑0则是第一个1/2μs为OFF,而第二个1/2μs为ON。由于位是以时基式样(Time-based Patterns)来进行判定,接收器必须使用前置讯号来正确地找出讯息位开始时的I/Q取样。
三、S模式讯息是由八十八个信息位及二十四个检查总和位所组成。接收器必须能清除缓存器、判定位、计算检查总和、并在正确的时间点读取检查总和缓存器。时序控制对于接收器的正常动作而言是必要的。
四、对于嵌入式设计来说,译码处理必须以一个取样接一个取样的方式来进行。将大量的批处理用数据储存起来,对于嵌入式系统而言,并非切合实际的接收器设计。
将AD9361这类功能强大的RF前端,与MATLAB这类技术运算语言加以结合,能减化侦测及译码这些传送数据的相关问题。MATLAB及Signal Processing Toolbox所提供的功能,可用来辨识同步式样(Sync Pattern)、计算噪声基准 (Noise Floor)、判定位以及计算检查总和。MATLAB中的条件型(Conditional)及执行控制(Execution Control)功能,可简化控制逻辑。测试数据的取得相当容易,包括从二进制或文字格式的档案,或是也可使用AD9361SDR平台直接串流入MATLAB。最后,MATLAB的解译特性(Interpreted Nature)有助于与数据之间的互动、尝试不同的方法,以及以互动方式开发出解决方案。
MATLAB中S模式接收器算法模型化与验证
设计接收器算法的第一步,是取得一些资源数据(Source Data)。由于目前许多飞机都配备有S模式的转发器,因此可以只调整接收器到1090MHz的广播频率,即可接收到本地传送。举例来说,可以使用Zynq SDR快速原型平台。
ADI提供的MATLAB System Object,可以透过以太网络从FMCOMMS平台接收资料。
System Object能够让用户可以选择谐调频率以及取样率、使用无线电硬件收集接收取样值、并且可以将接收到的取样值直接带入MATLAB的工作区中以作为MATLAB变量。
System Objec#e#
所需的程序代码非常短,其中一小部份用来设置MATLAB System Object,一部份负责FMCOMMS3的设置,另外有一部份则是捕捉I/Q取样并写入MATLAB变数中。图2到图4所示为此类程序的例子。
图2 用于设定MATLABS System Object的MATLAB程序代码范例
图3 用于配置FMCOMM3电路板的MATLAB程序代码范例
图4 用于捕捉I/Q取样值并写入Rx变量的MATLAB程序代码范例
使用基于这些指令的程序,以12.5MHz的取样率来捕捉一些数据组。之所以选择12.5MHz的取样率,是为提供足够的取样值以便微调前置讯号与第一个讯息位之间的对位,并利用平均化处理,去除掉用来判定位的取样中的噪声。图5是由一百万笔取样值所得出的结果。
图5 1090MHz上的取样数据捕捉
在此短数据组中,有十四个讯号突显于噪声基准之上,其中有两个S模式讯息,其他则是应被排除的旧或伪(Spurious)讯号。如果聚焦并展开取样604000一带的区间,可观察到有效的讯息之一(图6)。
图6 单一S模式讯息
在此图中,可清楚地看出前置讯号部份,由PPM调变所产生的位转换(Transition)也明显可见。但即使是如此干净的讯号,如果要藉由检视方式来译码位,还是需要好的眼力及高的耐性。因此一套能对这些讯息进行自动译码的程序是必要的,而MATLAB正是开发此类程序的良好解决方案。
用于接收及译码S模式讯息的MATLAB程序代码,其内容可摘要说明如下。 一、使用Filter()函式,计算一短时间窗内的噪声基准及前置讯号关联性(Preamble Correlation)。在此解决方案中所使用的时间窗是七十五个取样值,相当于是6μs。
二、当前置讯号关联性超过噪声基准达一定程度时,启动逻辑以寻找第一个讯息位取样值。
a.此临界值的选择是很主观的,它应该要小到足以侦测到微弱讯号,但又要大到足以避免许多的假正值(False Positive)。选择比噪声基准大十倍以上的值来作为一合理的临界值,以补捉大部份的可译码讯息。
b.前置讯号的式样会产生多个峰值,由于最佳的符合者会出现在最先的6μs,因此先储存第一个峰值,开始寻找第一个讯息位,并观察在接下来的3μs内是否有出现更大的峰值。如果确实有出现,则储存此新的峰值,并重置第一个讯息位起端的寻找动作。
c.当最大峰值出现时,待2μs后开始讯息位的译码。
d.图7中显示了噪声基准,以及将一理想的前置讯号关联到输入数据所得到的结果。其中有数个高过噪声基准的峰值,但关注的是具有最大振幅者。第一个讯息位的取样值会在峰值的2μs后出现。
图7 噪声基准的计算及前置讯号关联性
三、对于每一个别的位,分别将前1/2μs及后1/2μs取样的振幅加总,其中总和较大者决定此位是逻辑1或逻辑0。
四、在位判定完成时,计算出检查总和。这需要一些控制逻辑来负责在第一位到达时重置CRC缓存器、为88位计算出检查总和、并为最后的24位清空CRC缓存器。当接收到的位与检查总和符合时,ADS-B讯息才算有效。
五、根据S模式标准解析讯息位(图8)。
图8 经译码的S模式讯息
图8中MATLAB指令窗口所显示的,是由一百万笔取样数据组中,成功译码出来的两个讯息。
显示的内容包括了构成88位讯息及24位检查总和的十六进制字符,而译码处理的结果则显示了飞机ID、讯息类型、及飞行速度、高度及位置。
MATLAB提供数学及讯号处理语言,以便解决此问题。用来处理数据取样及最终将讯息译码出来的MATLAB程序代码其实很短,只有两百行左右。此外,MATLAB的解译特性,可让设计构想的交互式试作变得容易,并能很快地找出可行的解决方案。多种时序机制(Timing Mechanisms)、临界值(Thresholds)及噪声位准,会透过各种数据组来加以测试,以产生令人满意的程序。
此MATLAB程序代码已经使用来自本地飞行区中的飞机讯号上测试过,而译码出来的讯息也已经和Airframes.org及Flightaware.com等这类来源比对检查过。依得到的结果来看,硬件与程序代码都有较佳表现,可对来自50英里远处飞机的讯号进行译码。
完整工作流程 帮助嵌入式平台开发
MATLAB是在个人计算机(PC)上测试设计概念并执行算法的较佳环境,但如果最终的目标是要产生用于嵌入式平台上的软件或HDL,特别是像Zynq SoC这类产品,则Simulink是较好的的解决方案。
Simulink特别适用于针对可编程组件所需的特定硬件开发的模型化。良好的工作流程,是利用MATLAB开发及验证算法,再将设计转译为Simulink,并继续开发流程到最终硬件完成。
此算法的MATLAB程序代码是以一次一笔取样值的方式处理资料,因此转换到Simulink是较直接的。相对于两百行的MATLAB程序代码,Simulink模型的显示及叙述更为简单(图9)。
图9 S模式侦测及译码算法的Simulink模型
图9中可观察到,解碼的第一步是计算噪声基准及与前置讯号的关联性,数字滤波功能块可用来处理这些计算。时序(Timing)控制功能块则是由Stateflow来完成,这是用来为其他的译码算法产生时序、重置、及控制讯号的状态机(State Machine)工具。Stateflow对于要将控制逻辑从数据流分开来的模型而言非常有用。
一旦时序及触发被启动,名为BitProcess的功能块便会开始接收输入I/Q取样,并计算出数据位,而CRC_Check功能块则会计算出检查总和。讯息分析仍会在此Simulink模型所驱动的MATLAB脚本中进行。
如果深入了解模型,可以发现Simulink的一些特性让它适合于嵌入式的开发,特别是在于将设计分割为Zynq SoC专属的函式上,以及产生HDL码及C程序代码。
一、Simulink有定点(Fixed-point)支持,因此可以为设计建立并测试Bit-true的版本。个别的功能块,能为模型中的数学运算设定字长及分数长度。其中一个例子,就是用来计算前置讯号关联性的数字滤波器功能块(图10),使用者可为其运算设定四舍五入模式及溢流(Overflow)行为(Floor及Wrap是以HDL所完成的数学中最简单的选择)。此外,也可以为乘积及滤波器的累加器运算,设定不同的字长及分数精准度(图11)。并能使用对应于接收器ADC的字长选择,以便利用如Zynq SoC DSP48 Slices中的18位×25位乘法器这类的硬件乘法器。
图10 用于前置讯号关联的Simulink数字滤波器方块和12位数据类型
图11 固定点数据类型的设定
二、嵌入式设计通常有许多的动作模式,及条件型执行算法。Stateflow适合处理这些控制讯号。Stateflow提供侦测及译码S模式讯息所需控制逻辑的视觉表现。图12中可看到逻辑的状态为:
图12 译码S模式讯息的Stateflow图
a. SyncSearch(同步搜寻):在捕捉到的取样中寻找前置讯号
b. WaitForT0(等待T0):寻找第一个讯息位的起始
c. BitProcess(位处理):启动位处理
d. EmptyReg(清空缓存器):清空检查总和缓存器,并将这些位与位处理的输出做比较
当侦测与译码算法通过不同状态而进展时,Stateflow功能块会产生用来启动位处理的讯号、重置位判定计数器及检查总和缓存器、并读出S模式讯息尾端的检查总和位。
三、Simulink功能块链接库为工程师提供多种高阶或高度细节的工作选项,它具有高阶的功能块,如数字式滤波器、FFT、及数值控制振荡器,以利讯号处理设计的建立。如有需要更高精度的设计控制,像是速度或区域优化,则可使用单位延迟(Unit delays)、逻辑操作元(Logic Operators,比方说XOR),以及切换开关等低阶功能块。此模型中的24位检查总和,是使用这些低阶功能块所建立的回授移位寄存器(图13)。
图13 用于计算S模式检查总和的回授平移缓存器
此Simulink模型是特定硬件版的MATLAB算法,它能侦测并译码S模式讯息。对于用MATLAB所写成的行为算法与嵌入式硬件的完成码之间的间隙来说,Simulink是能加以连接起来的有效工具。并可将特定硬件加工导入Simulink模型、运行模型、并验证确认所做的修改是否会破坏译码算法。
Zynq SDR快速原型建构(Rapid Prototyping)平台与MathWorks软件的结合,为通讯工程师提供具弹性的方法,能将其无线接收器的设计构想快速转换为产品原型。
捷变宽带RF收发器所提供的可编程能力与性能,以及硬件与MATLAB环境之间的简易连接性,让工程师能取得多样的无线电讯号。工程师能透过MATLAB,快速尝试许多不同的设计构想,然后再选择其中最可行的解决方案。如果设计的终极目标是嵌入式处理器,则工程师可使用Simulink以特定硬件构想来优化设计,最后再产生可用于此处理器的程序代码。此工作流程可降低设计无线接收器所需的技巧种类,并缩短从概念到可动作原型所需的开发周期。
评论
查看更多