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

如何在android中使用超声波通过语音传输数据?,android,audio,frequency,transmission,Android,Audio,Frequency,Transmission,我想用超声波将一些字符串数据从一个安卓设备传输到另一个安卓设备 我尝试过这个项目,但没有成功 如果有人有示例代码,请分享。这很容易做到,但不要期望高比特率。如果它是一个字符串,那么请确保它不是一个长字符串(越长,错误概率越高)。假设我们正在处理ASCII码的关键部分,即最多127个字符,那么每个字符只需要7位。将该字符转换为比特,并使用QFSK调制这些比特(有几种调制方式可供选择,基于频移的调制方式是我尝试过的传统调制方式中最稳健的一种……我为这个用例创建了自己的调制方案)。选择载波频率为18

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

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


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

这很容易做到,但不要期望高比特率。如果它是一个字符串,那么请确保它不是一个长字符串(越长,错误概率越高)。假设我们正在处理ASCII码的关键部分,即最多127个字符,那么每个字符只需要7位。将该字符转换为比特,并使用QFSK调制这些比特(有几种调制方式可供选择,基于频移的调制方式是我尝试过的传统调制方式中最稳健的一种……我为这个用例创建了自己的调制方案)。选择载波频率为18.5、19、19.5和20 kHz(如果您希望在设计中严格遵守数学规则,请选择确保符号转换时正交性和相位连续性的频率值。如果您不能做到这一点,避免符号突然转换的一个好办法是将符号乘以相同大小的窗口,如高斯或巴特勒窗口).根据我的经验,您可以将此值移动到17.5到20.5 kHz的范围内(如果降低,则会开始困扰使用您的应用程序的用户;如果升高,则平均类型麦克风频率响应将衰减您的传输并导致不必要的错误)

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

如果面临太多的广播错误,请尝试在将每个符号的采样数或带通滤波每个频率值提供给解调器之前选择更高的采样数,使用BCH或Reed Solomon等纠错码有时是确保无错误通信的唯一方法

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

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

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

  • 谢谢!这对我很有帮助。你能提供一些与此相关的源代码吗???@vmmf