前言
REDHAWK 是一个基于 SCA (Software Communications Architecture) 标准的开源软件定义无线电 (SDR) 框架。SCA 是一套定义了软件无线电组件如何交互和通信的标准,目的是提高软件无线电系统的互操作性和可重用性。REDHAWK 利用 SCA 的原则来支持广泛的无线电频谱处理应用,允许开发者构建、部署、和管理复杂的信号处理应用。通过使用 SCA,REDHAWK 提供了一个灵活和动态的环境,使得无线电和处理组件可以轻松地集成和配置。
因此,为了实现对波形在 SCA 上面进行部署,因此有必要学习一下 REDHAWK。
一、什么是 REDHAWK?
REDHAWK 是一个软件包,支持实时、支持网络的软件定义无线电 (SDR) 的设计、开发、部署、管理和升级。
1、概述
REDHAWK 软件包由四个主要部分组成:
- 一组用于管理软件应用程序的分布式部署的程序。
- 一组工具,允许开发人员轻松创建可在 REDHAWK 环境中部署的软件。
- 一组用于检查和分析正在运行的 REDHAWK 系统内部情况的工具。
- 一组信号处理构建块,开发人员可以将其组合成更大的定制应用程序
在 REDHAWK 中开发的信号处理应用程序可以部署在从单个 Linux 计算机到支持网络的 Linux 计算机系统的任何设备上。REDHAWK 解决了复杂的“幕后”硬件/软件集成挑战,以便开发人员可以专注于应用程序开发:基本 REDHAWK 使用不需要对硬件和软件系统的深入了解。
REDHAWK 还标准化了数据接口、硬件管理和配置管理,这有利于非分布式应用程序开发人员。
2、REDHAWK 的应用
REDHAWK 是为开发 SDR 而设计的。相对于硬件定义的同类产品,SDR 具有高度可重新配置的优势。通过使用 REDHAWK,SDR 开发人员可以专注于信号处理算法,而不必担心在网络环境中部署此类算法的责任。
虽然 REDHAWK 旨在支持 SDR 的数据流需求,但它还有助于通过定义明确的通用接口等功能将其他软件和硬件资产集成到计算系统中。
二、REDHAWK 的流程管理和交互方法
这里讨论 REDHAWK 的基本分解和部署以及用于支持基本功能单元之间通信的中间件。
1、流程管理
REDHAWK 中的基本功能单元是组件,它代表主机上的单个进程。该组件支持初始化、配置、查询、测试、连接到其他组件以及终止组件所需的接口。它还管理一个处理线程,其中包含组件的功能和输入/输出数据的缓冲。组件可以用 C++、Python 或 Java 编写。
波形是要作为应用程序部署到 REDHAWK 系统上的组件的逻辑集合,并在 XML 文件中定义。波形允许开发人员创建由组件组成的算法。将算法组合为单独的进程使 REDHAWK 能够将这些组件适当地部署到网络环境中。REDHAWK 通过为组件找到合适的主机、将组件部署到该主机以及在组件运行后对其进行管理来支持分布式计算。
2、数据传输
跨网络的数据交换是 REDHAWK 核心功能不可或缺的一部分。数据交换的管理是通过“中间件”来处理的,“中间件”是一种复杂的软件基础设施,它提供了一种通用语言,可以通过任意媒体在任意语言之间有效地传输数据。为 REDHAWK 选择的中间件是 omniORB,它是 CORBA(通用对象请求代理架构)规范的实现。REDHAWK 使用 omniORB,因为它比其他中间件实现提供了显著的技术优势。
使用 omniORB 的主要好处包括:
- omniORB 是一个易于构建和安装的小软件包。它默认支持 Python 和 C++,并且可以轻松扩展以支持 Java。
- omniORB 数据传输非常高效。omniORB 通信机制的可插拔特性允许使用多种底层传输协议,这些协议可以根据部署环境进行定制。例如,位于同一主机上的组件使用 Unix 域套接字来传输数据,作为基于 IP 的通信的替代方案。
- CORBA 处理不同主机类型之间的数据转换(例如,32 位与64 位系统以及大端与小端)。
- CORBA 支持 Any 类型,允许接口之间的通用兼容性。
- omniORB 实现了开放标准 CORBA,允许系统开发人员使用他们可能想要用于其基础设施的任何其他 CORBA 实现来与底层 REDHAWK 系统进行交互。
总之,omniORB 是一个简单高效的中间件包,允许 C++、Python 或 Java 程序相互交互。REDHAWK 框架缓解了 CORBA 的缺点,而 CORBA 固有的优点,如平台独立性、泛型类型支持、强类型接口和开放标准,为 REDHAWK 带来了强大的功能。
三、入门
1、安装 REDHAWK
REDHAWK 核心框架和 IDE 的安装是通过一组 RPM 进行的。使用 RPM 可以自动安装 REDHAWK 运行所需的依赖项以及自动安装核心框架和 IDE。
我的本地环境为虚拟机中 CentOS7.4 + REDHAWK 2.3.1,安装步骤请参考官方教程:REDHAWK 2.3.1 安装步骤
2、IDE 快速入门
下面进行 REDHAWK 信号处理开发环境的简单示例
以下部分讨论如何启动 REDHAWK IDE、如何打开黑板、如何创建信号发生器以及如何测试组件的输入/输出响应。
①、启动 REDHAWK IDE
<1>、使用以下命令启动 REDHAWK IDE:
rhide
<2>、如果提示指定工作区位置,请选择适当的位置并选择“确定”。
打开后的主界面如下:
②、打开 Chalkboard
从 REDHAWK Explorer 视图中展开 Sandbox,然后双击 Chalkboard。
③、创建信号发生器
<1>、从 Chalkboard Palette 中,将 SigGen (python) 组件拖到 Chalkboard 画布中。
- 在 Palette 中,如果未显示 SigGen 组件,请在 Components 下左键单击rh文件夹以显示可用组件的列表。
- 如果未显示 Python 实现,请通过左键单击组件名称左侧的箭头来展开实现列表。显示列表后,左键单击所需的实施。
- 当组件加载完成后,其背景颜色为蓝色。
<2>、右键单击 SigGen 组件,然后单击 “Start”。
<3>、右键单击 SigGen 组件,然后单击“Show Properties”。从“Properties”视图中,将频率更改为 20Hz,将幅度更改为 1V
<4>、右键单击 SigGen 的 “dataFloat_out” 端口,然后单击 “Plot Port Data”,可以看到 20Hz,幅度为1 V的正弦波
<5>、右键单击 SigGen 组件,然后单击 “停止”。
④、测试组件的输入/输出响应
<1>、从 Chalkboard Palette 中,将 HardLimit (python) 组件拖动到 Chalkboard 画布中。
<2>、单击并从 SigGen的dataFloat_out 端口拖动到 HardLimit dataFloat_in 端口
<3>、右键单击 SigGen 组件,然后单击 “Start”,右键单击 HardLimit 组件,然后单击 “Start”。
<4>、右键单击 HardLimit 的 dataFloat_out 端口,然后单击 “Plot Port Data”。
现在打开两个绘图端口视图,每个绘图端口对应一个视图。
<5>、右键单击 SigGen 组件,然后单击“Show Properties”,从“Properties”视图中,将幅度更改为 5,HardLimit dataFloat_out 端口的绘图端口视图现在将输出限制为 1。