我的计划是使用 GNU Radio 来收听和转换信号
好吧,您将需要硬件来做到这一点;你有什么样的 SDR 设备?
在下文中,我将假设您确实在使用经典的 SDR 方法来获取能够为您提供原始 I & Q 样本的设备。
如果有一种方法可以在 500 Hz 间隔内获得几兆赫兹的信号强度向量,并将它们组合成一个矩阵。
放慢矩阵,让我们专注于从等距频率中获取能量:
这几乎是一个功率谱密度 (PSD) 估计器。最简单、可能是最快和经典的方法就是取输入信号的 FFT 的幅度平方。
GNU Radio Companion 具有log-power FFT块,对于输入时间采样流,它会FFT size
以一定的速率为您提供向量(显然应该是 = 采样率 / 500 Hz)Frame rate
;例如:

将这些向量保存到文件中就足够了,因为:
我一直在尝试在 GNU 中使用文件接收器块,并意识到它是二进制的。也不确定它到底包含什么。
这是数字,原始的,连续的,就像它们在记忆中一样。对此总是有一些误解,因此有一个常见问题解答条目;引用:
所有文件都是纯二进制格式。只是位。就是这样。浮点数据流以 32 位的形式保存在文件中,一个接一个。复数信号的实部为 32 位,虚部为 32 位。读回复数意味着读入 32 位,将其保存到复数数据结构的实部,然后读入接下来的 32 位作为数据结构的虚部。继续阅读数据。
因此,一种使用方法是使用 Python/ numpy
,使用numpy.fromfile(file, dtype=numpy.float32)
,然后numpy.reshape((rows,cols))
将生成的一维浮点数组转换为您想要的矩阵形状。
关于您的文件命名愿望:这是一个非常算法问题(以及为什么我认为这个问题在这里非常热门)。您可能不会自己编写一些代码;这真的不难做到。n
始终采用向量并将它们写入名称与当前时间匹配的文件的 Python 块完全适用于您的应用程序。
编写积木是您在 GNU Radio 中可以做的最有趣的事情之一。我认为向您介绍 GNU Radio Guided Tutorials非常值得。它们读起来很有趣,你可以在没有硬件的情况下学习这些示例!建议按顺序进行。
几点评论:
- FFT 是一种良好、易于使用、快速、高效的估计器。
但是,根据跟踪器的特性,使用滤波器组在准确性/错误概率方面可能会优于它。一旦您对 GNU Radio 和 DSP 感到满意,请查看 GNU Radio 附带的多相滤波器组。它们允许您使用一个“好的”低通滤波器来选择单个通道,并以均匀的间隔复制它们。
- 我非常习惯不在GNU Radio 之外进行分析。
我发现编写另一个 python 块要容易得多,它只获取来自估计器的样本(在你的情况下,例如 log power FFT)并用它们做有用的事情,并将其输出连接到 Qt GUI频率接收器,而不是让我们说测量样本并通过 Matlab 或 R 推送它们。
大多数时候,我正在生成一个运行我的测量流程图的 Python 文件,它将其结果保存在矢量接收器中。从那个 Python 文件中,流程图完成运行后,我立即使用 numpy 进行自己的离线分析。
具有即时可重复的优势!
最后的评论:你说你已经有一个 SDR 设备(一个 RTL 加密狗)。那太棒了!
将其连接到您的 PC;使用 librtl/gr-osmosdrosmocom -s 1e6 -W
获得 1 MHz 的带宽“显示”;调谐到发射机的频率并观察频谱。你会学到很多东西!
如果您还没有所有这些软件:只需下载并启动GNU Radio 实时 SDR 环境。即插即用!
在 GNU Radio Companion 中,只需将UHD: USRP Source替换为 osmocom 源(可以与 RTL 加密狗通信)。