ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

还要写DSP算法?这玩意儿插上电就能输出声源角度,精度±10°

还要写DSP算法?这玩意儿插上电就能输出声源角度,精度±10° 写了两周 GCC-PHAT跑出来的角度还不如人家一个模组上电瞬间给的值准。我心态有点崩但我服了。一、先说说我这两周在干嘛项目要做一个声源跟随机器人。需求一句话听到人声转过去看人。我一个嵌入式工程师天真地以为这是个小活。不就是双麦克风算个到达时间差嘛大学信号处理学过。然后我就掉坑里了。第一周我以为的路线麦克风采样 → FFT → 广义互相关(GCC-PHAT) → 峰值检测 → 时延 → 反三角算出角度实际踩的坑麦克风标定两颗麦克风灵敏度不一致相位响应不一样出来的时延全是偏的。先得做幅度校准、相位校准——对还有温度影响。采样同步两颗麦必须同时刻采样ADC 驱动稍微错几个时钟周期时延就废了。采样率双麦间距 4cm声速 343m/s最大到达时间差才 116μs。16kHz 采样下采样周期 62.5μs整个量程不到 2 个采样点分辨率差到没法看。得上 48kHz 甚至 96kHz还得做插值。GCC-PHAT 本身互相关函数峰值找不准多径反射一来峰值直接指错方向。环境噪音车间里风扇声、机器声全部叠加进相关性里角度疯狂抖动。两周后我的成果是安静房间、1 米距离、正对麦克风时角度误差 ±20°还时不时抽风跳到 180°。二、同事甩给我一个模组你插上电试试同事看不下去了扔过来一块小板子说别写了试试这个 AR1106插上电就能出角度。我第一反应是吹吧。然后我看了眼规格书定位范围正面 180°定位精度±10°拾音距离5 米输出串口 960016 进制角度值一个字节舵机内置 SG90 驱动PWM 脚直连行那就测。我找了块面包板接了 5V、GND串口 TX 拉到 USB 转 TTL打开串口助手。全程没写一行代码。按下复位键串口安静。我对着模组喊了一声小智。5A我查了下换算——0x5A 90。它报的是 90°。我人正好站在模组正前方。当时我后背就有点发凉了。三、实测±10° 到底是吹的还是真的我不信邪拿了个量角器在模组正前方按角度摆了点每个点喊一遍命令词记录串口输出。实际方位串口输出解码角度误差正前方 90°5A90°0°右前 135°88136°1°左前 45°2C44°-1°右 160°A0160°0°左 15°0D13°-2°注0x881360x2C440xA01600x0D13近距误差在 ±2° 以内拉远到 4-5 米误差会放大到 ±10° 的边界但从没出现过指向 180° 那种离谱的跳变。我又做了个恶趣味测试旁边放个音箱循环放音乐人站在另一边喊命令词——模组只认命令词音乐放着的时候串口一个字节都不吐。这防干扰比我写的 200 行滤波代码管用多了。四、把舵机接上20 行代码让机器人转头规格书说内置 SG90 驱动我顺手把舵机信号线接到了 PWM 脚上——舵机自己就动了跟着我的喊声转向根本没经过我的程序。想自己控也行串口模式几十行代码#include SoftwareSerial.h #include Servo.h SoftwareSerial ar1106(10, 11); // RX, TX Servo head; void setup() { Serial.begin(9600); ar1106.begin(9600); head.attach(9); head.write(90); } void loop() { if (ar1106.available()) { uint8_t angle ar1106.read(); // 一个字节就是角度0x00~0xB4 angle constrain(angle, 0, 180); head.write(angle); // 舵机转向声源 Serial.print(声源角度: ); Serial.println(angle); }从接到任务到机器人会转头我用 AR1106 只花了一个下午。其中半小时还是在等舵机快递。五、冷静下来说说 DSP 到底该不该自己写吐槽归吐槽我也得给自己两个星期一个交代。理清楚之后结论其实很清晰什么情况必须自己写 DSP需要区分多个声源比如会议场景分离几个人声需要1°~2° 级的高精度指向远程定向拾音需要自定义声学处理链路波束成形 降噪 识别一体成本敏感到连一颗模组的钱都省不下来且团队有人能啃算法。什么情况直接用 AR1106需求就是声音从哪来头转向哪180° 范围、5 米内、±10° 精度恰好够用想要确定性只认命令词不误触发现场演示不翻车想快点交付即插即用串口一个字节出角度。我那个项目最后用了 AR1106。自研版本被丢进 git 历史就当交学费了。六、最后说点掏心窝的技术圈有个毛病总觉得自研才显得有水平。但工程师的第一职责是交付不是炫技。当现成方案 5 分钟出结果、自研要 5 个星期还不一定稳的时候选现成方案不是偷懒是清醒。还要写 DSP 算法 —— 对真不用。这玩意儿插上电喊一声角度就出来了。本文实测基于 AR1106 声源定位模组规格书。关键参数180° 定位范围 / ±10° 精度 / 5 米拾音 / 串口 9600 输出 16 进制角度0x5A90°/ 内置 SG90 舵机驱动 / 仅响应预设命令词。详细咨询请私信公众号后台期待与您交流。
返回列表