【问题标题】:How do I interpret audio encoded binary data?如何解释音频编码的二进制数据?
【发布时间】:2012-05-14 08:53:57
【问题描述】:

我已经构建了一个将二进制数据编码为声音的小程序。例如下面的二进制输入:

00101101

会产生这样的“声音”:

################..S.SS.S################

其中每个字符代表一个恒定的时间单位。 # 代表 880 赫兹正弦波,用于确定传输的开始和结束,. 代表静音,代表零,S 代表 440 赫兹正弦波,代表零。显然,中间的部分在实践中要长得多。

我的问题的本质是:我怎样才能反转这个操作?

声音文件通过简单的声音回放和录音传输给接收者。这意味着我不会尝试解码原始声音文件,这很容易。

显然,我必须根据频率分析记录的数据。但是怎么做?我读过一些关于傅立叶变换的文章,但我在这里很迷茫。

我不确定从哪里开始,但我知道这并非易事,可能需要相当多的信号处理知识。有人能指出我正确的方向吗?

顺便说一句:我在 Ruby 中执行此操作(我知道,它很慢 - 这只是一个概念证明)但问题本身不是特定于编程语言的,因此非常欢迎任何答案。

【问题讨论】:

  • 啊,太好了,为什么不重新发明轮子呢? :) 感谢您的提示!
  • Ruby 对于很多任务来说速度惊人。它不会跟上 C++ 或 C 或程序集,但您的开发时间应该会快很多,因此工作运行得更快。而且,根据您的数据移动链,它可能会非常快。这让我们大吃一惊。
  • 我怀疑使用频率及其双倍是一个好主意(因为谐波)。但是对于概念证明,它可以。但是,如果您不了解傅里叶变换,编写 FSK 解码器听起来有点疯狂......

标签: ruby audio signal-processing frequency-analysis frequency-domain


【解决方案1】:

如果您知道频率和调制率,可以尝试使用 2 个滑动 Goertzel 滤波器进行 FSK 解调。

【讨论】:

    【解决方案2】:

    您的问题显然是试图解调 FSK 调制信号。我建议实施一个针对每个频率调整的相关库,如果速度是您关心的问题之一,它比 fft 快很多

    【讨论】:

    • 感谢您指出这一点。这实际上是我最终使用的方法。我还选择了 1200 和 2200 Hz,这是分组无线电使用的频率。
    • 不客气!您实际上是通过在空中传播的声音(从扬声器到麦克风)传输数据吗?我已经实现了一个 8fsk,它能够在 1m 之外传输 200 bps。我正在使用 Creative T6300(5.1 系统)的一个扬声器和几部智能手机。
    • 是的,这是我的学士论文的一部分。我构建了一个 iphone 应用程序来通过麦克风/扬声器传输文件。现在我记得我将传输速度提高到 2400 波特,所以我需要切换到 2400/4400 Hz。如果您有兴趣,这里是完成应用的视频:vimeo.com/48487024
    • 我没有任何使用 iphone 的经验,但是使用 android,我见过的最大音频采样频率是 48kHz。哪个是iphone的?为了传输 2400 bps,每个 fsk 符号必须只有 20 个样本。我看不到视频(你在 google play 或 youtube 上有吗?)但我在 patrickoscity.de/projects/rx-tx 看到了一些图片。是只有iphone到iphone还是pc到iphone?这些设备可以相距多远?你实施了什么样的同步和纠错方案?为什么仍然可以听到 2400 和 4400 载波,为什么不使用 19 和 21 khz 呢? .谢谢
    猜你喜欢
    • 2020-05-14
    • 2014-08-09
    • 1970-01-01
    • 2019-01-09
    • 2013-05-31
    • 2011-11-02
    • 1970-01-01
    • 2010-10-25
    • 2012-07-25
    相关资源
    最近更新 更多