前段时间做了个带语音唤醒的蓝牙音箱,本来以为要上专门的语音芯片,结果发现用MCU就能搞定,今天来分享下经验。
核心思路其实很简单:用MCU的ADC采集麦克风信号,通过简单的阈值判断实现“唤醒词检测”。比如我们设定的唤醒词是“小爱同学”(当然不能直接用这个名字,会被法务部找上门),其实只需要检测声音的幅度和频率特征——当检测到持续的高幅度信号,且频率集中在人声范围(300Hz-3400Hz)时,就触发唤醒。
具体实现时,MCU的DMA派上了大用场。把ADC采集的数据通过DMA存到缓冲区,CPU只需要在后台处理,不会占用太多资源。为了提高准确性,我还加了个简单的FFT算法(用的是CMSIS-DSP库,效率高),实时分析音频信号的频谱,只有当频谱符合人声特征时才唤醒,避免了环境噪音的误触发。
|
|