到目前为止,我正在开展一个相对容易的项目。基础项目是使用音频转换通过激光传输数据/消息。 简而言之,这个过程目前就像这样
直到声音的实际处理很好,我目前的问题如下。
我每次播放音调x时间,在接收端录制y时间,y时间被采样多次,然后按样本分析,然后记录每个频率。这是低效且不准确的。无论我播放音调的时间有多少,我都会遇到很多问题,因为它经常会听到两次音调或根本听不到它,这完全抛弃了整个信息。
我试图将它采样的速率与每个音调播放的时间相匹配,但除非相应地对齐,否则它不起作用。我只对“test”和“hi”等消息进行了一些成功的测试。我已经研究过bpsk和fsk了,但是我觉得好像我已经做了类似的事情,但我接受了一个糟糕的接收端来解读它。
这些都是用Python编写的,我非常感谢您提供的任何提示,建议或可能的实现。同样对于音调发射我正在使用pyaudiere
并且用于录音我正在使用pyaudio
。
谢谢!
-Steve
答案 0 :(得分:2)
这听起来像是硬件问题。我很确定 是FSK的工作。大多数现代FSK型系统使用PLL(锁相环芯片)进行实际检测。频率 - 电压或频率 - 电流电路也是可用的。
我在数十本业余爱好者书籍,数据表和网站上看过实用电路。以下是一些:
Circuit for demodulating an FSK signal
我希望这不仅仅是为了你的另一次兔子之旅 - 祝你好运!
答案 1 :(得分:1)
您是否通过聆听声音文件(发送和接收)或使用音频编辑器查看波形来进行健全性检查,以查看它们是否大致发声或看起来相同?这样,您就可以将问题缩小到渠道引发的错误,而不是软件分析。
您的解码/解调软件需要一种同步方法,可以确定和跟踪音频信号从一个调制频率变为另一个频率的时间,然后您需要单独测试此同步方法的偏移误差。
答案 2 :(得分:1)
我会使用两个FIR滤波器来处理接收端,每个滤波器对应一个您要检测的频率。滤波器的系数只是您要查找的信号的副本(即一种情况下为250Hz,另一种情况下为450Hz)。您必须查看太阳能电池板的输出,以确定它是方波,正弦波还是介于两者之间的东西。过滤器的长度对应于音调的持续时间(即问题中的' x')。样品并行送入两个过滤器。
需要对每个滤波器的输出进行整流(即取绝对值)并进行平滑处理。平滑可以使用大约一半x的简单移动平均值来完成(您可以尝试找到最佳值)。然后,如果你比较平滑的值(即a> b,或b> a),你应该得到一个0和1的流。
需要注意的事项:这假设两个频率的通道行为相同(即,您获得类似的snr和衰减)。您可能需要略微调整一下频率,因为450Hz非常接近500Hz,这是250Hz的谐波。
答案 3 :(得分:0)
使用自我时钟信号表示,例如Manchester code。这样你的时间只需要“足够好”,而你主要担心检测频率的变化,在这种情况下。在链接文章中,高低电平指的是电压,但没有必要。您可以轻松使用高频和低频,或打开/关闭单个激光。