最近,我偶然发现了一篇有趣的论文,它不需要特殊的硬件,只需要一个扬声器和麦克风就可以实现运动感知!不幸的是,这篇论文没有包括测试它的代码,所以我决定把它复制到网上!
首先,什么是多普勒效应?多普勒效应是一种影响运动中波的物理现象。标准的例子是消防车快速驶过时对警报器的影响。当它向你移动时,声波被压缩,因此频率变得更高,当它离开你时,频率变得更低。
这一现象实际上在天文学中有很好的应用,可以通过观察光的频移来计算星系向我们移动或远离我们的速度,但我偏离了主题。
无论如何,重要的是要认识到,多普勒效应也会发生,如果你是跑向警报器,而不是向你移动的警报器。我们将在下一节中使用这一原则。
为了在传统计算机上测量运动检测的多普勒效应,您可以做的是以某个已知(听不见)的频率发出正弦信号,比如20 kHz。如果房间里有什么东西在移动,那么,当正弦波在墙上反弹到麦克风里后,声音就会发生频率偏移。这可以通过查看20 kHz音调附近区域的频谱来测量。
按此可查看20 kHz音调在房间内反弹后的效果。
请注意,您需要使用相当高的扬声器音量来运行Chrome,这样才能以最佳方式工作。
麦克风输入的频谱如上图所示。右边的峰值是由于我们发出的20千赫的音调。试着吹口哨看看光谱的变化。
这里是一个近距离观察,放大到20千赫的区域。尝试将您的手移向麦克风/计算机以查看凸起向较高频率移动,而远离计算机以查看其向较低频率移动。
这方面最明显的应用是运动传感。下面我已经计算了20 kHz区域的左带宽和右带宽(定义为20 kHz音调振幅在99.9%以内的左右频率的数量)。然后,我把它们的不同之处与盒子的大小联系在一起。
这样做产生的效果是,当您将手移向麦克风时,盒子会变小(您会将其向内推),如果您将手从麦克风移开,盒子会变大(您会将其向外拉)。
根据Soundwave论文的建议,运动传感的一个很酷的应用是滚动(参见上面的视频)。单击下面的按钮进行试用。
这个实现没有双击功能来反转滚动方向,而只是使用左右带宽差。因此,如果您想要向下滚动,您必须将手快速移向计算机,然后慢慢远离计算机。
我们也可以根据左右带宽的不同,通过简单地调制一些基音的频率,比如440赫兹,来创造一种乐器!
这让人想起Thermin,因为你可以通过在自由空间中移动你的手来控制声音,但不同之处在于Thermin能够测量离底座的绝对距离,而我们只能测量相对运动。
这让你有什么想法吗?我还创建了一个小库来处理这个问题。快跑吧