硬件准备:麦克风阵列选型、树莓派/NVIDIA Jetson环境搭建、音频接口与驱动安装
好,咱们进入第二章。说实话,这一章是整个课程里最「接地气」的部分。你想想看,再牛的语音算法,也得先让麦克风把声音收进来,对吧?我见过太多项目,算法调得漂漂亮亮,结果一上硬件,噪声大得离谱,或者驱动死活装不上。嗯,这一章就是帮你把这些坑提前填上。
2.1 麦克风阵列选型:别只看参数
麦克风阵列,说白了就是多个麦克风按特定方式排在一起。为什么不用单个?因为单个麦克风只能听,分不清声音从哪来。阵列能算方向,能降噪,能波束成形。我最早做智能音箱原型时,图便宜买了个单麦模块,结果在客厅里喊破嗓子它都听不见——后来换成4麦环形阵列,效果天差地别。
2.1.1 常见阵列类型
| 类型 | 麦克风数量 | 适用场景 | 典型芯片/模块 |
|---|---|---|---|
| 线性阵列 | 2~4 | 桌面、近场 | AC108、WM8960 |
| 环形阵列 | 4~8 | 智能音箱、机器人 | XMOS XVF3000、MSM261 |
| 球形阵列 | 8~32 | 会议系统、声源定位 | 定制方案 |
我个人习惯,做原型阶段首选环形4麦阵列。为什么?因为性价比最高。4个麦克风足够做基本的DOA(声源方向估计)和波束成形,而且市面上成熟的模块很多,比如ReSpeaker 4-Mic Array,直接USB接上就能用,省心。
2.1.2 接口选择:I2S vs PDM vs USB
这里有个关键点——麦克风阵列和主控之间怎么连?三种主流接口:
- I2S:最常用,支持立体声或TDM(时分复用)模式。适合树莓派、Jetson这类有I2S引脚的主板。注意,I2S只能传2个声道,要接4麦阵列得用TDM模式。
- PDM:单线传数据,但需要主控端做PDM转PCM的滤波。很多MEMS麦克风原生输出就是PDM。我建议新手别碰PDM,因为滤波算法调不好会有高频噪声。
- USB:最省事,即插即用。像ReSpeaker 4-Mic Array就是USB Audio Class设备,Linux内核直接识别。缺点是延迟稍高,但对语音交互来说完全够用。
2.2 树莓派环境搭建:从刷机到出声
树莓派是我最常用的原型平台。便宜、社区活跃、GPIO丰富。但要注意,树莓派的音频子系统有点「历史包袱」——它的板载3.5mm音频输出是用PWM模拟的,音质很差。所以我们做语音交互,一定要用USB声卡或I2S数字麦克风。
2.2.1 系统安装与基础配置
我个人习惯用Raspberry Pi OS Lite(无桌面版),因为省资源。刷机步骤就不啰嗦了,说几个关键点:
- 用Raspberry Pi Imager烧录系统时,提前开启SSH和WiFi配置。
- 系统启动后,先跑
sudo apt update && sudo apt upgrade -y。 - 安装必要工具:
sudo apt install git cmake python3-pip alsa-utils。
2.2.2 音频接口与驱动安装
以ReSpeaker 4-Mic Array为例,它用的是AC108音频ADC芯片。驱动安装分两步:
第一步:确认设备识别
lsusb
# 应该看到类似:ID 2886:0018 Seeed Technology Co., Ltd ReSpeaker 4 Mic Array
第二步:安装驱动
git clone https://github.com/respeaker/seeed-voicecard.git
cd seeed-voicecard
sudo ./install.sh
sudo reboot
重启后,用 arecord -l 查看录音设备。如果看到 card 1: seeed4micvoicec [seeed-4mic-voicecard],说明驱动装好了。
arecord -d 5 -f S16_LE -r 16000 test.wav 录5秒,然后用 aplay test.wav 播放。如果听到自己的声音,恭喜,硬件链路通了。
2.3 NVIDIA Jetson环境搭建:性能更强,坑也更多
Jetson系列(Nano、Xavier NX、Orin)是更强大的选择。如果你要做端侧推理,比如在设备上跑语音识别模型,Jetson比树莓派合适得多。但它的音频环境搭建比树莓派麻烦一些。
2.3.1 JetPack与音频驱动
Jetson的音频子系统基于Tegra SoC的AHUB(Audio Hub)。默认情况下,Jetson的板载音频接口是给HDMI用的,要接麦克风阵列,得用USB或I2S扩展板。
我建议用USB麦克风阵列,因为驱动最省事。Jetson的Linux内核默认支持USB Audio Class 2.0,插上就能用。但有个坑——Jetson的USB控制器有时会掉设备。我遇到过Jetson Nano插着USB麦克风,跑了一天后设备突然消失的情况。
/etc/udev/rules.d/ 下写一个udev规则,当USB音频设备断开时自动重启ALSA。或者干脆用带外部供电的USB Hub,别直接插Jetson的USB口。
2.3.2 I2S扩展板方案
如果你追求低延迟,可以用I2S扩展板。Jetson的40-pin GPIO上有I2S接口,但需要配置设备树。以ReSpeaker 4-Mic Array的I2S版本为例:
# 下载设备树覆盖文件
git clone https://github.com/respeaker/jetson_driver.git
cd jetson_driver
sudo ./install.sh
# 重启后检查
cat /proc/device-tree/name
# 应该输出:seeed-4mic-voicecard
这里要注意,Jetson的设备树编译工具链和树莓派不一样。如果你自己写设备树,得用 dtc -I dts -O dtb 编译,而且必须匹配内核版本。我刚开始搞的时候,因为内核版本没对齐,设备树加载失败,系统直接起不来——嗯,从那以后我学会了先备份原厂设备树。
2.4 音频接口与驱动安装:通用排查思路
不管用树莓派还是Jetson,音频驱动装不上时,按这个顺序排查:
- 硬件层面: 用
lsusb看USB设备是否枚举成功。如果设备都没出现,检查供电和接线。 - 内核层面:
dmesg | grep audio看内核日志。常见错误是「firmware not found」或「no configuration found」。 - ALSA层面:
aplay -l和arecord -l看声卡列表。如果设备出现但无法录音,可能是采样率或格式不匹配。 - 权限层面: 确保用户属于
audio组:sudo usermod -aG audio $USER。
2.5 知识体系总览
下面这张图,是我自己梳理的硬件选型与搭建流程。你可以把它当作一张「地图」,遇到问题时按图索骥。
这张图把整个硬件准备流程串起来了。你从左上角开始,先决定用哪种阵列,再选主控,再定接口,最后搭建环境并验证。每一步都有对应的知识点,遇到问题就回到对应的环节排查。
好了,硬件准备这部分就到这里。记住一句话:选型决定上限,搭建决定下限。硬件基础打牢了,后面的语音算法才能发挥出效果。