【发布时间】: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