目的:若使用超声波信号进行定位,使用笔记本电脑产生超声波信号,要求这种信号不易被人察觉,并且方便接收端的检测,在手机这种便携式硬件上完成超声波信号的接收。
存在的问题:
- 如何让电脑连续不断的产生调制好的信号?采用什么方法调制?信号频段选择多少?
- 手机接收端使用什么方式进行接收,考虑到实际环境中其他声音对接收端信号的干扰,选择什么样的接收策略?
- ………
网络上的资料:
http://fengjian0106.github.io/2014/12/09/Ultrasonic-Communication/
基于使用场景而提出的一些技术参数指标:
- 只能使用18kHz~21kHz这个范围内的音频信号(人耳要尽量听不见这个声音,手机要能够接收到这个声音,所以只能限制在这个频率范围内)
- 通信距离最远要达到10米
关键技术点:
- 为了减小数据处理过程中的延迟现象,采取的是实时的进行音频数据采集和数据处理,具体到iOS平台上,就是使用audio unit框架来搭建PCM音频数据的采集管道,在管道的最后一个节点上,对得到的PCM数据再进行进一步的处理。
- 仍然是为了降低延迟,使用手机的DSP硬件来进行快速傅里叶变换,具体到iOS上,就是用了Accelerate.framework框架中的相关函数。
- 为了提高数据传输和解码的成功率,在2FSK的基础上,做了一些调整(magic trick),
实际情况中,发送端维持的每个bit位的持续时间是50ms,进入空气中后,会和其他的各种各样的音频信号混杂在一起,然后才进入接收端进行变换和滤波等操作,这个时候,是很难保证每个bit位仍然能够维持在50ms的。所以:使用了边缘检测这种方式来处理音频信号,调整为18kHz和19kHz的音频信号都可以表示二进制的0,20kHz和21kHz的音频信号都可以表示二进制的1,如果是为了表示两个连续的0,那么就应该是18kHz的音频信号持续50ms,然后变成19kHz的音频信号持续50ms(或者先发送19kHz的,再发送18kHz的),对于连续的1,也采用类似的策略。