安卓系统,使用超声波传输信号



请告诉我如何用安卓手机创建超声音?如果您已经有了代码示例?非常感谢。

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

你可以构建一种人造波,将功率从高到低快速转换,任何给定的设备都可能以不同程度的成功复制该信号。它保持得越好,就越接近信号的真实音量。如果它不能很好地保持,你可能只会得到一个微小的振动,而不是你发出的大振动。换句话说,你可能会发现你可以产生你想要的超声波频率,但它的音量不够高,不足以发挥作用。它肯定会因设备而异。

此外,应该注意的是,超声波只是指比我们能听到的音调更高的东西。有些人(尤其是青少年)能听到比其他人高得多的音高。因此,超声波的定义还有一些回旋余地。但最终,这些手机的扬声器是为播放我们都能听到的声音而优化的,你越是试图将设备扩展到预期范围之外,你可能会发现它的性能越有局限性。

如果你想进行实验,可以查看不同声音格式的规格。我认为.wav可能是你会发现最简单的,因此也是最容易实验的。然后根据这个规范构建你的声音文件,以产生大而快的波浪。例如,如果信号功率在0到255之间,则可以尝试0、127、255、127、0、127和255等模式,或者甚至只尝试0、255、0、255和0,这将高出一个倍频程。看看你是否能在另一台设备上记录下这种波动。(因为你不会用耳朵听到。)

顺便说一句,你也会发现,简单地产生信号是容易的部分。如果你想"传输",那么你的另一台设备必须听到信号。但当然,它实际听到的声音会与房间里所有的背景噪音混合在一起,所以将一个频率与其他噪音分离需要一些数学运算。您需要熟悉傅立叶变换等术语。数学就在那里。它已经制定好了。但当听到这种频率时,你必须弄清楚如何将复杂的数学应用于排序问题。如果你喜欢数学,这将是一个有趣的项目。

现代安卓设备支持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);
    }

这是更先进的,但它暗示了某些设备的超声波功能。Android有一个"附近的API",使用超声波交换来配对设备:

附近使用蓝牙、蓝牙低能耗、Wi-Fi的组合以及一个超声波调制解调器,用于传送唯一的时间配对码在设备之间。服务器便于在检测到相同配对代码的设备。

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

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

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

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

最新更新