我最近入了块 RTL-SDR,这是一块很便宜的软件无线电的板子,但是暂时还不太清楚怎么玩。最简单的使用方法就是使用成品的软件无线电软件。在 Linux 平台上有 Gqrx,在 Windows 上有 SDR#。而且,在 Linux 上使用 RTL-SDR 尤其简单,连驱动安装的过程都可以省去。但是,这种方法的缺陷也很明显。因为所有的功能都是被写死在里面的,所以难以定制。

第二套方案是用 GNU Radio。GNU Radio 的功能更高级,它不像 Gqrx 那样可以开箱即用,而是像 Matlab 上的 Simulink 那样可以自己拖动模块,搭建出自己想要的功能。但是,Arch Linux 上的 GNU Radio 似乎有些许问题,我照着网络上的教程搭建起来一个系统之后,发现完全无法运行,又不知问题出在何处。这让我很是苦恼。

所以我最后还是决定试试亲自开发,语言暂定使用 Python,计划是写一个 FM 收音机。虽然这个功能很简单,而且 Gqrx 已经实现出来了,但是自己 DIY 的乐趣还是和用别人的是不一样的。

Python 用来进行 RTL-SDR 开发还是很合适的。虽然 Matlab 也已经支持了 RTL-SDR,但是我很讨厌 Matlab 的编程语言。我大致查找了一些资料,主要会用到下面几个库:

1. 硬件通信

RTL-SDR 有一个 C 库,叫做 librtlsdr。在大多数主流 Linux 发行版上,这个库都可以直接安装。而 pyrtlsdr 是 librtlsdr 的 Python 封装。这个库的功能是设置 RTL-SDR 的参数,并读取数据。

2. 信号处理

这里主要用 numpy 和 scipy。搞机器学习应该对这个比较熟悉。这两个库主要提供了向量、矩阵,一些线性代数函数,还有一些信号处理函数,包括数字滤波器和傅里叶变换。但是我没有看到通信函数,比如调制和解调,这个想必只能自己手写了。如果要作统计信号处理的话,要用到 pandas 也说不准。

3. 结果呈现

画频谱图可以用 matplotlib。这个库功能非常强大,似乎还能产生动画。另外,如果是收音机,肯定还需要播放声音,这个时候可能需要 PyAudio

目前我还是在纸上谈兵,尚未付诸实践,等我把 FM 做出来了再来写一篇小结。