富聪科技订单满¥1000免运费
关注我们:

给语音 AI 搭一条干净的音频前端

2026/6/8 11:30:00

语音模型只听得到它前端递过来的音频,前端丢掉或加进去的任何东西,都成了模型要绕着走的麻烦。前端把房间里的声音变成模型所期望格式的干净数据,再把模型的回答变回声音。它采到什么,定了模型能听懂多少,因为下游没有任何环节能还原一个麦克风从没拾到的字。

这条路有几段。麦克风把声音变成信号,一个编解码器或转换器把那信号变成数据,一个时钟让样本按模型指望的稳定速率流动。回来的方向上,一个放大器把数据变成足够驱动喇叭的功率。围着这一切,坐着一间真实房间里更难的问题:距离、噪声、还有设备自己的喇叭漏进自己的麦克风。

语音模型需要前端给的是什么

一个在语音上训练的模型,期望的是看起来像它训练数据的音频。也就是一个已知的采样率、一个语音远高于噪声的干净信号、以及一条没有丢样本空档的稳定流。一个交出不同采样率、更吵信号、或断断续续流的前端,递给模型的是它没被训练去读的音频,准确率会下滑,而没有任何单个器件算坏。

所以前端是从模型吃什么倒推着搭的。采样率设成模型要的,语音常常是一个不高的速率、而不是音乐要的高速率。通道数设成模型取一只麦克风还是好几只。信号从麦克风往后一路保持干净,因为模型可以重训、却没法凭空造出模拟路径已经扔掉的细节。

格式是一份合约、不是一种偏好。一个在某个采样率、某个通道数上训练的模型,就吃那一套,而一个递给它不同采样率或多一个通道的前端,逼出一次要么花算力、要么劣化音频的转换。对着模型把格式一次定死,在产品的整个寿命里、每一个样本上都省下一笔持续的开销。

把麦克风的信号收进来

小设备靠数字麦克风,其中很多说一种叫 PDM 的格式,一条密集的单比特样本流,在板上走线很便宜。一个想要标准音频数据的处理器没法直接读 PDM,所以得有东西把那条密集的比特流转成音频外设懂的 I2S 格式。

用 ADAU7002 把 PDM 麦克风转成 I2S,一颗小器件,拿麦克风的单比特流、把它滤成 I2S 总线上的标准音频样本。它让设计能把便宜的 PDM 麦克风配上一个只说 I2S 的处理器,还管着麦克风运行要的时钟。对一个带一两只数字麦克风的设备,它就是把它们的声音以链路后段所期望的形式送进处理器的那座桥。

麦克风本身定了一道桥抬不起来的地板。一只信噪比差的麦克风递过来一个带嘶声的信号,下游再怎么转换也洗不掉语音里的那层嘶声。麦克风先按它的噪声指标和灵敏度选,桥再去配它说的格式。

信号走多远,在被转换之前就已经要紧。一条 PDM 线是快速的数字边沿,在板上走太远,它既辐射噪声又拾噪声,所以麦克风坐在读它的桥或处理器近旁。麦克风线上的距离很少是免费的。

把声音变成数据的编解码器

带晶振的音频电路板
一块音频电路板,转换器、时钟和滤波都在这上面。

麦克风是模拟的、或设备还得放音时,一个编解码器把两个方向都做了。它带着把麦克风信号变成数据的模数转换器,和把数据变回喇叭或耳机信号的数模转换器,以及它们周围的增益和滤波。

用 SGTL5000 给语音设备做低功耗音频编解码,这颗器件从麦克风采集、经一个小输出回放,同时只吃很小的电流,适合一个又要听又要说的电池设备。它在一颗芯片里给语音前端两个方向、信号路径对语音够干净,又把功耗压得够低、给小电池预算留出余地。

一个编解码器还带着让设计省心的那些小便利:一路麦克风偏置供电、可编程增益让输入电平能在软件里设、以及在数据离开芯片前修整频段的滤波。够用编解码器、而不是一颗光秃秃的转换器,往往是把板上三四个器件拿掉的那个选择。

前端不止一路输入时

有些设备收不止一个来源,两只麦克风加一路线性输入,或处理器去合成的好几只麦克风。这要一颗输入通道不止一个的转换器、以及在它们之间混合或选择的路由。

用 TLV320AIC3204 给语音前端做多路输入采集,一颗带好几路输入通道、可编程路由、以及片上处理的编解码器,能在数据到处理器之前先滤波和混合。它适合一个从不止一只麦克风采声、或得在来源之间切换的设备,而它内建的处理把一部分清理从主处理器上卸下来。

多了输入也就多了要对齐的东西。这些通道共用转换器时钟、好让它们的样本对得齐,而一个去混合它们、或拿它们跑阵列的设备,靠的就是这份对齐稳得住。一颗把所有通道一起打时钟的多路输入编解码器,在干一份用几颗各自独立的转换器会很难的安静活。

让设备能出声

一个语音设备通常得回话,也就是把音频数据变成足够推动喇叭的功率。一个小小的线性电平输出自己驱不动喇叭,所以数据和纸盆之间坐着一个放大器。

用 MAX98357A 用 I2S 直接驱动小喇叭,一颗 D 类放大器,直接拿 I2S 音频数据、驱动喇叭、前面不用单独一颗转换器。它高效地把数字音频流变成喇叭功率,把热和电池消耗压低,还靠自己读 I2S 从板上省掉一个器件。对一个只需说提示和回答的设备,它是从数据到声音的一条直路。

放大器把自己的噪声朝前端送回来,因为一个 D 类输出为了高效、把它的电源以高频斩波。它的输出滤波和布局把那份开关挡在麦克风路径之外,这在一个边说边听的设备上加倍要紧。

隔着房间听

多支电容麦克风排列
几只麦克风组成的阵列,把说话人从房间里挑出来。

一个得隔着房间工作的语音模型,面对的问题比贴着麦克风的难。语音到得更轻、混着房间噪声和墙上的回声,而单只麦克风分不开说话人和房间的其余。一组麦克风能。

这组阵列怎么搭,是给远场语音布麦克风阵列要讲的。几只间隔已知距离的麦克风,让处理器比较一个声音到达每一只的时刻、把听的方向朝说话人转去、同时把房间其余压低,这就是波束成形。间隔定了阵列对哪些方向和频率处理得好,它得对着设备的尺寸和语音的频段来设计。

阵列对它身后的一切都要得更多。每只麦克风要自己一条干净的通道,这些通道得保持同步、好让时刻的比较成立,而合成它们的处理要有实时跑得动的算力。一个远场前端是一套系统、不是单个器件。

阵列还改变了噪声地板的含义。把几只麦克风合起来,能把说话人抬到房间之上几个分贝,这和一只更安静的麦克风买到的是同一种增益,所以阵列是抬高模型工作天花板的杠杆之一。它为这份增益付出的,是板面、配对的器件、以及设备每一刻听的时候都要稳定跑的算力。

音频时钟和搭它而行的数据

音频是一串按固定速率取的样本,而定那速率的时钟贯穿整个前端。如果时钟漂或抖,样本就到得早、到得晚、或干脆不到,模型就听到房间里从没有过的咔哒、变调或空档。一个干净的时钟,和一只干净的麦克风一样,是干净音频的一部分。

数据搭着几种格式之一而行。I2S 在几根线上载一两个通道,适合大多数简单设备。PDM 载一只数字麦克风产出的那条密集单比特流。TDM 靠给每个通道一个时隙、在一条总线上载许多通道,这是一组麦克风不用一通道一根线就到处理器的办法。前端是围着器件和处理器共有的那种格式搭的。

一个主时钟把它绑到一起。许多编解码器和桥要一个高频主时钟、它是采样率的一个已知倍数,采样率时钟和位时钟都从它派生,好让每个器件用同一种方式数样本。当两个器件跑在相近、却没锁在一起的时钟上,它们的样本计数会在几分钟里漂开、音频就滑位,这就是为什么前端跑在一个时钟源上、而不是好几个。

那个时钟里的抖动是它自己一笔安静的税。一个采样时钟在时间上游移、哪怕它的平均速率是对的,也会把转换器的时刻抹糊、给采到的音频加上噪声,在频段更高的部分最坏。一个干净、低抖动的时钟,是前端模拟质量的一部分、不只是它数字上的正确。

格式和速率在任何器件被选之前就跨器件谈妥,因为一座麦克风桥、一颗编解码器、和一个处理器在格式或时钟上不一致,根本就不通话。

把模拟音频路径保持安静

麦克风到转换器之间那一段是模拟的,而模拟正是一块板的电气噪声钻进音频的地方。一个在近旁开关的数字处理器、一个带纹波的供电、一根贴着麦克风线走的时钟走线,每一个都能在信号被数字化之前、往里耦进一阵嗡声或嘶声,而一旦进去了,它就成了模型听到的音频的一部分。

把它保持安静是布局的活。麦克风和它的模拟线远离吵闹的数字和电源区,模拟地保持干净、在一个考量过的点上和其余相接,转换器的基准和供电被滤过、好让它们的噪声不骑进样本里。一只数字麦克风把转换器搬进了麦克风自己里、送出数字数据,靠把模拟路径保持在几毫米长,绕开了这里的大半,这也是小设备偏爱它们的部分原因。

机械噪声也算数。一个麦克风口会耦进外壳带的任何振动,所以一个风扇、一个喇叭、或一次按键能经结构、而不是经空气到达它,所以安装和开口的设计要像挡电气噪声一样把那挡在外面。

供电是干净路径的另一半。模拟器件要一个稳定、没有数字侧那种开关纹波的供电,常常是它们自己一个小的专用稳压器或一条滤过的分支,因为一个转换器只和它所对照测量的基准与供电一样安静。

前端定了模型能听到的上限

想一个语音前端,最有用的方式是:它设了一道模型永远升不过去的天花板,因为模型工作在它被给的信号上、没法还原前端已经丢掉的东西。从麦克风到数据流的每一段都加上它自己的噪声、又扔掉一点信号,而一旦语音掉进了噪声地板,再多的模型聪明也没法有把握地把它捞回来。一只噪声指标差的麦克风,在每个字底下垫一层嘶声。麦克风到转换器之间一条廉价的模拟路径,加上它自己的噪声、又从板的其余拾来干扰。一个跑在太少位数、或带一个吵基准的转换器,把语音安静的部分量化成一团糊。这每一样都是在模型见到一个样本之前就发生的损失,而模型继承的,是它们的总和、是它得听在其上的那道地板。这就是为什么一个在噪声里挣扎的语音产品,往往根本不是靠一个更好的模型修好的,而是靠一条更安静的模拟路径、一只更好的麦克风、或一组把语音抬到房间之上的阵列。前端和模型是一套系统,而准确率上最便宜的那一份提升,常常是在音频被数字化之前、在硬件里做出来的,因为一个干净的信号对模型的要求,永远比一个脏的少。一个把全部力气花在模型、一点没花在前端的团队,搭出来的系统会撞上一堵模型爬不过的墙,而那堵墙,是在没人去调的模拟路径里砌起来的。

接下来该做的,是把噪声预算花在它最划得来的地方。一只更安静的麦克风、转换器前面一条更干净的路径,抬高的是模型工作于其上的整道地板,它们帮的是每一个字,而一次模型微调只帮它被调过的那些情形。一个去量它采到音频的信噪比、而不只量它模型准确率的团队,会找到光看准确率这个数藏起来的那些便宜的赢。

干净进,干净出。脏的进来,还是脏的。

当喇叭漏进麦克风

一个又听又说的设备,身体里就长着一个问题。它喇叭的声音到达它自己的麦克风,又响又近,而那回声压在说话人正说的话之上。一个想在设备说话时听清一条命令的模型,听到的大半是它自己。

解法是声学回声消除,它靠一个设备知道的事实:它手里有它正在放的那段确切音频。有了这个参考,处理器能给喇叭的声音怎么到达麦克风建个模、再从麦克风拾到的里减去它的一个估计,把说话人的声音留得更接近干净。这个估计永远不完美,因为房间会改变声音怎么传,所以消除器一边跑一边自适应。

前端得撑得起这个。回放信号和麦克风采集得共用一个时钟和一个已知的时序,好让消除器能把它们对齐,而一个让这两个各跑各的前端,会把消除变难得多。从一开始就为回声消除而设计、带一个共用时钟和一个干净的参考,才让一个设备能在说话时接一条命令。

难的情形是双讲,设备和说话人同时出声。一个调得太狠的消除器会啃进说话人的话,一个调得太软的又放回声过去。把那个平衡调好,再加上一个干净的参考和稳定的时序,是一个能被打断的设备、和一个得说完才能听的设备之间的区别。

在功耗预算里一直听

一个语音设备常常得一直听、等一个唤醒词,而一个电池设备没法在等的时候、把它整条音频链和它的模型都全功率跑着。办法是分级地听,用一个小小的常开级、盯着一个值得醒来的声音。

那一级是故意做得便宜的。一条低功耗路径让一只麦克风和一个小检测器跑着,只听唤醒词、或只听有没有语音,而编解码器、阵列、和模型都睡着。当那个小级听到点什么,它叫醒链路的其余、去把命令完整地采下来、听懂。设备一生的绝大部分时间花在那个便宜的级里,而那个费钱的级只在它被需要的那几秒跑。

这塑造了器件。常开路径要一只麦克风和一个跑在小电流上的转换器,而唤醒级要小到能跑在一个低功耗核上、而不是主处理器上。前端被布置成那座常开的岛能醒着、而它周围的一切都睡着,这既是一个功耗设计、也是一个音频设计。

这两级看音频也不一样。常开级只要够判断一个声音可能是语音的质量,所以它能用一只麦克风、跑在一个低速率上,而唤醒之后跑的那个完整级,要的是模型被训练时那种干净、满速率、多通道的采集。把便宜的级做便宜、把完整的级做干净,让电池和准确率都待在它们该待的地方。

唤醒级还决定设备给人的感觉。太急,它每一声响动都醒、把电池耗干;太谨慎,它又漏掉用户。那个小级用的阈值,是对着设备所住的房间调的,这就是为什么一个给安静办公室的设备、和一个给车间的设备,设得不一样。

一段对话能容忍的延迟

一次口头交流有它的节奏,而一个回答太慢的设备、哪怕答得对、也让人觉得坏了。用户感到的那点延迟,是整条路的总和:采到音频、缓冲它、跑模型、放出回答。前端占着这里头的头一段和末一段,而为抹平这条流加上的缓冲,是这段对话要付的延迟。

所以缓冲被定得只够把流稳住、不再大,因为每多扣下一块样本,就是在模型见到那些字之前多加的时间、是在用户听到回答之前多加的时间。一个为一来一回的对话搭的前端,把它的缓冲保持得紧,而一个只为录音搭的,可以缓冲得深。

延迟还藏在唤醒路径里。一个得唤醒它整条链、给编解码器上电、把它的时钟稳下来、才开始采命令的设备,会在它还在醒的时候、把头一个字切掉。让常开级一直采进一个短缓冲、好让完整链起来时头一个字已经存下了,才是阻止设备漏掉它被问的那句话开头的办法。

搭语音前端常见的问题

为什么要把 PDM 麦克风转成 I2S?

因为多数处理器和音频外设读的是 I2S、不是一只数字麦克风产出的那条密集单比特 PDM 流。一座桥把 PDM 滤成 I2S 上的标准样本,让设计能把便宜的 PDM 麦克风配上一个只说 I2S 的处理器。

我需要一个编解码器,还是一只麦克风加一个放大器就够?

设备既采又放音时,编解码器才占得住位,因为它在一个器件里带着两个转换器、和它们周围的增益与滤波。一个只采集的设备可以用一只麦克风加一个转换器,一条只回放的路径可以用一个直接读 I2S 的放大器。

麦克风阵列什么时候比单只麦克风强?

当说话人隔着房间、而不是贴着设备时。阵列让前端朝说话人转、把房间噪声和回声压下去,这是单只麦克风做不到的。贴着说的设备很少需要它,而阵列要加上通道、时钟和处理。

为什么我的语音模型在吵的房间里更差?

因为前端设了一道模型升不过去的天花板。一旦语音掉进噪声地板,模型就没法有把握地把它捞回来。提升通常来自一条更安静的模拟路径、一只更好的麦克风、或一组阵列,而不是来自一个更大的模型。

为什么设备在说话时听错命令?

它自己的喇叭漏进它自己的麦克风,所以麦克风听到的大半是设备自己。声学回声消除用已知的回放信号去减掉那回声,它要回放和采集共用一个时钟和时序、好让两者能被对齐。

前端该跑在什么采样率?

模型期望的那个,语音通常是一个不高的速率、而不是音乐用的高速率。跑得更快,是把功耗和数据花在语音不带的细节上,而跑在错的速率上,是递给模型它没被训练过的音频。

按次序搭前端

这个次序让各段不互相别着劲。从模型起步,采样率、通道数、它期望的格式。按噪声指标选麦克风,因为它定了地板。选把麦克风信号以那个格式收进来的桥或编解码器,以及把回答送出去的放大器。判断房间要不要阵列,要就把间隔、配对的通道、和处理一起设计。整条链跑在一个时钟上。从一开始就为回声消除和一个常开级而设计,因为两者都难在后头补。

贯穿其中的线是:前端定了模型能听到什么,所以硬件能交出的最干净信号,是这套设计能给模型的最有用的东西。把它做对,模型在一间真实房间里能工作。做错了,模型就被要求去听懂一段从一开始就没带上那些字的音频。

相关信息

富聪科技

搜索

富聪科技

产品

富聪科技

电话

富聪科技

用户