当前位置: 华文世界 > 科技

SDR 线程流水线性能

2024-02-17科技

我设计了一个 SDR 线程流水线来提高我的软件定义无线电项目的性能。看一看。

最近,我一直在编写 SDR 软件来记录来自无线电的双通道 I/Q 数据。我对这个设备的主要用例是允许在夜间无人值守地录制 BCB,然后使用回放来复制我的环路阵列的不同方向。

我发现,虽然我的原型在工作,但它的性能很差。它工作正常,但消耗了我 80% 的 CPU 周期。不好。所以,我回到了原点,开发了一个新的架构。

现在,我有一个 SDR 线程流水线,它可以在后台运行,无需繁重的计算机负载即可执行 DSP。这是我的软件运行演示视频。

使用多核 CPU,您可以将部分 CPU 用于用户界面,其余用于重型 DSP。我在 SDR 线程管道中使用了三个单独的线程。第一个读取数据并进行记录。我的第二个线程按顺序处理数字。最后阶段生成音频和数据以在屏幕上显示。

总而言之,这种方法将 CPU 负载从 70-80% 降低到 2-3%。是的,你没看错。现在,我的普通 i3 PC 可以轻松运行软件定义无线电。

SDR 螺纹流水线设计

我设计这个也是为了灵活性。每个管道阶段都使用泛型。这意味着我可以轻松地使管道适应不同的输入和输出对象,如下所示。

每个线程采用一种数据格式 T1,并以格式 T2 发出结果。这些 <T> 泛型可以适应任何数据格式。此外,我将处理代码编写为一个单独的函数,我可以将其注入到线程中以执行处理。因此,例如,T1 可以是来自 Perseus 的 24 位单通道样本,也可以是来自 SDRplay RSPduo 的 16 位双通道样本。

如视频中所示,我目前的测试台每秒将 500,000 个来自英仙座的样本处理成音频,只需 2 毫秒,这大约是无线电数据块到达之间可用时间的 5%。

SDR 代码 使用 Perseus Radio

本周,我在一个简单的测试平台上编写了我的自制 SDR 代码。没什么好看的,但我可以接收和解调信号。

设计、编码和运行以您想要的方式工作的软件总是令人兴奋。在上面,你可以看到一个简单的测试平台,它将我的英仙座调整到 WWV,并将数据转换为我可以听的音频。

正如你所看到的,我正在分几个部分开发这个软件。首先是连接到硬件并获取我的数据的无线电驱动程序。在这种情况下,我正在驾驶英仙座,但很快我将添加我的双通道接收器。第二,是将数据传递到第三级的输入数据队列或处理器,即完整的软件定义接收器。

我的输入数据处理器还将负责保存和读取存储的多个通道。我还将使用本节来组合现代多样性接收的渠道。

真正的好消息是,我让SDR代码可以过滤、电平和解调从任何接收器接收的信号。所以,现在我只需要专注于前端驱动程序和数据操作。

使用 SDR 记录无线电信号

使用现代软件定义无线电很容易记录无线电信号。

我正在对我的莫尔斯解码器进行不同的增强。这些实验应该有些科学。否则,我将如何衡量成功?

出现的第一个想法是录制莫尔斯信号的音频。随后,我可以尝试以不同的方式解码每个录音,看看哪种效果最好。然后,我想起使用软件定义收音机,我可以一次录制数十个信号。这张照片显示了我的英仙座接收器记录整个 20 米 CW 波段。通过此录音,我可以随时通过将 PC 音频插入解码器来对数十个信号进行可重复测试。

记录无线电信号 – RF 而不是 AF

英仙座创建WAV文件。这是音频数据录制的标准格式。但是,它不是从声卡中保存数字化音频,而是从接收器中保存无线电信号。SDR 数据的正常格式是正交采样。SDR 提供的不是一对左右音频数据,而是一对表示无线电带宽的数据。

就我而言,我以每秒 125,000 个样本对无线电频谱进行采样。这提供了 20 米火腿频段的整个数字部分的记录,从 14.0 到 14.1 MHz。 摩尔斯电码信号通常位于该带宽的下半部分。接收器将随时播放此录音。「现场」和「录制」之间没有区别。现在,我可以像「实时」一样调整录音中的信号。Perseus 在 WAV 文件中嵌入信息以指示频率和时间。

使用 SDR 记录无线电信号会创建巨大的数据文件。像这样记录半小时的莫尔斯信号会产生千兆字节的数据。没关系。存储很便宜。

流水线 1