Android,使用超声波传输信号

时间:2013-11-22 19:47:04

标签: android mobile audio signals

请告诉我如何使用Android手机创建超声音?如果您已经有代码示例? 谢谢!

5 个答案:

答案 0 :(得分:2)

创造超声只是播放包含非常高音高(小波长)的声音的问题。通过快速改变附着在相应振动的膜(电子扬声器)上的电磁铁的功率,通过电子设备播放声音。声音可以以不同的粒度级别播放,但有些扬声器可能能够比其他人更好地跟上发送的信号。

你可以构建一个人工波,从高到低快速地将电源甩掉,并且任何给定的设备都可能以不同程度的成功再现该信号。它保持越好,越接近信号的真实音量。如果它没有很好地跟上,你可能只会受到微小的振动而不是你发出的大振动。换句话说,您可能会发现您可以产生所需的超声频率,但它的体积不足以使其有用。它肯定会因设备而异。

此外,应该注意的是,超声波仅仅意味着比我们能听到的更高的音高。有些人(特别是青少年)可以听到比其他人更高的音高。所以在超声定义中有一些摆动空间。但最终,这些手机的扬声器经过优化,可以播放我们都能听到的声音,而且你试图将设备拉伸到预定范围之外的越高,你的性能就越有限。

如果您想进行试验,请查看不同声音格式的规格。我认为.wav可能是你会发现最简单的,因此也是最容易实验的。然后根据该规范构建您的声音文件,以制作大而快的波浪。例如,如果信号功率范围为0到255,您可以尝试0,127,255,127,0,127,255等模式,甚至只需尝试0,255,0,255,0,会高一个八度。看看你是否可以在另一台设备上录制那些波形。 (因为你不会用耳朵听到它。)

顺便说一句,您还会发现只是简单地产生信号就很容易了。如果你想“传输”,那么你的其他设备将不得不听到信号。但是,当然,它实际听到的内容将与房间内的所有背景噪声混合在一起,因此将一个频率与其余噪声分开会涉及一些数学。您需要熟悉傅立叶变换等术语。数学就在那里。它已经解决了。但是你必须弄清楚如何将这种复杂的数学应用于在听到这个频率时进行整理的问题。如果你喜欢数学,这将是一个有趣的项目。

答案 1 :(得分:1)

现代Android设备支持48 kHz的采样频率,因此理论上您可以在19-24 kHz范围内传输超声波。现在,由于麦克风输入端存在抗混叠滤波器,因此实际范围限制为19-20.5 kHz,某些设备限制为19-21 kHz。如果您正在寻找的是传输超声波音调,那么它非常容易。例如:

    int samplingFreq = 48000;
    int numberOfSamplesXSymbol = 48000; //1 sec tone
    int f0 = 20000;//ultrasonic tone

    for (int i=0;i<numberOfSamplesXSymbol;i++)
    {
        tone[i] = Math.cos(2*pi*f0/samplingFreq*i);
    }

答案 2 :(得分:1)

你可以这样做,但你会受到硬件容量的限制,特别是在麦克风方面。

看看这篇博文,其中解释了更多,并在JS中使用Web Audio API实现了一个实现。 http://smus.com/ultrasonic-networking/

答案 3 :(得分:1)

这是更高级的,但它暗示了某些设备的超声能力。 Android有一个“附近的API”,它使用超声波声音交换来配对设备:

  

Nearby使用蓝牙,蓝牙低功耗,Wi-Fi的组合   和超声波调制解调器,以传递独特的配对码   设备之间。服务器促进了之间的消息交换   检测相同配对码的设备。

https://developers.google.com/nearby/messages/overview?hl=en

答案 4 :(得分:0)

手机的扬声器可以重现18-20 kHz的最大频率。超声波 - 这是20 kHz以上的频率。不可能产生超声波信号。