Python音频通过激光传输

时间:2011-09-30 04:57:07

标签: python audio signal-processing frequency

到目前为止,我正在开展一个相对容易的项目。基础项目是使用音频转换通过激光传输数据/消息。 简而言之,这个过程目前就像这样

  1. 用户输入消息
  2. 消息转为二进制
  3. 对于二进制消息中的每个1和0,它会播放相应的音调信号,在我的情况下,250hz为1,450hz为0。
  4. 通过立体声电缆将输出音发送到装配到激光器的音频变压器
  5. 太阳能电池板充当麦克风,并将传入的“声音”记录为文件
  6. 它们播放文件并读取音调并尝试将每个250和450 hz匹配为1或0(这是我的问题所在。)
  7. 直到声音的实际处理很好,我目前的问题如下。

    我每次播放音调x时间,在接收端录制y时间,y时间被采样多次,然后按样本分析,然后记录每个频率。这是低效且不准确的。无论我播放音调的时间有多少,我都会遇到很多问题,因为它经常会听到两次音调或根本听不到它,这完全抛弃了整个信息。
    我试图将它采样的速率与每个音调播放的时间相匹配,但除非相应地对齐,否则它不起作用。我只对“test”和“hi”等消息进行了一些成功的测试。我已经研究过bpsk和fsk了,但是我觉得好像我已经做了类似的事情,但我接受了一个糟糕的接收端来解读它。

    这些都是用Python编写的,我非常感谢您提供的任何提示,建议或可能的实现。同样对于音调发射我正在使用pyaudiere并且用于录音我正在使用pyaudio

    谢谢!

    -Steve

4 个答案:

答案 0 :(得分:2)

这听起来像是硬件问题。我很确定 是FSK的工作。大多数现代FSK型系统使用PLL(锁相环芯片)进行实际检测。频率 - 电压或频率 - 电流电路也是可用的。

我在数十本业余爱好者书籍,数据表和网站上看过实用电路。以下是一些:

Circuit for demodulating an FSK signal

PLL Tutorial

我希望这不仅仅是为了你的另一次兔子之旅 - 祝你好运!

答案 1 :(得分:1)

您是否通过聆听声音文件(发送和接收)或使用音频编辑器查看波形来进行健全性检查,以查看它们是否大致发声或看起来相同?这样,您就可以将问题缩小到渠道引发的错误,而不是软件分析。

您的解码/解调软件需要一种同步方法,可以确定和跟踪音频信号从一个调制频率变为另一个频率的时间,然后您需要单独测试此同步方法的偏移误差。

答案 2 :(得分:1)

我会使用两个FIR滤波器来处理接收端,每个滤波器对应一个您要检测的频率。滤波器的系数只是您要查找的信号的副本(即一种情况下为250Hz,另一种情况下为450Hz)。您必须查看太阳能电池板的输出,以确定它是方波,正弦波还是介于两者之间的东西。过滤器的长度对应于音调的持续时间(即问题中的' x')。样品并行送入两个过滤器。

需要对每个滤波器的输出进行整流(即取绝对值)并进行平滑处理。平滑可以使用大约一半x的简单移动平均值来完成(您可以尝试找到最佳值)。然后,如果你比较平滑的值(即a> b,或b> a),你应该得到一个0和1的流。

需要注意的事项:这假设两个频率的通道行为相同(即,您获得类似的snr和衰减)。您可能需要略微调整一下频率,因为450Hz非常接近500Hz,这是250Hz的谐波。

答案 3 :(得分:0)

使用自我时钟信号表示,例如Manchester code。这样你的时间只需要“足够好”,而你主要担心检测频率的变化,在这种情况下。在链接文章中,高低电平指的是电压,但没有必要。您可以轻松使用高频和低频,或打开/关闭单个激光。