GNU Radio 和野生动物追踪

GNU Radio and wildlife tracking

我与野生动物无线电发射器打交道,我想构建一些东西来监听这些信号并跟踪它所听到的内容。该信号是一种音调,通常每分钟传输 60 次,如果运动传感器指示动物已经死亡,则传输 120 次。

我的计划是使用 GNU Radio 来收听并将信号转换为某种类型的矩阵,保存到文件中,然后在第二个程序中进行分析。有没有办法在几兆赫兹内以 500 赫兹的间隔获取信号强度矢量,并将它们放在一起形成矩阵?

辅助程序将解释此输出并找到野生动物发射器并记录它们的脉搏率。这个想法是每 10 秒左右从 GNU Radio 获取一个新文件,并在收到第二个程序时处理它。

我一直在尝试使用 GNU Radio 中的文件接收器块,并意识到它是二进制的。也不确定它到底包含什么。

任何关于我应该如何做到这一点的建议方法都将不胜感激!

My plan is to use GNU Radio to listen and convert the signal

好吧,您需要硬件才能做到这一点;您想要什么样的 SDR 设备?

在下文中,我假设您确实在使用经典的 SDR 方法来获取可为您提供原始 I & Q 样本的设备。

If there were a way to get vectors of signal strength at 500 Hz intervals across a few megahertz, and put them together into a matrix.

放慢矩阵,让我们专注于从等距频率获取能量:

这几乎是一个功率谱密度 (PSD) 估计器。最简单、可能最快和经典的方法就是简单地获取输入信号的 FFT 的幅度平方。

GNU Radio Companion 有 log-power FFT 块,对于输入时间样本流,它会给你 FFT size 向量(显然应该是= 采样率 / 500 Hz),速率为 Frame rate;例如:

将这些向量保存到文件中就足够了,因为:

I have been trying to use the file sink block in GNU, and realized that it is in binary. Also not sure what exactly what it contains.

这是数字,原始的,连续的,就像它们在内存中一样。对此总是有一些误解,所以有一个FAQ entry;引用:

All files are in pure binary format. Just bits. That’s it. A floating point data stream is saved as 32 bits in the file, one after the other. A complex signal has 32 bits for the real part and 32 bits for the imaginary part. Reading back a complex number means reading in 32 bits, saving that to the real part of a complex data structure, and then reading in the next 32 bits as the imaginary part of the data structure. And just keep reading the data.

因此,一种方法是使用 Python/numpy,使用 numpy.fromfile(file, dtype=numpy.float32),然后 numpy.reshape((rows,cols)) 将生成的一维浮点数组放入你想要的矩阵形状。

关于您的文件命名愿望:这是一个非常复杂的算法问题(以及为什么我认为这个问题在这里非常切题)。您可能不会绕过自己编写一些代码;这真的不难做到。 Python 块总是采用 n 向量并将它们写入名称与当前时间匹配的文件,这完全适合您的应用程序。

编写块是您在 GNU Radio 中可以做的最有趣的事情之一;我认为非常值得将您指向 GNU Radio Guided Tutorials。它们读起来很有趣,您可以在没有硬件的情况下学习示例!建议按顺序进行。


几点评论:

  1. FFT 是一个很好、易于使用、快速、高效的估计器。
    但是,根据您的跟踪器的特性,使用滤波器组可能会优于 accuracy/error可能性。一旦您对 GNU Radio 和 DSP 感到满意,就可以看看 GNU Radio 附带的多相滤波器组。它们允许您将一个 "good" 低通滤波器用于 select 单个通道,并以均匀的间隔复制它们。
  2. 我非常习惯 在 GNU Radio 之外进行分析。
    我发现编写另一个 python 块更容易只需获取来自估算器的样本(在您的情况下,例如对数幂 FFT)并用它们做有用的事情,然后连接输出,例如到 Qt GUI 频率接收器,而不是说获取测量样本并将它们推送到 Matlab 或 R 中。
    大多数时候,我生成一个 Python 文件来运行我的测量流程图,它将其结果保存在矢量接收器中。从那个 Python 文件,流程图完成后 运行,我立即使用 numpy 进行自己的离线分析。
    具有即时可重复的优点!

最后的评论:你说你已经有一个 SDR 设备(一个 RTL 加密狗)。太棒了!

将其连接到您的 PC;通过使用 osmocom -s 1e6 -W 来使用 librtl/gr-osmosdr 以获得 1 MHz 的带宽 "displayed";调谐到发射机的频率并观察频谱。你会学到很多东西!

如果您还没有所有的软件:只需下载并启动 GNU Radio live SDR environment。即插即用!

在 GNU Radio Companion 中,只需将 UHD: USRP Source 替换为 osmocom 源(可以与 RTL 加密狗通信)。

我会对发射器做一些研究。查找网页,(特别是)从发射器中查找 FCC ID,然后在 FCC 网站上查找。那么我们可以提供更多帮助。

我们在哪里可以找到追踪器?把信号录下来在家里使用会很方便。