我目前正在从事一个相对容易的项目,到目前为止。基础项目是使用音频转换通过激光传输数据/消息。 概括一下流程目前是这样的
- 用户输入消息
- 消息变成二进制
- 对于二进制消息中的每个 1 和 0,它都会播放相应的音调来发出信号,在我的例子中,250hz 表示 1,450hz 表示 0。
- 传出的音调通过立体声电缆发送到安装在激光器上的音频变压器
- 太阳能电池板充当麦克风并将传入的“声音”记录为文件
- 他们播放文件并读出音调并尝试将每个 250 和 450 赫兹与 1 或 0 相匹配(这是我的问题所在)。
直到声音的实际处理没问题,我目前的问题如下。
我将每个音调播放 x 次,在接收端记录 y 次,将 y 次剪切 采样 多次,然后逐个样本分析,然后记录每个频率。这是低效和不准确的。无论我何时播放提示音,我都遇到过很多问题,因为它经常会听到两次提示音或根本听不到提示音,这完全会影响整个消息。
我试图将它的采样率与每个音调播放的时间相匹配,但除非相应地对齐它是行不通的。我只对“测试”和“嗨”等消息进行了几次成功测试。我已经研究过 bpsk 和 fsk,但我觉得我已经在做类似的事情了,但我的接收端不好,无法破译这一切。
这一切都是用 Python 编写的,如果您能提供任何提示、建议或可能的实现,我将不胜感激。此外,对于音调发射,我正在使用 pyaudiere
,对于录音,我正在使用 pyaudio
。
谢谢!
-史蒂夫
最佳答案
这听起来像是硬件问题。我很确定它是 FSK 的工作。大多数现代 FSK 型系统使用 PLL(锁相环芯片)进行实际检测。也可使用频率-电压或频率-电流电路。
我在许多业余爱好者书籍、数据表和网站上看到过实用电路。这里有一些:
Circuit for demodulating an FSK signal
我希望这不仅仅是您的又一次冒险——祝您好运!
关于通过激光进行 Python 音频传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7606111/