ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SPICE电声仿真:声压级、等效电路与功放失真分析

SPICE电声仿真:声压级、等效电路与功放失真分析

简介:《电声与音频放大器设计》第三版英文教材面向声学与电声基础较少、希望深入换能器和音频功放设计的学习者及工程人员,重点解决声学概念、电声转换与电路仿真之间的衔接问题。压缩包仅含1个PDF文件,大小7.87MB,便于电脑或平板直接查阅,无需额外解压工具。全书从声波产生、传播、衰减与反射讲起,引入声压级、频率响应、声速和声阻抗等参数,再延伸至扬声器、麦克风的阻抗匹配、灵敏度与非线性失真分析,并借助SPICE对电声元件和电路建模。音频功放部分覆盖运算放大器到功率拓扑,讨论增益、噪声、失真、PSRR与效率,兼及散热、保护电路和稳定性,还涉及DSP在音频放大器中的应用及编解码格式理解。已有233人学习,可作为理论对照与仿真实践并重的参考书。

1. 声压级不是"音量旋钮":为什么电声设计必须先把 dB 算清

一只灵敏度 87dB/W/m 的单元,1W 功率在 1 米处给出 87dB 声压;换一只 90dB 的,同样 1W 就给 90dB。3dB 的差距在功率上等价于翻倍,也就是说,那台从 100W 换成 200W 的功放,收益还不如换一只高灵敏度的喇叭。这个结论听着反直觉,因为大多数人把"响不响"归因到功放瓦数,但电声链路上真正决定响度的是声压级,而声压级是一笔 dB 账。spice 在这本书里的角色,就是把这笔账从"凭耳朵估"变成"能算出曲线":声学端的声压级、电声转换的灵敏度、功放端的增益与失真,共用同一套对数刻度。算不清这条链,后面的等效电路和功放拓扑都只能靠猜。

2. 声学到电路的桥:SPICE 怎么把空气和纸盆都变成节点方程

2.1 三个类比量:声压、体积速度与声阻抗

电声学能落到电路仿真软件里算,靠的是一套成熟的类比映射。声压 p(单位 Pa)对应电压 v(V),体积速度 U(单位 m³/s,也就是空气"流"过某个截面的速率)对应电流 i(A),声阻抗 Z_a = p/U 对应电阻抗 Z = v/i。这套映射不是修辞上的比喻,而是两边满足同一组线性方程:串联时声压相加、体积速度相等,正好对应电路的 KVL 与 KCL。一旦接受这个映射,一根管子、一个腔体、一块多孔吸声棉,都能被翻译成 R、L、C 组成的二端网络。

映射的物理来源是力学方程的形式一致性。空气在管中做活塞式运动时,牛顿第二定律写成 p·S = ρ·S·l·(dU/dt)/S,整理后 p = (ρl/S)·(dU/dt),这个形式和电感两端电压 v = L·(di/dt) 完全同构,于是声质量 M_a = ρl/S 就顶了电感的位。同理,密闭腔体被压缩时 p = (ρc²/V)·∫U dt,和电容的 v = (1/C)∫i dt 同构,声顺 C_a = V/(ρc²) 顶了电容的位。整个过程里没有任何近似假设,除了"尺寸远小于波长"这一条后面会专门讲的边界。

先看几个数量级,这是最容易被忽略的部分。直径 5cm、长 10cm 的管子,截面积 S = 1.96×10⁻³ m²,代入 M_a = 1.18×0.1/1.96×10⁻³ ≈ 60 kg/m⁴,在电路里就是 60H 的电感。1 升的密闭箱,C_a = 1×10⁻³/(1.18×345²) ≈ 7.1×10⁻⁹ m⁵/N,等价 7.1nF 的电容。这两个数和常见电子元件的量级差了六到九个数量级,所以电声仿真里几乎从不直接用电感电容的数值,而是靠变压比把量纲缩回去,或者干脆用归一化后的无量纲参数。记住这一点,后面看到 netlist 里出现 0.85m 这种"毫亨级"的声学元件就不会困惑——那是折算后的等效值。

2.2 集总还是分布:什么时候空气能当成一个电感

类比映射只在集总参数成立时有效,判据是结构尺寸要明显小于最高工作频率对应的波长。20kHz 时,空气中波长 λ = 345/20000 ≈ 17mm;换句话说,任何超过 17mm 的管道,在 20kHz 上都不能再当成一个纯粹的声质量,声波沿管长方向已经出现相位差,必须切段建模或者换成传输线模型。很多仿真出来的高频响应和实测对不上,根子就在这里——模型把一段 30cm 的倒相管当成一个集总电感,而实测里它已经是一根一维声波导。

工程上的常用做法是按 λ/8 到 λ/10 来切段,每段用一个 π 型或 T 型 LC 网络近似。切多少段合适,取决于你要看多高的频段:只看 200Hz 以下的分频点,一根倒相管一个集总电感足够;要分析 5kHz 以上的箱内驻波,就得切到十几段,甚至改用一维传输线单元。这套取舍在书里没有给死数字,但给了判据,判据比数字更有用——因为单元尺寸、腔体形状一变,数字就得重算。

还有一类元件天生就是分布参数:吸声棉。它既不是纯阻也不是纯抗,而是频率相关的复阻抗,低频近似为声阻,高频因为惯性效应转为声质量主导。常见的处理是把多孔材料写成并联的 R_a 与 M_a,参数从流阻率反推。这一步的误差往往比电路部分大得多,所以真正做产品时,这一段经常是"先仿真给出量级,再用阻抗管实测修正"的流程。

2.3 一段能跑的 .ac 扫描与它的读数

把上面的映射写进 netlist,就得到一段能直接跑的分析。下面这个例子里,V1 代表声压激励,L_ac 是管子的声质量,C_ac 是箱体的声顺,R_rad 是辐射阻抗折算过来的电阻。

* 声学类比网络:管道 + 密闭腔 + 辐射负载 * 声压 -> 电压 1:1,体积速度 -> 电流 1:1 V1 1 0 AC 1 Rs 1 2 1 ; 管道入口的粘滞损耗近似 Lac 2 3 0.85m ; 声质量 M_a = 0.85 (等效值,已缩放) Cac 3 0 12u ; 声顺 C_a,对应约 1.7 升腔体 Rrad 3 0 4.2 ; 辐射阻抗的实部 .ac dec 200 20 20k .print ac vdb(3) vp(3) .end

V1的 AC 幅值设成 1,意味着所有节点电压都是相对声压,vdb(3)直接读出来就是频响曲线的 dB 值,不需要再换算。.ac dec 200 20 20k表示从 20Hz 到 20kHz 按十倍频程取 200 个点,这个密度对找谐振峰足够,再密也看不出新东西。Lac和Cac的数值是缩放过的等效值,缩放系数取决于你把哪个物理量当成"1",写 netlist 时必须把这个系数记在注释里,否则下次改参数会彻底迷失。

读数时分三个特征点看:低频段的平坦区高度由 R_rad 与激励源的内阻分压决定;谐振峰出现在 f = 1/(2π√(L·C)) 处,峰的高度由回路的 Q 值决定,Q 高说明阻尼不足;过了谐振点之后曲线以 -12dB/oct 的斜率下落,这是二阶系统的标志。如果实测曲线在谐振点附近比仿真"胖",通常不是电路模型错了,而是漏掉了箱内的填充材料带来的附加声阻。

注意:把声学量直接按 1:1 映射进 SPICE 时,节点电压的量级可能低到 10⁻⁵,某些求解器的默认收敛阈值会把它当成零,表现为曲线被"压平"。把激励源幅值放大到 1 左右再在读数时折算回来,是最省事的规避方式。

3. 换能器的等效电路:扬声器为什么能用一个电阻加电感"假装"成机械系统

3.1 力因子 Bl:电域和机械域之间那台变压器

扬声器的等效电路之所以能成立,关键是找到电域与机械域之间的耦合元件。音圈处在磁隙里,通电导体受洛伦兹力 F = Bl·i,同时音圈运动又切割磁力线产生反电动势 e = Bl·u,这两个式子里的 Bl(磁通密度与导线长度的乘积,单位 N/A 或 V·s/m)就是耦合系数。从二端口网络的角度看,这正好是一台理想变压器的变比:电端电压对应机械端的力,电端电流对应机械端的速度,变比就是 Bl。

有了这台变压器,机械端的质量、劲度、阻尼就能"反射"到电端。反射的规则和普通变压器一样,阻抗按变比的平方缩放:机械阻抗 Z_mech 反射到电端是 Z_elec = Bl²/Z_mech。这就是为什么扬声器的阻抗曲线在谐振点附近会鼓起一个大包——机械端在谐振时阻抗最小(速度最大),反射到电端反而是阻抗最大。实测一只标称 8Ω 的单元,谐振点阻抗能到 25Ω 以上,多出来的那 17Ω 全是机械系统"透"过来的。

这一步的设计含义很实际:如果你想让单元的 Q 值低一点(低频更干净),可以加大磁路 Bl,反射后的电阻分量变大,电气阻尼增强;但 Bl 加大同时会压低 Qes,让单元在低频段的输出提前滚降。Bl、Mms、Cms 三个量互相牵制,改动任何一个都会重排整条低频响应。很多"换了音圈声音就变了"的经验,本质就是 Bl 变了导致 Q 值漂移。

3.2 T/S 参数怎么从等效电路里算出来

小信号参数体系(业内习惯叫 T/S 参数)不是实验拟合出来的一堆独立数字,而是上面那个等效电路的集总结果,每个参数都能从电路元件反算。最基本的三个关系是:

  • 谐振频率 f_s = 1/(2π√(M_ms·C_ms)),其中 M_ms 是含空气负载的总振动质量,C_ms 是悬挂系统的力顺。
  • 电气品质因数 Q_es = 2πf_s·M_ms·Re/Bl²,反映电磁阻尼的强弱。
  • 等效容积 V_as = ρc²·S_d²·C_ms,把力顺换算成"这段悬挂等效于多大体积的空气弹簧"。

拿一组具体数字验算:Re = 6.4Ω、Le = 0.7mH、f_s = 42Hz、Q_ms = 1.6、Q_es = 0.55、S_d = 220cm²、M_ms = 27.9g、C_ms = 0.515mm/N、Bl = 9.3N/A。先验 f_s:1/(2π√(0.0279×5.15×10⁻⁴)) = 1/(2π×3.79×10⁻³) ≈ 42.0Hz,对得上。再算 V_as:1.18×345²×0.022²×5.15×10⁻⁴ = 1.18×119025×4.84×10⁻⁴×5.15×10⁻⁴ ≈ 0.035m³,也就是 35 升。这些数字互相咬合,不是凑出来的。

能在纸上把这些关系走通,好处是拿到一只陌生单元,只看几个参数就能预判它在某个箱体里的低频形态:Q_ts 高于 0.5 说明低频会隆起,适合开放式或大箱;低于 0.35 说明阻尼强,适合小箱体但效率偏低。这套判断不需要任何仿真软件,是设计前十分钟就该完成的事。

3.3 反推:从一条阻抗曲线拟合出参数

工程上更常见的场景是反过来——手上只有一条实测阻抗曲线,想抽出等效电路参数。做法是先写出阻抗的解析式,再用最小二乘拟合。忽略音圈电感的高频细节,电阻抗可以写成三项叠加:

import numpy as np from scipy.optimize import least_squares def z_model(f, Re, Le, fs, Qms, Qes): w = 2 * np.pi * f # 机械支路反射到电端的阻抗:谐振附近呈实数峰 Zm = Re * (Qms / Qes) / (1 + 1j * Qms * (f / fs - fs / f)) return Re + 1j * w * Le + Zm def fit(f, z_meas): def resid(p): Re, Le, fs, Qms, Qes = p return np.abs(z_model(f, Re, Le, fs, Qms, Qes) - z_meas) p0 = [6.4, 7e-4, 40.0, 1.5, 0.5] # 初值必须落在合理量级 bounds = ([2, 1e-5, 20, 0.5, 0.1], # 下界 [16, 5e-3, 120, 8.0, 3.0]) # 上界 return least_squares(resid, p0, bounds=bounds).x

z_model里的机械支路写成了一个复数项,实部是阻尼、虚部是惯性与弹性之差,这是等效电路在谐振附近的直接翻译。p0的初值不能随便给,非线性最小二乘对初值敏感,f_s 的初值最好取实测阻抗峰对应的频率,Q_es 与 Q_ms 的初值按峰值高度估一个量级,否则容易收敛到局部极小。bounds的作用是挡住物理上不可能的解,比如负的 Le 或者 Q 值超过 10。

拟合出来的参数要交叉验证:拿拟合得到的 M_ms 和 C_ms 重算 f_s,和拟合值差多少;拿 V_as = ρc²S_d²C_ms 和厂商给的等效容积比一比,差 20% 以内算正常,差一倍说明测量条件有问题(比如单元没做障板,或者近场反射没处理好)。这套交叉验证比单纯看残差平方和有价值得多,残差小但参数物理上不成立的拟合,用起来一定翻车。

4. 功率放大器的失真账本:THD、PSRR、效率为什么互相拉扯

4.1 负反馈的失真账本:开环增益是唯一的本金

功放设计的核心矛盾可以用一句话概括:失真、带宽、增益三者只能挑两个,负反馈是拿增益去换另外两个。环路增益 T = A_ol·β 决定了失真被压低的倍数,闭环失真约等于开环失真除以 (1+T)。开环增益 80dB、闭环 26dB 的配置,环路增益约 54dB 也就是 500 倍左右,开环 0.3% 的失真压到 0.0006% 量级。这个算式很漂亮,但它有个前提:失真必须发生在环路内部,而且环路在那个频率上还有增益。

第二句话是关键。环路增益随频率以 -20dB/oct 滚降,到 20kHz 时可能只剩 20dB,也就是 10 倍。这意味着同样一套电路,1kHz 的失真被压 500 倍,20kHz 只被压 10 倍——高频失真"压不下去",不是反馈失效了,而是到那个频率已经没有增益可用了。这解释了为什么很多功放的 THD 曲线在 10kHz 之后明显上翘,也解释了为什么提高开环增益(多一级放大、改用高 β 管)比单纯加深反馈更有效。

实际设计里还有一层限制:环路增益加得越深,相位裕度越紧张。输出级、驱动级、米勒补偿各贡献一个极点,总相移接近 180° 时闭环就振荡。常见的做法是给补偿电容留够裕度,宁可牺牲一点环路增益,也不让裕度掉到 45° 以下。这是一笔明摆着的取舍账,书里没给"标准答案",但把权衡的两端都摊开了。

4.2 交越失真与静态电流:SPICE 里看得见的那道台阶

乙类输出级在过零点附近两只管子都截止,增益瞬间塌到零,输出波形上留下一道平直的"台阶"。这道台阶在频谱上的表现是一串奇次谐波,三次为主,五次、七次递减。因为它是周期性的、和信号过零同步的,所以用 THD 能测出来,用耳朵也能听出来——小音量下那种"发毛"的听感,多数是它。

甲乙类用静态电流消除台阶,让两只管子在小信号时都保持导通。静态电流给多大是个经典问题:太小,台阶没消干净;太大,效率下降、热耗上升。经验区间对双极型输出级是 20mA 到 50mA 量级,具体值取决于输出管的 Gm 和发射极电阻。判据是让两只管子在过零点附近的跨导之和保持恒定,这样合成的 Gm 不随信号摆幅变化,失真最小。这个判据在仿真里可以直接验证:扫一遍静态电流,看 THD 的极小值落在哪里。

* 甲乙类输出级交越失真的傅里叶分析 Vcc 10 0 DC 35 Vin 1 0 SIN(0 1 1k) Qn 10 2 3 NPN_MODEL Qp 3 2 0 PNP_MODEL Re_n 3 4 0.22 ; 发射极电阻,抑制热失控 Re_p 5 3 0.22 Vbias 2 6 DC 1.15 ; 偏置电压,控制静态电流 Rl 3 0 8 ; 负载 .tran 1u 20m .four 1k v(3) ; 对输出做 1kHz 傅里叶分解

Vbias是静态电流的旋钮,1.15V 大约对应几十毫安,改这个值再跑.four,就能画出静态电流与三次谐波的关系曲线。.four会输出各次谐波的幅值和 THD 百分比,比直接看波形直观得多。Re_n和Re_p的 0.22Ω 是真实电路里必有的,除了抑制热失控,它还提供局部负反馈,让输出管的 Gm 线性化,间接改善交越失真。

注意:仿真里三极管的模型参数如果用的是理想化模型,交越失真的绝对值会和实测差很远,但趋势是对的。用它来比较不同静态电流下的相对优劣可靠,用它来断言"这台机器 THD 是 0.01%"不可靠。

4.3 PSRR 与退耦:电源噪声的三条入侵路径

电源抑制比衡量的是电源纹波有多少漏到输出。它的入侵路径有三条:输出级的集电极或漏极直接接电源,纹波通过输出管的输出阻抗叠到负载上;输入级的偏置电流随电源波动,等效于在输入端加了一个失调信号;反馈网络的分压比如果依赖电源,闭环增益本身就会抖动。三条路径里第一条最直接,低频时几乎无法靠反馈抑制——因为反馈要抑制的是"输出端的误差",而电源纹波从输出级注入时,环路根本来不及响应。

提高 PSRR 的手段分两层。电路层用共源共栅、电流源负载、差分输入的镜像对称,把电源波动做成共模量再靠 CMRR 吃掉;系统层靠退耦网络,在电源引脚附近用 RC 或 LC 把纹波旁路掉。退耦的截止频率必须低于纹波的最低频率,工频纹波 100Hz、开关电源纹波可能低到几 kHz,电容值要按这个来选,而不是随手放一个 100nF。真正容易忽略的是退耦网络的等效串联电阻和电感,大容量电解电容在 1MHz 以上已经呈感性,高频段还得靠小容量陶瓷电容接着顶。

电源纹波在输出端的表现和失真是两回事:失真是信号自身的非线性产物,纹波是外来的加性干扰,两者的测量方法不同。测 THD 时如果用纯净的直流电源,纹波项会被掩盖;一旦换成真实电源,THD+N 里的 N 就上来了。所以看别人给的失真指标,要先问清楚测试条件,这一点在电声圈属于常识,但初学者常踩。

5. 避坑与排查:仿真收敛、热设计、接地噪声的几条血泪记录

5.1 仿真侧的两类坑

现象:.ac分析跑出来的频响曲线在高频段莫名翘起,和预期相反。原因多半是声学网络切段不足,一根长管被当成集总电感,高频时它的实际行为已经接近传输线,阻抗随频率不再是线性上升而是周期性变化,集总模型给出的单调曲线自然对不上。解决方式是按 λ/8 判据重新切段,或者在大尺寸结构上直接改用分布参数单元。判据比经验值可靠,因为单元尺寸一变经验值就失效。

现象:.tran仿真跑到一半报"时间步长过小",或者输出波形突然发散。原因通常不是电路有问题,而是模型里有不连续点:理想开关、分段线性源、或者三极管模型在某个工作点上的导数跳变。SPICE 靠牛顿迭代求解,导数跳变会让它反复缩小步长。解决办法是给关键节点加一个很小的并联电容(1pF 量级)把跳变平滑掉,或者把源改成带有限上升沿的形式。加电容会轻微改变高频响应,所以加完要复核一遍频响曲线。

现象:静态工作点算出来了,但数值离谱,比如输出端停在电源轨上。这是典型的收敛到错误的解。多解问题在带正反馈或强非线性的电路里很常见,初始条件不同会落到不同解上。.nodeset可以给关键节点指定初值,把它拉到正确的解附近。这条血泪经验的成本很高——曾经有人对着一个"输出恒为高"的电路查了两天,最后发现只是初值问题。

5.2 硬件侧的两类坑

现象:功放小信号时正常,一加大音量就失真,散热片烫手。先别怀疑电路拓扑,去查静态电流的热漂移。双极型输出级的 Vbe 有 -2mV/℃ 左右的温度系数,温度升高会让静态电流增大,静态电流增大又让温度更高,形成正反馈。发射极电阻就是用来打断这个循环的,阻值太小(比如 0.1Ω)压不住。解决方式是把发射极电阻提到 0.22Ω 以上,并把偏置管和输出管热耦合在同一块散热片上,让偏置电压随温度自动下调。

现象:测量 THD 时数值随接地方式大幅波动,换个接地点能差一个数量级。这是地环路问题,属于电声测量里的经典玄学。信号源、功放、测量设备各自接地,屏蔽层的电流在两地之间流动,在地线上产生毫伏级压降,这个压降串进输入回路就被放大了。解决方式是单点接地,把测量设备的地当成唯一参考点,信号源改成浮地或者通过隔离变压器接入。判断方法很简单:拔掉信号源的屏蔽层一端,如果噪声明显下降,就确认是地环路。

5.3 测量侧的一条坑

现象:阻抗曲线在低频段出现双峰,但单元明明是单谐振。这通常不是单元的问题,而是测量夹具的附加质量或者近场反射造成的。附加质量会让 M_ms 变大、f_s 下移,近场反射会在某个频率上造出一个假的谐振。判断方式是改变测量距离和夹具夹持力,如果峰的位置跟着变,就是测量系统的问题而不是单元的问题。正规做法是用已知阻抗的参考件先标定一遍夹具,把系统误差扣掉再测。

6. 设计取舍:从仿真曲线到实物听感之间那条不可消除的缝

仿真能给出频响、THD、阻抗曲线,给不出"听起来怎么样"。这道缝不是模型精度不够,而是评价维度不同:仿真算的是稳态正弦激励下的集总参数响应,而听感涉及瞬态、指向性、房间耦合、心理声学加权,这些量在集总模型里根本没有对应的节点。承认这条缝的存在,比试图用更复杂的模型填平它更实际。

我一般会把设计流程分成两段:前一段用 SPICE 把电路和声学网络的"硬约束"定下来——谐振频率、Q 值、环路增益、静态电流、散热余量,这些量算错了实物一定不行,算对了实物也未必好;后一段用实测和试听去调那些模型里没有的自由度,比如箱内填充材料的分布、倒相管口的圆角、输出管的型号替换。前一段追求收敛,后一段接受发散。

决策点仿真能给出的依据仿真给不出的部分
箱体容积V_as 与 Q_ts 算出的低频形态箱内驻波分布与填充方案
静态电流THD 随 I_q 的极小值长时间大音量下的热漂移
环路增益失真压缩倍数与相位裕度大信号瞬态互调的主观感受
退耦电容PSRR 曲线上的旁路深度实际布板后的寄生参数影响

这张表最右列的那些项,没有一项能靠增加仿真规模解决,因为它们依赖具体的物料、工艺和听音环境。这也是为什么电声设计里"经验"占比很高——经验不是玄学,是大量实物数据在模型之外形成的先验。

一个具体的教训:我曾经按仿真把一只单元的 Q_ts 调到 0.38,曲线非常漂亮,低频下潜和滚降都符合目标;装进箱子一听,低频发紧,完全没有量感。查了一周才发现,仿真里的 C_ms 是线性值,而那只单元的悬挂在大位移下明显变硬,小信号参数给出的低频形态在大信号下根本不成立。从那以后我每次做低频设计,都强制走一遍"小信号仿真定框架、大信号实测校形态"的流程,先扫位移,再扫频响。这件事让我对"参数"两个字始终保持警惕——所有集总参数都是工作点附近的线性化结果,离开那个工作点,它们只是参考值。

希望这些能帮到你,少走几步弯路。

本文还有配套的精品资源,点击获取

返回列表