子曰:“不愤不启,不悱不发”。卓大大,我现在心好累。

提问

我的心好累呀

卓大大您好,我是一名信标组的参赛选手 . 最近研究声音定位已经一个多星期了,一直在跟着您推文中的方法走,也曾像其他人求助,解决了很多问题,但是也遇到了一些新的问题,有些暂时想不明白,就想来请教一下。

购买的 TC264 核心板尚未拿到手,于是用上一届的 K66 板子做实验。使用的麦克风是 模块,GAIN 接 5V。

错误的信标ns_信标超时_错误的信标

实验电路板与麦克风传感器

一开始先用两个麦克风,10khz 采集 2000 个数据做互相关运算,结果存在数组内。找出互相关的最大值对应的下标 Nmax,这个下标和 2000 的差 2000-Nmax 即为时间延迟 / 采样间隔。

错误的信标_信标超时_错误的信标ns

实验布局示意图

这里遇到的问题是求出的结果只有三个,两个麦克风距离算 8 厘米,最大时间间隔才 235 微妙,而采样 100 微妙一次,这样的结果就理所当然了。

通过提高采样速率,软件插值,提高麦克风间距,增加测量时间可以增加分辨率。我都尝试了。

提高采样速率和软件插值效果明显,可以做到互相关的最大值的坐标从 3 个点内的移动增大到 100 个点内的 移动。我觉得这应已经很不错了。

Chirp 信号波形

麦克风间距受到 Chirp 半波长限制,增加采样时间效果不明显(试验从 1000 到 4000 个点)。

然后我开始尝试用三个麦克风实现定位,作了一个等边三角形固定麦克风。以厘米为单位建立平面坐标,求解联立的双曲线方程,再代入第三个方程求得唯一解。

折腾半天算出来表达式非常长的一串,在电脑上运行 C 语言程序, 计算,代入数值答案都正确而且一致,说明等式没有问题。

错误的信标ns_信标超时_错误的信标

使用三角形麦克风阵列测量扬声器的位置

把这些代码移植到单片机里实践,效果确实非常差:大部分时候算出来的 X,Y 坐标只是符号正确而已,说明好坏知道我在哪个象限;有些符号都是错误的。我想这个数学模型是非常敏感的。在远点的地方双曲线接近平行错误的信标,0.1 厘米的误差都会导致误解或者提前相交 -- 失之毫厘,差之千里。

于是,我开始寻找误差来源:麦克风的误差可以忽略不计;K66 的 ADC 采样的误差,一是 ADC 脚悬空时跳变较大(但是接入麦克风后又是稳定很多),而是一个 ADC 的才寄回干扰的其他的 ADC。这个挺明显的,1 个麦克风+2 个悬空使用虚拟示波器看波形错误的信标,有声音的时候 2 个悬空的也有不算小的波动。

错误的信标ns_错误的信标_信标超时

采集到的波形信号

我找了个 来做对比,发现这两个指标都好上不少;三是麦克风不是一个点,是一个圆柱体,加上等边三角形的误差,凤城参数和我实际麦克风间具有一定的差距。

然后寻找错误的来源:在 Chirp 的中频段,有可能互相关的结果在 t 点和 T-t 点都是峰值(t 是时间延迟,T 是信号周期)。因为我采集到的信号并不是一个完整周期的 Chirp 信号,可能在我采集的这一段就是规律的正弦信号,往左往右都可以重合。

Chirp 信号的自相关信号

用完整的 Chirp 信号可以解决这个错误,但是在保证时间分辨率起码在 10 微妙的情况下,不管是提高采样频率还是插值,一个 0.2048s 的信号的点起卖超过 20000 个。而且不知道信号的起始时间的情况下才采集这么长的时间也不一定才到完整的一帧 Chirp 信号。

所以我现在有点怀疑纯麦克风的方案。折腾了这么久,以为快要成功的时候又发现了 一大大堆不知道如何解决的问题。我现在也没有力气再重新飞线测试 的结果了。

Chirp 信号的 FFT 幅度谱

万一只是误差非常非常大和非常大的区别呢?不知不觉写了这么多,真的是麻烦卓老师了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注