我创建了一个相当简单的 TDOA 系统,它使用从两个扬声器发出的超声波信号来定位(相对于扬声器)手机。这两个信号按频率分开。
该系统具有以下约束:
- 信号必须是听不见的。为此,我们坚持使用 17 kHz 以上的频率。少数人仍然可以听到,但大多数人听不到。
- 采样率为 44.1 kHz。
- 音乐通常会播放,因此在较低频率会有很多干扰。
- 我们无法控制扬声器和麦克风在高频下的工作情况,因此我们将上限保持在 20 kHz 左右。
我使用的特定信号是 BPSK 调制的 13 位巴克码,因为它们具有良好的自相关特性。自相关如下所示 -
但是,当我将预期信号与现实生活中接收到的信号进行互相关时,我得到的通常是这样的——
蓝色是与扬声器 1 信号的互相关,红色是与扬声器 2 信号的互相关。回声似乎很重要,不幸的是,由于麦克风的方向增益,回声通常比直接路径信号强。
我尝试简单地检测信号的最早出现,因为这可能是直接路径。这种方法对我用来决定信号何时出现的阈值非常敏感,因此根本不可靠。
我想要一种可靠的方法来确定信号的“真实”到达时间——即直接路径信号的到达时间。也许某种形式的信道估计和反卷积?如果是这样,那将如何运作?
数据/代码:我想明确表示我不希望任何人分析数据或检查我的代码。我已将它们提供给您,以备不时之需。我最感兴趣的是想法。
我使原始接收信号和调制的预期信号可供下载。它们都以 44.1 kHz 采样。将接收到的信号与预期信号相关会产生与上图相似但不完全相同的结果,因为我将接收到的信号移动到基带并在与预期信号相关之前进行抽取。
Matlab 脚本 Matlab 脚本具有信号生成脚本 (genLocationSig.m) 和我的接收/处理脚本 (calcTimingOffset.m)。