我如何在android中使用超声波通过语音传输数据?

Posted

技术标签:

【中文标题】我如何在android中使用超声波通过语音传输数据?【英文标题】:How i can transfer data over voice using ultrasound in android? 【发布时间】:2016-09-12 10:46:02 【问题描述】:

我想使用超声波将一些字符串数据从一台安卓设备传输到另一台。

我尝试了这个项目,但没有成功。

android-ultrasound

如果有人有示例代码,请分享。

【问题讨论】:

【参考方案1】:

这很容易做到,但不要期望高比特率。如果它是一个字符串,那么确保它不是一个长字符串(越长错误概率越高)。假设我们正在处理 ASCII 码的重要部分,即最多 127 个字符,那么您只需要每个字符 7 位。将此字符转换为位并使用 QFSK 调制这些位(有多种调制可供选择,基于频移的调制已证明是我尝试过的最强大的传统调制...我创建了自己的调制此用例的方案)。将载波频率选择为 18.5、19、19.5 和 20 kHz(如果您想在设计中进行严格的数学运算,请选择可确保符号转换时的正交性和相位连续性的频率值,如果不能,这是一个很好的解决方法避免突然的符号转换是将符号乘以相同大小的窗口,例如 Gaussian 或 Bartlet )。根据我的经验,您可以将此值移动到 17.5 到 20.5 kHz 的范围内(如果您降低它会开始打扰使用您的应用程序的人,如果您提高平均类型的麦克风频率响应会削弱您的传输并引发不必要的错误) .

在接收器端实现相关或匹配滤波器接收器(FFT 接收器也可以工作,特别是零填充接收器,但它可能会慢一点,我不推荐 Goertzel,因为多普勒效应或扬声器-麦克风非线性可能会影响您的接收)。收到比特流后,用它们制作字符,您将恢复您的消息

如果您遇到过多的广播错误,请尝试在将每个频率值提供给解调器之前为每个符号选择更高数量的样本或对每个频率值进行带通滤波,有时只能使用诸如 BCH 或 Reed Solomon 之类的纠错码确保无差错通信的方法。

每个人总是忘记谈论的一个话题是同步(要在接收端知道传输何时开始),您必须在这里发挥创造力并使用大量手机进行大量测试,然后才能得出实际的适用于所有人的检测阈值,请注意这也可能与距离有关

如果您不熟悉这些主题,我会推荐几本好书:

    熊福琴的数字调制技术 BERNARD SKLAR 的数字通信基础和应用 John G. Proakis 的数字通信

【讨论】:

谢谢!这对我来说是非常有帮助的。你能给我一些相关的源代码吗? @vmmf

以上是关于我如何在android中使用超声波通过语音传输数据?的主要内容,如果未能解决你的问题,请参考以下文章

在android上的语音通话数据通道上传输数据

通过 WiFi 在 Android 手机之间流式传输语音

通过WiFi在Android手机之间流式传输语音

如何区分 Android 中双卡的数据/语音使用情况

在android中流式传输通话语音?

如何使用语音打开 Android TV 应用