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

标签 android audio frequency transmission

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

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

android-ultrasound

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

最佳答案

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

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

如果您遇到太多的广播错误,请尝试使用每个BSC或Reed Solomon之类的纠错码,在将每个频率值提供给解调器之前,为每个符号选择更多的样本,或者对每个频率值进行带通滤波,有时是唯一的保证方法。无错误的通讯。

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

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

  • 付琴熊的数字调制技术
  • BERNARD SKLAR的数字通信基础知识和应用
  • John G. Proakis的数字通信
  • 关于android - 我如何在Android中使用超声波通过语音传输数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39448570/

    相关文章:

    java - 在声音阵列中随机播放单词对

    ruby - 如何按词频排序,然后在 Ruby 中的每个词频内按字母顺序排序?

    r - 根据R中的三列计算频率

    java - 使用无效注册 ID 时,GCM 返回 BAD 请求

    android - 如何在 ImageButton 中对齐图像源?

    android - [INSTALL_FAILED_NO_MATCHING_ABIS : Failed to extract native libraries, res=-113]

    android - android中的收件箱消息

    c# - 如何使用NAudio将.rm(RealPlayer Media)文件转换为mp3?

    java - Java 中的循环音乐

    R:如何通过ID变量(作为新数据框)获取两个因子变量水平的共同计数(频率)