GNU广播和野生动植物追踪

Joh*_*ohn 3 linux signal-processing gnuradio radio gnuradio-companion

我与野生动植物无线电发射机合作,我想制造一种可以监听这些信号并跟踪其听到声音的东西。信号是通常每分钟发送60次的声音,如果运动传感器指示动物已经死亡,则发送120次。

我的计划是使用GNU Radio侦听并将信号转换为某种类型的矩阵,然后将其保存到文件中,然后在第二个程序中进行分析。有没有一种方法可以获取频率跨过几兆赫兹,频率为500 Hz的信号强度矢量,并将它们放到一个矩阵中?

次级程序将解释该输出并找到野生生物发射器并记录其脉搏率。想法是每隔10秒左右从GNU Radio获取一个新文件,并在收到第二个程序时对其进行处理。

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

任何建议的方法,我应该如何做到,将不胜感激!

Mar*_*ler 5

我的计划是使用GNU Radio收听和转换信号

好吧,您将需要硬件来做到这一点。您想使用哪种SDR设备?

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

如果有一种方法可以获取跨越几兆赫兹的500 Hz间隔的信号强度矢量,然后将它们放到一个矩阵中。

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

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

GNU Radio Companion具有对数功率FFT块,对于输入时间采样流,它将FFT size以一定Frame rate速率为您提供矢量(显然应该是=采样率/ 500 Hz);例如:

GNU Radio Companion的流程图

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

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

它是原始的,连续的数字,就像它们在内存中一样。对此总会有一些误解,因此有一个常见问题解答条目。指出:

所有文件均为纯二进制格式。只是一点点。而已。浮点数据流在文件中另存为32位。复数信号的实部为32位,虚部为32位。读回一个复数意味着读入32位,将其保存到复杂数据结构的实部,然后读入接下来的32位作为数据结构的虚部。并继续读取数据。

因此,一种使用的方法就是使用Python / numpynumpy.fromfile(file, dtype=numpy.float32)然后使用,然后numpy.reshape((rows,cols))将所得的1D浮点数组带入所需的矩阵形状。

关于您的文件命名愿望:这是一个相当大的算法问题(以及为什么我认为这个问题在这里很受关注)。您可能不会自己编写一些代码。这真的不是那么难。一个始终使用n向量并将其写入名称与当前时间匹配的文件的Python块将完全对您的应用程序起作用。

编写块是您在GNU Radio中可以做的最有趣的事情之一。我认为向您介绍GNU Radio Guided Tutorials非常值得。它们非常有趣,您可以在没有硬件的情况下遵循示例!建议按顺序进行。


一些评论:

  1. FFT是一种良好,易于使用,快速,高效的估计器。
    但是,根据跟踪器的特性,在精度/错误概率方面,使用滤波器组可能会胜过它。一旦您对GNU Radio和DSP感到满意,就看看GNU Radio随附的多相滤波器组。它们使您可以采用一个“良好”的低通滤波器来选择单个通道,并以均匀间隔复制它们。
  2. 我非常习惯不在 GNU Radio之外进行分析。
    我发现编写另一个python块要容易得多,它仅提取估计器中的样本(在您的情况下,例如对数幂FFT)并对其进行有用的处理,然后将其输出连接到Qt GUI频率接收器,而不是说获取测量样本并将其推入Matlab或R。
    大多数时候,我会生成一个运行测量流程图的Python文件,并将其结果保存在矢量接收器中。在流程图完成运行之后,从该Python文件中,我使用numpy立即进行自己的脱机分析。
    具有即时可重复的优势!

最后说明:您说您已经有一个SDR设备(一个RTL加密狗)。那很棒!

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

如果还没有所有软件,请执行以下操作:只需下载并启动GNU Radio实时SDR环境。即插即用!

在GNU Radio Companion中,只需用osmocom源(可以与RTL加密狗对话)替换UHD:USRP源