【发布时间】:2016-09-12 10:46:02
【问题描述】:
【问题讨论】:
标签: android audio frequency transmission
【问题讨论】:
标签: android audio frequency transmission
这很容易做到,但不要期望高比特率。如果它是一个字符串,那么确保它不是一个长字符串(越长错误概率越高)。假设我们正在处理 ASCII 码的重要部分,即最多 127 个字符,那么您只需要每个字符 7 位。将此字符转换为位并使用 QFSK 调制这些位(有多种调制可供选择,基于频移的调制已证明是我尝试过的最强大的传统调制...我创建了自己的调制此用例的方案)。将载波频率选择为 18.5、19、19.5 和 20 kHz(如果您想在设计中进行严格的数学运算,请选择可确保符号转换时的正交性和相位连续性的频率值,如果不能,这是一个很好的解决方法避免突然的符号转换是将符号乘以相同大小的窗口,例如 Gaussian 或 Bartlet )。根据我的经验,您可以将此值移动到 17.5 到 20.5 kHz 的范围内(如果您降低它会开始打扰使用您的应用程序的人,如果您提高平均类型的麦克风频率响应会削弱您的传输并引发不必要的错误) .
在接收器端实现相关或匹配滤波器接收器(FFT 接收器也可以工作,特别是零填充接收器,但它可能会慢一点,我不推荐 Goertzel,因为多普勒效应或扬声器-麦克风非线性可能会影响您的接收)。收到比特流后,用它们制作字符,您将恢复您的消息
如果您遇到过多的广播错误,请尝试在将每个频率值提供给解调器之前为每个符号选择更高数量的样本或对每个频率值进行带通滤波,有时只能使用诸如 BCH 或 Reed Solomon 之类的纠错码确保无差错通信的方法。
每个人总是忘记谈论的一个话题是同步(要在接收端知道传输何时开始),您必须在这里发挥创造力并使用大量手机进行大量测试,然后才能得出实际的适用于所有人的检测阈值,请注意这也可能与距离有关
如果您不熟悉这些主题,我会推荐几本好书:
【讨论】: