简介:面向麦克风阵列研发、测试与硬件质量验证场景的《麦克风阵列音频检查方法与标准》,适合声学工程师、硬件测试人员及智能音箱、会议系统、语音识别设备开发者对照使用,重点解决研发阶段音频评测项目不清、判据不统一的问题。压缩包仅含1个docx文档,约1.81MB,内容按裸板测试与整机测试两阶段组织。已有793人学习。文档梳理通道相位一致性、长时录音完整性、麦克风顺序、通道幅值一致性(差异≤3dB)、音频幅度、总谐波失真、信噪比、直流偏置、回采通道电噪声、恒频干扰、抗混叠、通道相对延时、结构共振/异音及麦克风气密性等项目,并给出测试音源、验收阈值与Audacity分析思路,便于搭建检查清单、定位音频异常并完善验收流程。
1. 录音能听见声音,却偏偏过不了验收:问题往往出在数据本身
麦克风阵列的音频检查方法与标准,最容易出错的地方是数据已经坏了,人耳却听不出来。手机外放一段音乐,录音回放对得上口型,你会觉得一切正常;可把同一段 40 分钟录音拖进频谱图,中间三道整齐的空白断口摆在那里,前面所有测试结果当场作废。更麻烦的是另一类:通道顺序接反、某一通道幅度低 4dB、MIC 比回路早 2ms——这些在主观试听里几乎无感,到了唤醒率和 AEC 效果上却全暴露出来。这正是裸板测试和整机测试要分两段做的原因:裸板先证明数据是干净、可信的,整机再谈声学指标。刚接手音频调试的硬件工程师、做声学评测的测试人员、被唤醒率问题反复折磨的嵌入式开发者,都适合顺着这条链往下看。
2. 裸板第一关:40 分钟录音丢帧、通道顺序错乱与同步性异常
裸板阶段的四个测试项目看着不起眼,却是整机阶段所有结论的地基:通道相位一致性、长时录音数据完整性、麦克风顺序、通道幅值一致性。地基塌了,后面测出来的 THD、SNR、延时全是假的。我一般先跑长时录音,再验通道顺序,最后看同步性,顺序反了会浪费大量时间——因为你分不清通道差异到底是硬件问题还是数据缺帧造成的问题。
2.1 40 分钟录音丢帧:频谱图上的空白断口
丢帧的典型表现是长时录音里出现一段严格为 0 的数据,长度几十毫秒到几百毫秒不等,在频谱图上表现为一条竖直的空白带。一旦发生丢帧,通道间的相对延时就会开始漂移,你后面算出来的 ΔT 根本不能用来判断采样晶振偏移。行业里常见的验收流程是这样:先在安静环境里本机播放音频同时录音不少于 5 分钟,再用外部声源正对 DUT 麦克风阵列中心循环播放 30 分钟以上的测试音,DUT 和采集板同时录音,总时长不低于 40 分钟;然后每隔 5 分钟取一段,比较 DUT 通道与采集板的相对延时 ΔT1、DUT 各通道之间的相对延时 ΔT2,只要 30 分钟内这两个值保持恒定,才算采样时钟稳定。
肉眼数断口不可靠,我习惯用脚本先扫一遍,把可疑时间段打印出来再去频谱图上核对:
import numpy as np import soundfile as sf # DUT 直接导出的原始多通道录音;always_2d=True 让单通道也按二维处理 data, sr = sf.read("dut_40min.wav", always_2d=True) print(f"采样率 {sr} Hz,时长 {len(data)/sr/60:.1f} min,通道数 {data.shape[1]}") hop = int(sr * 0.01) # 10ms 一帧,比常见丢包粒度更细 n = len(data) // hop * hop # 每帧每通道取峰值,丢帧处该帧峰值严格为 0 peak = np.abs(data[:n]).reshape(-1, hop, data.shape[1]).max(axis=1) for ch in range(data.shape[1]): zero = (peak[:, ch] == 0).astype(np.int8) # 只有严格 0 才算断口 edges = np.diff(np.concatenate(([0], zero, [0]))) starts, ends = np.flatnonzero(edges == 1), np.flatnonzero(edges == -1) # 连续 5 帧(50ms)以上才算一次真丢帧,避免正常静音段误报 gaps = [(round(s * 0.01, 2), round(e * 0.01, 2)) for s, e in zip(starts, ends) if e - s >= 5] print(f"通道 {ch}: {len(gaps)} 处断口(>=50ms),前几处 {gaps[:5]}")hop决定时间分辨率,10ms 足够定位到一次传输层的丢包;阈值e - s >= 5是关键参数,调小会把正常静音段也算成丢帧,调大会漏掉短促的断点。脚本报出断口之后,再去频谱图确认那一段是不是真的没有能量,两边对得上才能下结论。丢帧的根因通常集中在几处:采样晶振偏移导致采样率对不上、I2S 或 USB 传输中断、录音缓冲区溢出、存储写入速度跟不上。排查时先确认录音链路有没有做软件重采样,再看缓冲区大小和写入节奏,最后才怀疑晶振。务必在基本录音功能确认通过之后再寄样,否则评审侧拿到的第一份数据就是废的,来回一趟的时间成本远高于自己多测十分钟。
2.2 通道顺序错乱:敲击法怎么敲、结果怎么读
通道顺序只有 4 麦及以上的阵列才需要验证,2 麦阵列没有顺序要求。判断规则很明确:线性阵列要求从左到右,环形阵列要求逆时针,对着 MIC 收音孔从任意一颗 MIC 开始轻轻敲击,看录音里脉冲出现的先后顺序。顺序反了不会报错,但波束成形和后端定位算法会算到完全错误的方向上去,表现为“人明明在左边,设备却转向右边”这种玄学现象。
手动听太慢,直接按脉冲到达时间排序更省事:
import numpy as np, soundfile as sf data, sr = sf.read("knock_4mic.wav", always_2d=True) win = int(sr * 0.005) # 5ms 平滑包络,抑制敲击瞬间的毛刺 env = np.apply_along_axis(lambda x: np.convolve(x, np.ones(win) / win, mode="same"), 0, np.abs(data)) first = [] for ch in range(data.shape[1]): thr = env[:, ch].max() * 0.3 # 取峰值 30% 作为到达判据 idx = np.flatnonzero(env[:, ch] > thr) first.append(idx[0] / sr if len(idx) else -1) print("各通道首个敲击到达时间(s):", [round(t, 4) for t in first]) print("按到达时间排序的通道号:", np.argsort(first))thr取 0.3 是个经验值,环境噪声大时可以提到 0.5;排序结果与 PCB 上的实际物理位置一一对照,就能判断是通道映射表写错,还是硬件走线交叉。这里翻车最多的情况是软件侧的通道映射表和硬件丝印不一致,改完映射表记得重新敲一遍确认,别只改代码不复测。
2.3 通道同步性:1kHz 单频电信号看相位差
通道不同步在频谱图上是看不出来的,必须用 1kHz 单频电信号直接灌进电路板的模拟输入,相位差一眼就能看出来:某个通道和其他通道的波形明显错位,问题就在这个通道的采样链路上。这种电信号注入方式只适用于模拟麦克风,数字麦克风和整机带结构的同步性验证要在消声室里完成,因为数字麦的信号在进芯片之前就已经是数字量,你没法在中途灌信号。
要量化相位差,用互相关算样本偏移比肉眼比对可靠:
import numpy as np from scipy.signal import correlate def ch_lag(a, b, sr): """返回 b 相对 a 的延时(毫秒),正值表示 b 滞后""" c = correlate(a - a.mean(), b - b.mean(), mode="full") lag = c.argmax() - (len(b) - 1) # 转成有符号样本偏移 return lag / sr * 1000 sr = 48000 # data 为 1kHz 电信号下的多通道录音 for ch in range(1, data.shape[1]): print(f"通道 {ch} 相对通道 0 的延时: {ch_lag(data[:, 0], data[:, ch], sr):.3f} ms")1kHz 一个周期是 1ms,同批通道之间的偏移应该远小于这个量级;如果某个通道稳定偏出几十微秒以上,基本可以判定是采样时序或者通道配置问题,而不是麦克风本身的差异。同步性不达标时整机的阵列算法会直接失效,这类问题在裸板阶段修成本最低。
3. 幅值三件套:63dBC 下幅度不达标、通道差 3dB、直流偏置超标
幅值类问题是音频调试里最高频的一类,因为它同时受灵敏度、模拟增益、结构密封和测量方法影响,任何一个环节错一点,数字就对不上。更坑的是,很多人测幅值时连高通滤波都没做,直流分量和底噪一起进了 RMS,测出来的数看着“差不多”,其实根本不达标。
3.1 音频幅度不达标:先分清模拟麦、数字麦和回采通道
标准流程是扬声器距离 DUT 50cm,播放mic_amplitude.wav,调音量让 MIC 处的声压级达到 63dBC,此时有 AEC 的录音幅值应该在 0.004 到 0.005 之间。如果是 -26dBFS 灵敏度的数字麦,对应幅值约 0.0014,其他灵敏度自己按比例换算;模拟麦和数字麦在无 AEC 场景下的标准幅值是 0.03,穿戴类项目因为结构和佩戴方式特殊,幅值要单独处理。关键约束只有一条:数字增益始终为 0,也就是不要做任何数字放大,幅值不够就靠调模拟增益补,主控芯片的录音增益寄存器和指令手册要提前翻熟。
import numpy as np, soundfile as sf from scipy.signal import butter, sosfilt data, sr = sf.read("mic_amplitude_63dBC.wav", always_2d=True) sos = butter(4, 100, "hp", fs=sr, output="sos") # 100Hz 高通,等价于 Audacity 的 High Pass Filter seg = sosfilt(sos, data[int(sr * 1):int(sr * 3), 0]) # 跳过起播 1s,取 2s 稳定段 print(f"peak={np.abs(seg).max():.4f} rms={np.sqrt((seg ** 2).mean()):.4f}")sosfilt之前必须截止到 100Hz 以上把直流和低频底噪去掉,否则直流偏置会被算进峰值;取 2s 稳定段是为了避开播放起始的淡入。算出来的数值和 0.004~0.005 比,偏低就查模拟增益和麦克风灵敏度配置,偏高先怀疑增益设错或者声压级没校准到位。用 Audacity 手工看的时候同理,先做“效果—High Pass Filter”再去读幅值,这一步漏掉的人不在少数。
3.2 通道幅值一致性超 3dB:单频点对照怎么找
一致性测试用76dBC_sweep.wav,DUT 按实际使用场景摆放,外部声源放在距拾音孔 0.5m 处播放扫频,录完之后多路麦克风的包络形状应该基本一致。真正的判据是逐频点比较:挑一个幅值差异明显的单频段,打开频谱用“分析—对照”,若差的绝对值不超过 3dB,这个频点的一致性就算过关,依此类推把所有频点过一遍。超过 3dB 的频点就是问题所在。
import numpy as np def level_at(x, sr, f0, half=20): """取 f0±half Hz 内最大谱峰的 dB 值""" spec = np.abs(np.fft.rfft(x * np.hanning(len(x)))) freqs = np.fft.rfftfreq(len(x), 1 / sr) m = (freqs > f0 - half) & (freqs < f0 + half) return 20 * np.log10(spec[m].max() + 1e-12) for f0 in [200, 500, 1000, 2000, 4000, 6000]: vals = [level_at(data[:, ch], sr, f0) for ch in range(data.shape[1])] diff = max(vals) - min(vals) flag = "超标" if diff > 3 else "OK" print(f"{f0} Hz: 差值 {diff:.2f} dB {flag}")half=20是搜索带宽,扫频信号的频点在快速变化,带宽给太窄会采到旁瓣、给太宽会把邻近频点混进来,20Hz 在 1/3 倍频程附近比较稳。定位到超标频点之后,排查顺序是:先看 MIC 密封件的松紧和是否压紧,密封不良会造成低频段一致性变差;密封没问题再查元器件本身的灵敏度分档和焊接,这两处是批量一致性问题的主因。别一上来就怀疑算法或者软件增益表,先把物理层排除干净。
3.3 直流偏置超标:1Hz 低通滤出来看
分析直流偏置时为了排除噪声干扰,要用截止频率 1Hz 的低通滤波器把信号滤一遍。麦克风通道的判断标准:模拟麦通路的直流能量不大于 MIC 幅值的 1/3,按 0.005 的幅值算就是 0.0017 左右;数字麦通路应该小于 0.0015 的 1/3;回采通道的直流偏置要求更严,要小于 0.5%。
from scipy.signal import butter, sosfilt import numpy as np sos = butter(2, 1, "lp", fs=sr, output="sos") # 1Hz 低通,只留直流 dc = sosfilt(sos, data[:, 0]) print(f"直流均值 {dc.mean():.6f},相对峰值占比 {abs(dc.mean()) / np.abs(data[:, 0]).max():.2%}")二阶 1Hz 低通的过渡带比较缓,做量化判断够用;如果只想验证量级,直接取均值也接近。直流偏置超标会让有效动态范围变小,严重时 AEC 收敛变慢,通常的修法是查 ADC 配置、麦克风偏置电压和耦合电容,硬件层面能解决就不要指望软件去直流。
4. 谐波与杂散:THD 超标、-90dB 恒频干扰、7kHz 抗混叠折痕
这一类问题的共同点是“耳朵听不出来、算法很敏感”。THD 超标会影响唤醒率,恒频干扰会在频谱上立一根不动的尖峰,抗混叠没做好则会把 8kHz 以上的能量折叠回带内,三者在频谱图上长得完全不一样,混淆了就会往错误的方向改。
4.1 THD 超标:先分清是基频太小还是真失真
自播自录测 THD 的流程有讲究:先本机播放校准音,调整音量键让距离 DUT 麦克风处的声压级达到本机场景的验收音量(dBA),然后保持音量不变,再播76dBC_sweep.wav录一遍,算 MIC 所录音频的总谐波失真。指标分远近场两套:远场(≥3 米)要求 100~200Hz 的 THD ≤8%(即 ≤-22.0dB)、200~400Hz ≤5%(≤-26.0dB)、400Hz~8kHz ≤3%(≤-30.5dB);近场(≤1 米)放宽到 100~200Hz ≤20%(≤-14.0dB)、200~400Hz ≤14%(≤-17.0dB)、400Hz~8kHz ≤8%(≤-22.0dB)。
换算公式很简单:THD(%) = 10^(∆/20) × 100,∆ 是谐波相对基频的 dB 差。举个原文里的例子,基频 270Hz 幅值 -16dB,第二峰值是三次谐波 810Hz、幅值 -50dB,∆=-34dB,算出 THD 约 2.0%,达标;另一个点基频 265Hz 幅值 -27.6dB,第二峰值 795Hz 幅值 -36dB,∆=-8.4dB,明显超标。
import numpy as np def thd_percent(x, sr, f0): spec = np.abs(np.fft.rfft(x * np.hanning(len(x)))) / len(x) freqs = np.fft.rfftfreq(len(x), 1 / sr) def peak(f, half=10): m = (freqs > f - half) & (freqs < f + half) return spec[m].max() base = peak(f0) harm = max(peak(f0 * k) for k in range(2, 9)) # 2~8 次谐波中的最高峰 delta_db = 20 * np.log10(harm / base) # 负值,越负越好 return delta_db, 10 ** (delta_db / 20) * 100 for f0 in [150, 270, 400, 800, 1500]: d, p = thd_percent(seg, sr, f0) print(f"{f0} Hz: ∆={d:.1f} dB, THD={p:.1f}%")f0 * k覆盖 2 到 8 次谐波,half=10是峰值搜索带宽,频点密集的扫频信号要适当收窄。这里有个很关键的判断陷阱:如果基频能量本身就很小,算出来的 THD 会虚高。遇到这种情况,要拿同一次录音里 THD 达标的相邻频点来比谐波能量的绝对值——比如 300Hz 报超标,而 400Hz 基频 -20dB、二次谐波 -50dB,300Hz 基频 -40dB、二次谐波也是 -50dB,那 300Hz 的绝对谐波能量其实没变大,是基频太小导致比值超标,这种情况不该判不合格。另外,MIC 音频出现大量谐波时,第一嫌疑是 SPK 本身的 THD 超标(选型阶段就要卡死),第二嫌疑是 SPK 腔体带动结构振动,别一上来就改麦克风。回采通道如果接在功放后端,谐波多就先查功放失真;参考信号带一点谐波(THD ≤3%)对算法影响不大,但主观音效会受影响。
4.2 恒频干扰:-90dB 以下的尖峰可以放过
判断方法很直接:安静环境下看各通道录音的频谱,固定频率上立着一根不随内容变化的尖峰就是恒频干扰。标准是——在信号幅度满足要求的前提下,谐波恒频在 -90dB 以下可以接受,由外部噪声导致的恒频要单独评估,不能一刀切判不合格。
排查从电源入手最有效:先看供电是否稳定、干净,把 MIC 阵列供电换成 LDO 看尖峰是否消失,再看 MIC 信号走线有没有和其他电信号串扰。常见的串扰源是 LED 驱动和触控 IC,这两种都是周期性开关信号,很容易耦合到高阻的麦克风输入上。改板之前,先把可疑电路逐个断电对比频谱,确认是哪个源,比盲改布线省事得多。
4.3 抗混叠:7kHz 折痕 -40dB、6kHz 折痕 -70dB
麦克风通道和回采通道都需要做低通滤波,过滤高于 8kHz 的信号,否则 8kHz 以上的能量会折叠回带内。用自播自录1_15kHz.wav来验:外部播放 50cm 处 63dBC,频谱采样点设为 1024,先看 6kHz~7kHz 的对照能量值,再在 7kHz 处找折痕,用折痕处的值减去对照值,要求小于 -40dB;6kHz 折痕处要求小于 -70dB。没做低通滤波的频谱会出现明显的镜像折叠,做了之后折痕会落到标准线以下。
这一项还会连带影响唤醒率,抗混叠不达标对唤醒率的影响幅度可以按评审侧的评估口径去看,但排查顺序永远是先补滤波器再谈效果。软件侧确认采样率配置和抗混叠滤波器系数,硬件侧确认模拟前端有没有低通网络,两边都得对。
5. 整机结构:延时超过 20ms、共振高阶谐波、气密性压不下去
到了整机阶段,问题从电路转向结构和装配。这三个项目的共同点是:数据本身没坏,是物理形态变了导致的性能劣化,改起来成本高,所以必须一次测准。
5.1 MIC 与回路延时超 20ms:符号方向比数值更致命
麦克风相对回采通道的音频延时要求在 0~20ms 之间,而且麦克风信号不能早于回路信号,否则违反因果性,AEC 算法没法用。测试直接复用 THD 和回路幅值测试的那两段音频就行,不用额外准备素材。20ms 以内属于算法允许的误差;到了 25ms 左右,AEC 做出来的效果就明显不是最优了。
import numpy as np from scipy.signal import correlate def mic_ref_delay(mic, ref, sr): """返回 mic 相对 ref 的延时(ms),正值表示 mic 滞后于 ref""" n = min(len(mic), len(ref)) c = correlate(mic[:n] - mic[:n].mean(), ref[:n] - ref[:n].mean(), mode="full") lag = c.argmax() - (n - 1) return lag / sr * 1000 d = mic_ref_delay(mic_ch, ref_ch, sr) print(f"MIC 相对回路延时 {d:.2f} ms", "违反因果性" if d < 0 else ("超标" if d > 20 else "OK"))互相关的结果符号一定要盯住:负值意味着 MIC 比回路还早收到声音,这种情况优先查回路链路上的缓冲、功放前级和处理延迟是不是配多了。延时随距离变化是正常的物理现象,但同一位置反复测出来数值跳变,就要怀疑录音不同步或者前面 2.1 的丢帧没排干净。
5.2 结构共振、震动与异音:三阶与四阶谐波分得开
共振的表现是:缺乏有效减震措施的结构,在特定频段通道幅度远大于没有共振的通道。震动和异音更像隐藏问题——内部器件松动、碰撞、摩擦时,震动会引起明显的四阶及以上高阶谐波,而发生震动的频段谐波主要还是喇叭的二、三次谐波,高阶能量很弱;异音通常是打线、结构件碰撞,在频谱上呈宽频噪声。
判断标准要在 MIC 通道幅度达标的前提下来做:模拟麦幅度不放大,数字麦放大 11.5dB,然后看频谱,二、三次谐波能量不超过 -60dB,四阶以上不超过 -75dB。解决方向分两类:震动靠加强内部器件减震(泡棉、硅胶、橡胶)加 EQ 调节;异音靠加强减震、增大结构内部间隙,这类问题相对容易做到完全避免。
这里有个反复踩的坑:THD 和共振异音都涉及 EQ 调节,但 EQ 只能针对超标频段。如果把调节频段放得太宽,整体音量被压下去,测试时为了达到指定音量又得增大播放功率,结果原先达标的其他频段反而超标。调 EQ 之前先把超标频点标出来,只动那几个点。
5.3 气密性不达标:密封前后差不到 15dB
麦克风收音通道密封性没做好,音箱、电视类产品会直接影响唤醒打断效果,油烟机、扫地机这类强自噪产品则会影响使用场景下的唤醒和识别性能。但这一项不是所有产品都要做:如果麦克风离扬声器、自噪声源在 0.5 米以上,或者麦克风模组和扬声器模组处于完全独立的不同腔体内,气密性不作要求。
测试方法是:扬声器距 DUT 50cm,让 MIC 处达到 63dBC,循环播放76dBC_sweep.wav,先录多个扫频周期;再用阻尼、橡皮泥一类材料把麦克风收音孔封住,继续录多个周期;要求每个频点密封前后的能量差在 15dB 以上。密封后幅度掉到底噪水平就是达标,密封后几乎没变化就是漏气。
import numpy as np, soundfile as sf def band_energy(x, sr, f0, half=50): spec = np.abs(np.fft.rfft(x * np.hanning(len(x)))) freqs = np.fft.rfftfreq(len(x), 1 / sr) m = (freqs > f0 - half) & (freqs < f0 + half) return 20 * np.log10(spec[m].max() + 1e-12) before, sr = sf.read("sweep_open.wav", always_2d=True) after, _ = sf.read("sweep_sealed.wav", always_2d=True) for f0 in [500, 1000, 2000, 4000]: a = band_energy(before[:, 0], sr, f0) b = band_energy(after[:, 0], sr, f0) print(f"{f0} Hz: 密封前 {a:.1f} dB,密封后 {b:.1f} dB,差 {a - b:.1f} dB", "OK" if a - b >= 15 else "漏气")逐频点看比只看总值有用,因为漏气往往只发生在低频段。密封不达标的解决方向:先确认收音通道有没有密封层,不建议只靠打胶做密封;再看密封层的侧向厚度是不是偏薄;最后确认材质,硅胶、橡胶合适,开孔率高的泡棉不行。
6. 五条踩坑记录与一套从现象到频段的定位顺序
6.1 五条反复翻车的踩坑记录
现象:幅值算出来比标准高不少,调低模拟增益后反而不合格。原因:没做高通滤波,直流分量和底噪一起进了 RMS。解决:先用 100Hz 高通或 Audacity 的 High Pass Filter 处理再读数,所有幅值类测试统一加这一步。
现象:EQ 调完这一版,原来达标的频段又超了。原因:EQ 调节频段放太宽,整体音量被拉低,为凑音量又加大播放功率。解决:只对超标的那几个频点做窄带衰减,调完重新全频段复测一遍。
现象:幅度怎么调都上不去,有人直接在软件里加数字增益。原因:把数字放大当成了灵敏度补偿。解决:数字增益始终为 0,幅值不足靠模拟增益和麦克风灵敏度选型解决,数字放大只会把噪声一起放大。
现象:气密性怎么测都差不到 15dB。原因:用打胶方式做密封,胶层本身透声,或者密封层侧向厚度太薄。解决:换硅胶、橡胶类密封层,保证侧向厚度,别用开孔率高的泡棉。临时验证也要用橡皮泥压实,不能随手糊一圈。
现象:裸板数据一切正常,整机测出来全乱。原因:样机没做基本录音功能确认就寄出,丢帧问题一路带到评审。解决:寄样前必做 40 分钟长时录音,确认不丢帧、采样晶振偏移小,基本要求不满足绝不寄。
6.2 从现象到频段:一张固定的排查顺序
拿到一份异常录音,我不会漫无目的地翻频谱,而是按现象反推测试项。下面这张表是我现在每次都照着走的顺序,先排数据完整性,再排电路,最后排结构。
| 现象 | 先查什么 | 关键阈值 |
|---|---|---|
| 频谱上有竖直空白带 | 长时录音完整性、相对延时是否漂移 | 无 ≥50ms 断口,ΔT 恒定 |
| 敲击脉冲顺序与物理位置不符 | 通道映射表、硬件走线 | 线性从左到右、环形逆时针 |
| 某通道相位明显错位 | 1kHz 电信号注入,通道同步性 | 通道间偏移远小于 1ms |
| 整体幅值偏低 | 模拟增益、麦克风灵敏度 | AEC 通路 0.004~0.005 |
| 单一频点通道差大 | MIC 密封件松紧、元器件分档、焊接 | 单频点差值 ≤3dB |
| 低频 THD 高但谐波绝对值不大 | 基频能量、SPK 选型、腔体振动 | 远场 100~200Hz ≤8% |
| 频谱上固定频率尖峰 | 供电、LDO、LED 与触控 IC 串扰 | 恒频 ≤-90dB |
| 高频出现镜像折叠 | 抗混叠低通、采样率配置 | 7kHz 折痕 ≤-40dB |
| MIC 比回路还早 | 回路链路缓冲与处理延迟 | 0~20ms 且不早于回路 |
| 密封后能量几乎不降 | 密封层材质、侧向厚度 | 每频点差 ≥15dB |
用这张表的时候有个技巧:先看频谱整体形状,再看单频点数值。整体形状异常基本都是数据完整性和结构问题,单频点异常才落到电路和元器件。这样排能少走很多弯路——我见过太多人一上来就盯着某个频点的数字改增益,改了半天才发现是前面丢了两帧。
从那以后我每次拿到一份录音,不管别人说它多正常,都强制先跑一遍断口扫描和通道顺序核对,再谈幅值和失真。这两步加起来不到五分钟,却能省掉后面几小时的返工。希望帮到你。
本文还有配套的精品资源,点击获取