我已经构建了一个将二进制数据编码为声音的小程序。例如以下二进制输入:
00101101
会产生这样的“声音”:
################..S.SS.S################
其中每个字符代表一个恒定的时间单位。#
代表 880 赫兹正弦波,用于确定传输的开始和结束,.
代表静音,代表零,S
代表 440 赫兹正弦波,代表 1。显然,中间的部分在实践中要长得多。
我的问题的本质是:我怎样才能反转这个操作?
声音文件通过简单的声音回放和录音传输给接收者。这意味着我不会尝试解码很容易的原始声音文件。
显然,我必须根据频率分析记录的数据。但是怎么做?我读过一些关于傅立叶变换的文章,但我在这里很迷茫。
我不知道从哪里开始,但我知道这不是微不足道的,可能需要相当多的信号处理知识。有人可以指出我正确的方向吗?
顺便说一句:我在 Ruby 中执行此操作(我知道,它很慢 - 这只是一个概念证明)但问题本身不是特定于编程语言的,因此非常欢迎任何答案。