我和野生动物无线电发射机一起工作,我想build立一些能听取这些信号并跟踪听到的信息。 信号是通常每分钟发送60次的音调,如果运动传感器指示动物已经死亡,则为120。
我的计划是使用GNU无线电收听并将信号转换成保存到文件的某种types的matrix,然后在第二个程序中进行分析。 有没有一种方法可以在几百兆赫的频率上以500赫兹的间隔获得信号强度的vector,并将它们放在一起形成一个matrix?
辅助程序将解释这个输出并find野生动物发射器并logging它们的脉率。 这个想法是从GNU Radio每隔10秒钟获取一个新文件,并在收到第二个程序时处理它。
我一直在试图使用GNU Radio中的文件接收器块,并意识到它是二进制的。 也不确定它究竟包含什么。
任何build议的方法,我应该如何做到这一点将不胜感激!
我的计划是使用GNU Radio来收听和转换信号
那么,你将需要硬件来做到这一点; 你有什么样的SDR设备?
在下面,我假设你真的使用经典的SDR方法来获得一个给你原始I&Q样本的设备。
如果有一种方法可以在几百兆赫的频率上以500赫兹的间隔获得信号强度的矢量,并将它们放在一起形成一个矩阵。
放慢矩阵,让我们专注于从等距频率获得功率:
这几乎是一个功率谱密度(PSD)估计器。 最简单的,可能是最快的和经典的方法将简单地取得您的输入信号的FFT的幅度平方。
GNU Radio Companion具有对数FFT功能块,对于输入时间采样流,将以Frame rate
您提供FFT size
向量(显然应该是=采样率/ 500 Hz)。 例如:
将这些向量保存到一个文件就足够了,因为:
我一直在试图使用GNU中的文件接收器块,并意识到它是二进制的。 也不确定它究竟包含什么。
这是数字,原始,连续的,因为他们将在记忆中。 总是有一些误解,所以有一个常见问题的条目 , 理由是:
所有文件都是纯二进制格式。 只是位。 而已。 一个浮点数据流被一个接一个地保存为32位。 一个复杂的信号有32位的实部和32位的虚部。 读回复数意味着读取32位数据,将其保存到复杂数据结构的实数部分,然后读取下一个32位作为数据结构的虚数部分。 只要继续阅读数据。
所以,一个使用的方法就是使用Python / numpy
,使用numpy.fromfile(file, dtype=numpy.float32)
,然后numpy.reshape((rows,cols))
将产生的一维浮点数组放入你想要的矩阵形状。
关于你的文件命名愿望:这是一个相当算法的问题(为什么我认为这个问题是非常重要的话题)。 你可能不会自己写一些代码。 这真的不是很难做到。 总是带有n
向量并将它们写入名称与当前时间相匹配的文件的Python块将完全适合您的应用程序。
编写块是GNU Radio中可以做的最有趣的事情之一; 我认为这是非常值得的GNU无线电指导教程 。 阅读起来非常有趣,你可以在没有硬件的情况下遵循这些例子! 建议按顺序进行。
几点意见:
最后的评论:你说你已经有了一个SDR设备(一个RTL加密狗)。 那很棒!
将其附加到您的PC; 通过使用osmocom -s 1e6 -W
来使用librtl / gr-osmosdr来获得1MHz的带宽“显示”; 调谐到发射机的频率并观看频谱。 你会学到很多!
如果您还没有所有的软件:只需下载并引导GNU Radio实时SDR环境 。 即插即用!
在GNU Radio Companion中,只需使用osmocom来源代替UHD:USRP Source (可以与RTL加密狗交谈)。
我会对发射机做一些研究。 查找网页,(特别是)从发射机上找到FCC ID,并在FCC网站上查找。 那么我们可以帮助更多。
我们能找到跟踪器吗? 记录信号在家中使用将是方便的。