DesignSpark Electrical Logolinkedin
菜单 搜寻
提问问题

使用Pi 3 Model B +和SDRplay RSP2构建远程SDR

无线电與有PoE功能的Pi和低成本的SDR接收器放置在天线所在的位置。

为了获得最佳性能并避免在方式上带来笨重的障碍,天线倾向于安装在更偏远且不常接觸到的位置,例如阁楼,花园和屋顶。当您有兴趣接收HF,LF和VLF信号时尤其如此,因为天线开始变得相当大,并且通常可能是很长的导线。

因此,解决方案通常是从天线到无线电硬件运行一段同轴电缆,但这会造成损耗,并且很可能还会有明显的噪声量,具体取决于环境。解决这个问题的一个方法就是在天线旁边安装收音机,但传统上这意味着要运行专用电源并开发某种遥控系统。

然而,软件定义无线电(SDR)更容易实现远程操作,并与以太网供电(Power-over-Ethernet,PoE)和Raspberry Pi配合使用,提供了一种特别完善的解决方案。由于我们可以通过多种方式设置软件端,以太网提供了一个强大的接口来控制无线电硬件,而PoE则通过相当长的网络电缆运行时为设备供电,并以安全的方式进行操作。

SDRPlay RSP2

SDRplay无线频谱处理器(RSP)是一款带USB接口的低成本SDR接收器,并覆盖1kHz至2GHz的频率范围。它目前有三个版本:

  • RSP1A (150-395). 原始RSP1的改进版本。
  • RSP2 (124-9619). 以上述为基础,并增加了两个RF输入(1x附加同轴+ 1x Hi-Z连接),以及参考时钟I / O和改进的噪声系数。
  • RSP2pro (125-7958). RSP2的金属外壳包装版本。

RSP1A是成本最低的版本,但是RSP2提供了更好的噪声系数(实际上具有更高的灵敏度),具有第二个同轴电缆输入(如果您有超过1x天线,例如针对不同频带进行调谐,便于使用)并且可以也可以直接与第三个高阻抗天线一起使用。如果您拥有GPS锁定参考时钟,或者您想将多个设备链接在一起并使它们全部同步,则RSP2的参考时钟I / O功能非常有用。

RSP通过USB供电,因此不需要额外的电源。作为相当紧凑的设备,它也非常适合与Pi 3型B +一起安装在天线的位置。当然,需要适当的外壳,例如一种适用于环境的适当的入口保护(IP)。

驱动软件

安装RSP硬件驱动程序/ API非常简单,只需简单地下载它即可:

pi@3bplus:~ $ chmod +x SDRplay_RSP_API-RPi-2.11.1.run

pi@3bplus:~ $ ./SDRplay_RSP_API-RPi-2.11.1.run

请注意,文件名称随新版本发布而更改。

应用

现在我们可以在Pi上本地运行应用程序,并且SDRplay提供dump1090软件的下载,该软件可用于接收报告飞机身份、位置和速度的飞机模式-S应答器信号。

GNU无线电支持

许多优秀的应用程序都建立在GNU Radio SDR 工具箱之上,如流行的通用SDR接收器应用程序Gqrx。还有很多其他的 - 其中一些更关注研究/工程师的方面 - 还有一种名为GNU Radio Companion的可视化编辑器,它允许您快速组装新的信号处理流程图。

要让信号进入GNU Radio,需要一个SDR“源”块。如果我们有传输能力,我们也会有一个“接收器”模块。 GrOsmoSDR为各种SDR硬件提供了这些硬件,并且还包括一个非常有用的FFT显示应用程序。在撰写本文时,似乎需要使用此代码的分支(特殊版本),并在SDRplay论坛上提供了详细信息

请注意,从Raspberry Pi上的源代码构建所有GNU Radio本身是不鼓励的,因为它是一个庞大的代码库,构建起来需要很长时间,有时可能会出现问题。相反,我建议您从软件包安装GNU Radio及其开发文件。例如:

pi@3bplus:~ $ sudo apt-get install gnuradio gnuradio-dev

然后继续构建gr-osmosdr。此外,可能还需要随后构建任何使用源代码的应用程序,因为如果要从Raspbian软件包存储库安装Gqrx,则会引入gr-osmosdr的存储库软件包 - 这显然很明显将不会用SDRplay支持构建。

SoapySDR支援

SoapySDR是一个具有模块化架构的供应商和平台中立的SDR支援库。SoapySDRPlay module模块增加了对SDRplay硬件的支援。安装这些软件后,可以使用支援SoapySDR API的应用程序,例如CubicSDR

要安装SoapySDR:

pi@3bplus:~ $ sudo apt-get install cmake swig libavahi-client-dev

pi@3bplus:~ $ mkdir src

pi@3bplus:~ $ cd src

pi@3bplus:~ $ git clone https://github.com/pothosware/SoapySDR.git

pi@3bplus:~ $ cd SoapySDR

pi@3bplus:~ $ mkdir build

pi@3bplus:~ $ cd build

pi@3bplus:~ $ cmake ../

pi@3bplus:~ $ make

pi@3bplus:~ $ sudo make install

然后安装SoapySDRPlay模块:

pi@3bplus:~ $ cd ../..

pi@3bplus:~ $ git clone https://github.com/pothosware/SoapySDRPlay.git

pi@3bplus:~ $ cd SoapySDRPlay

pi@3bplus:~ $ mkdir build

pi@3bplus:~ $ cd build

pi@3bplus:~ $ cmake ..

pi@3bplus:~ $ make

pi@3bplus:~ $ sudo make install

此时,如果SDRPlay在安装驱动程序时已连接,则需要将其拔下并重新插入。

pi@3bplus:~ $ SoapySDRUtil --find

在此之后查看SoapySDR是否可以检测到我们的硬件。

所以现在我们已经证实SoapySDR可以看到我们的硬件,我们可以继续构建CubicSDR或其他支援API的应用程序。然而,SoapySDR的一个特别好的功能是它可以用来使SDR硬件成为远程网络资源。

远程流媒体

SoapySDR远程支援使得连接到一台电脑的SDR硬件能够被运行在另一台电脑上的应用程序使用,并具有调整和配置命令 - 例如,选择天线并设置增益等 - 从客户端发送到服务器,并将原始样本流式传输回实际进行数字信号处理的客户端。

这与在Raspberry Pi上运行软件定义的无线电应用程序,然后通过网络发送解调后的音频,视频或数据等非常不同。通过SoapySDR远程操作,Pi和SDRplay RSP成为一种相对“愚蠢”的网络资源 - 就像在网络上共享打印机或扫描仪一样,只是更酷。

首先,我们需要在我们的Pi上安装可选的SoapyRemote组件:

pi@3bplus:~ $ cd ../..

pi@3bplus:~ $ git clone https://github.com/pothosware/SoapyRemote.git

pi@3bplus:~ $ cd SoapyRemote

pi@3bplus:~ $ mkdir build

pi@3bplus:~ $ cd build

pi@3bplus:~ $ cmake ..

pi@3bplus:~ $ make

pi@3bplus:~ $ sudo make install

现在我们可以手动启动服务器进程:

pi@3bplus:~ $ SoapySDRServer --bind

这将允许我们确认它在没有任何问题的情况下启动,并且当远程客户端机器连接时,我们还会看到打印到终端的除错消息。

接下来,我们需要在我们的客户端机器上安装SoapySDR和SoapyRemote组件,这可能实际上是另一个Raspberry Pi,或者更常见的可能是笔记本电脑。请注意,本机不需要SoapySDRPlay软件,因为它不会直接与硬件通话,而是将其安装在我们的(第一个)Pi上。因此,只需重复上述3个安装步骤中的2个即可。

一旦SoapySDR + SoapyRemote已经安装在第二个Pi上,我们可以再次使用SoapySDRUtil来确认这确实可以访问连接到第一个的硬件:

andrew@snow:~$ SoapySDRUtil --find="remote=3bplus.local"

请注意,您可以为远程参数指定名称或IP地址。

此时,如果一切按计划进行,则应检测远程硬件,并且SoapySDRServer进程应显示入站连接。

通过网络流式传输RF样本相当耗费资源,因此为了保证可靠性,我们需要在/etc/sysctl.conf末尾添加两行来配置较大的O / S缓冲区:

net.core.rmem_max=104857600
net.core.wmem_max=104857600

这应该在服务器和客户端计算机上完成。然后在启动时启用SoapySDRServer,请输入:

pi@3bplus:~ $ sudo systemctl enable SoapySDRServer

重新启动后,将应用新的内核参数,服务器进程将启动。

Testing

为了测试我们安装的CubicSDR。由于我们在构建SoapySDR时在两台Linux机器上安装了mDNS开发库(libavahi-client-dev),这意味着CubicSDR能够自动在网络上找到远程SDR。您可能还会注意到,在这里我们将网络最大传输单元(MTU)设置为4096,这是我们能够做到的,因为新的Pi 3 Model B +上的升级以太网支持“巨型帧”。这将有助于进一步提高网络性能。要在命令行的网络接口上设置此项,请执行以下操作:

pi@3bplus:~ $ sudo ifconfig eth0 mtu 4096

在客户端计算机上重复此操作,但请记住将“eth0”替换为适当的网络接口(如果不是这样)。

最后,在开始处理时,我们会看到一个频谱显示屏,能够(远程)调谐收音机,选择FM解调(在客户端计算机上执行)并收听信号。

包起来

硬件和SoapySDR配置详细给了我们很大的灵活性。 对于某些应用,在连接了RSP的情况下在Pi上运行数字信号处理,然后通过网络转发解调的音频,视频和/或数据可能是有意义的。 例如,如果接收到飞行器的Mode-S传输,你可以将数据发送到另一个系统,例如, 数据库或显示器,通过MQTT或Web API。 而音频和视频可以通过网络进行流式传输。

但是,将Pi + RSP作为“dumb”服务器运行并远程控制并通过网络传输原始样本的能力可能证明非常有用。 例如,如果经常从一个应用程序切换到另一个应用程序,或者在GNU Radio Companion中开发新的应用程序。

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.

14 Mar 2018, 10:59