EDN China > 技术文章 > EDA工具与服务 > 系统级设计 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

设计开发软件定义无线电之利用MATLAB和Simulink进行S模式检测和解码

Mike Donovan?? Andrei Cozma?? Di Pu?? 2015年11月20日 ?? 收藏0
自动相关监视广播波形

能被检测和解码的无线信号无处不在。利用当今的软件定义无线电(SDR)硬件,像ADI公司的集成RF捷变收发器AD9361/AD9364等,很容易接入这些信号。商业航空器的自动相关监视广播(ADS-B)传输提供了一个现成的无线信号,利用它可演示基于AD9361和Xilinx Zynq-7000 All Programmable SoC的快速原型开发流程。 商业航空器利用ADS-B发射机向空中交通管制员报告其位置、速度、高度和航空器ID。国际民用航空组织(ICAO) S模式超长电文规范定义了飞行数据格式。ADS-B正在向全世界推广,以便构建现代化空中交通管制和避碰系统。 它已被欧洲采用,美国正在逐渐引入。

S模式超长电文标准详细规定了RF传输格式和编码数据字段。 应答器传输具有如下特性:

·发射频率: 1090 MHz

·调制: 脉冲位置调制(PPM)

·数据速率: 1 Mbps

·消息长度: 56 μs或112 μs

·24位CRC校验和

调谐频率和带宽完全在AD9361 RF收发器的能力范围之内,收到的I/Q样本可利用多种软件或嵌入式平台选项进行检测和解码。

本文将讨论如何利用一个基于AD9361的接收机平台来捕捉这些S模式信号,然后利用MATLAB和Simulink开发一个能够解码消息的算法。 该算法的最终目标是将该解决方案部署到Zynq SoC平台上,例如Avnet PicoZed SDR系统化模块(SOM)。

接收机设计挑战

S模式消息有短(56 μs)和长(112 μs)两种。 短消息包含消息类型、航空器识别号和循环冗余校验(CRC)和。 长消息则还包含高度、位置、速度和飞行状态信息。 无论何种情况,S模式传输均从一个8 μs前同步码开始。 接收机通过此前同步码确定一条有效消息正在传输,此前同步码还能帮助接收机确定消息位从何时开始。 详情参见图1。

图1. S模式消息结构
图1. S模式消息结构

S模式波形相当简单,但要成功接收并解码消息,仍有若干挑战需要解决。

1.接收环境通常是长时间空闲中穿插着非常短的消息;如果发射信号的航空器距离接收机很远,收到的信号可能非常弱。 传统波形也会以1090 MHz的频率发射。 接收机需要利用前同步码在拥堵的频段中识别高和低两个幅度的S模式传输。

2.在1 μs位间隔内,各位的可能模式有两种。 前0.5μs为ON且后0.5μs为OFF,表示逻辑1。 前0.5 μs为OFF且后0.5μs为ON,表示逻辑0。 位判定的依据是基于时间的模式,因此,接收机需要利用前同步码准确找出消息位开始的I/Q样本。

3.S模式消息由88个信息位和24个校验和位组成。 接收机需要能够在正确的时间清除寄存器、作出位判定、计算校验和并读取校验和寄存器。 为使接收机正确工作,必须对时序进行控制。

4.对于嵌入式设计,解码过程必须逐个样本进行。 存储大量数据再进行批处理的接收机设计,对嵌入式系统来说是不现实的。

AD9361等强大的RF前端与MATLAB之类的科技计算语言相结合,可大大简化与此类传输的检测和解码相关的问题。 MATLAB和信号处理工具箱中的函数可用来识别同步模式,计算噪底,作出位判定,以及计算校验和。 MATLAB中的条件和执行控制函数可简化控制逻辑。 利用AD9361 SDR平台很容易访问测试数据,无论是从二进制或文本文件读取,还是以流形式直接输入MATLAB。 最后,MATLAB是解释性语言,因而很容易与数据进行交互,尝试不同的方法,以交互方式开发解决方案。

在MATLAB中建模并验证S模式接收机算法

对下述内容和MATLAB源代码感兴趣的读者,可在Analog Devices GitHub库中找到相关文件。 入门级函数为ad9361_ModeS.m,同时提供了此函数调用的文件。

设计接收机算法的第一步是访问一些源数据。 许多航空器现在都配备了S模式应答器,因而只需将接收机调谐到1090 MHz的广播频率便可捕获本地传输。 在我们的例子中,可以使用Zynq SDR快速原型开发平台。 ADI公司提供了一个MATLAB系统对象,它能通过以太网从FMCOMMS平台接收数据。该系统对象允许用户选择调谐频率和采样速率,利用无线电硬件收集接收样本,以及将接收样本作为MATLAB变量直接送入MATLAB工作空间。 所需代码非常少,几行代码便可设置MATLAB系统对象,再用几行代码设置FMCOMMS3,还有几行代码用来捕获I/Q样本并将其写入一个MATLAB变量。 代码示例如图2、图3和图4所示。

图2. 设置MATLAB系统对象的MATLAB代码示例
图2. 设置MATLAB系统对象的MATLAB代码示例

图3. 配置FMCOMMS3板的MATLAB代码示例
图3. 配置FMCOMMS3板的MATLAB代码示例

图4. 捕获I/Q样本并将其写入Rx变量的MATLAB代码示例
图4. 捕获I/Q样本并将其写入Rx变量的MATLAB代码示例

我们使用了一些基于这些命令的代码,以12.5 MHz的采样速率捕获数个数据集。 选择12.5 MHz速率是为了提供足够的样本来使前同步码与第一个消息位精密对齐,并通过求均值方法消除用来作出位判定的样本中的噪声。 捕捉一百万样本的结果如图5所示。

图5. 1090 MHz数据捕捉示例
图5. 1090 MHz数据捕捉示例

在这个较短的数据集中,有14个信号从噪底中凸显出来。 在这14个信号中,有两个是S模式消息。 其余是传统或杂散信号,应予以抛弃。 放大样本号604000附近的区域,可看到其中一个有效消息(图6)。

图6. 单个S模式消息
图6. 单个S模式消息

在此图中,可以清楚看到前同步码,PPM调制引起的位跃迁也很明显。 即使面对如此清晰的信号,通过目视检查解码各位也需要很好的视力和极大的耐心。 显然,需要一个自动化程序来解码这些消息。 MATLAB非常适合于开发这种程序。

用于接收和解码S模式消息的MATLAB代码可概述如下:

1.利用filter()函数计算一个短时间窗口上的噪底和前同步码相关性。 我们的解决方案使用75个样本,相当于6 μs。

2.当前同步码相关性比噪底大一个相当大的倍数时,启动寻找第一消息位样本的逻辑。

a.此阈值可主观选择。 它应足够小,以便检测弱信号,但又应足够大,以防出现大量误报。 我们选择比噪底高10倍的值,这是一个能够捕捉大多数可解码消息的合理阈值。

b.前同步码模式产生数个峰值。 最佳匹配是第一个6 μs,因此存储第一峰值,开始寻找第一消息位,并检查接下来的3 μs是否有一个更大的峰值。 若有,则存储新峰值,重新开始寻找第一消息位。

c.找到最大峰值时,于2 μs后开始解码消息位。

d.图7显示了噪底(绿色)以及将理想前同步码与输入数据相关的结果。 噪底上有多个峰值,但有意义的峰值是幅度最大的峰值。 第一消息位样本出现在该峰值后2 μs处。

图7. 噪底和前同步码相关性的计算
图7. 噪底和前同步码相关性的计算

3.对于每一位,将前0.5μs和后0.5μs的样本幅度分别求和。 哪一个和较大决定该位是逻辑1还是逻辑0。

4.一边作出位判定,一边计算校验和。 当第一位到达时,需要某种控制逻辑来复位CRC寄存器,计算88位的校验和,然后在最后的24位期间清空CRC寄存器。 若接收位匹配校验和,则ADS-B消息有效。

5.根据S模式标准解析消息位(参见图8)。

图8. 解码后的S模式消息
图8. 解码后的S模式消息

上图来自MATLAB命令窗口,显示了从一百万样本数据集中成功解码的两条消息。 图中给出了构成88位消息和24位校验和的十六进制字符,解码过程的结果显示了航空器ID、消息类型以及航空器速度、高度和位置。

MATLAB提供了功能强大的数学和信号处理语言,使我们能够相对轻松地解决此类问题。 用于处理数据样本并最终解码消息的MATLAB代码很短,只有200行。 此外,MATLAB是解释性语言,因而很容易以交互方式尝试不同的设计思想,快速确定可行的解决方案。 我们对不同数据集测试了多种时序机制、阈值和噪声水平,最终获得一个满意的程序。

该MATLAB代码已针对本地空域飞行的航空器发出的信号进行了测试,解码的消息也对照airframes.org和flight-aware.com等信息源进行了检查。 硬件和代码表现得非常好,我们已经能够解码距离50英里的飞机发出的信号。

下一页:实施路径


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

软件定义无线电? 解码?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈