4

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

00101101

会产生这样的“声音”:

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

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

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

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

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

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

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

4

2 回答 2

2

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

于 2015-08-18T12:43:13.150 回答
1

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

于 2012-05-05T01:59:25.260 回答