从音频信号中提取二进制数据流

Extract binary data stream from audio signal

我在音频流中有 二进制数据,我想对其进行解码。这是来自 Audacity 的示例屏幕截图:

似乎每毫秒都有一点新的数据。这也意味着数据以 1000 Hz 编码,波特率为 1000

我还可以看出每个数据包有 20 位(意味着传输需要 20 毫秒)加上 3 毫秒高信号。这意味着数据包 每 23 毫秒重新发送一次。


所以问题是,如何将其转换为二进制文件?手动完成并这样做是不可能的 - 除非,也就是说,你愿意这样做:)

这是称为开关键控 (OOK) 的数字调制的典型案例。

解码 OOK 相当容易:应用截止频率刚好低于 1/符号周期的低通滤波器,抽取它的输出,这样每个符号持续时间只能得到 1 个值,然后实验性地使用找到了决定什么是 0 什么是 1 的阈值。

如果您想要非常准确,您可能需要先找到确切的符号持续时间和符号开始时间。这是一个经典的同步问题——在你的情况下,发送方似乎确保在每个符号转换时都有一个锐边,所以对你的信号进行高通滤波,你会得到一个时钟信号,你可以用它来调整一个重采样器,然后会调整进入解码器的信号的采样率(如上所述)。

有一个很好的框架可以做到这一点; GNU Radio 附带实现这一目标所需的所有构建块,它有一个活跃的社区,有一个 GUI 可以帮助您开发信号处理应用程序,如果您不在信号处理链中使用图形可视化,生成的应用程序非常便携,经过高度优化,并附带大量示例。