做超声检测和声学设计的朋友,一定经历过这种尴尬:新的相控阵探头还在论证阶段,阵元数量、间距、频率都悬着,打样试错的钱花得心疼,实验台又排不上队。这时候COMSOL有限元超声相控阵聚焦仿真模型就派上用场了——把阵元参数全部参数化,在频域里一次算出稳态声场,顺手把焦点位置、焦点尺寸、聚焦增益这些指标拉出来,整个方案可行性判断一两天就能落地。
这篇文章不是把COMSOL官网案例抄一遍,而是把实际建模过程中那些真正影响结果的细节、命令和坑整理出来。内容包括相控阵聚焦的频域求解逻辑、模型搭建里物理场和边界的设置思路、延时法则在COMSOL里的工程化实现、参数化扫描和后处理分析方法,最后把常见的边界反射、内存爆炸、CAD拓扑报错这些问题一并排掉。适合正在做超声聚焦、无损检测换能器设计、水声工程仿真的工程师参考,哪怕你刚接触COMSOL,跟着这套思路也能跑通一套能用的聚焦仿真模型。
1. 相控阵聚焦仿真的底层逻辑
1.1 相控阵到底在做什么
相控阵换能器的核心是一排独立的压电阵元,每个阵元可以单独控制激励信号的延时——也就是相位。生活中可以这样理解:一排人喊口号,如果所有人同时张嘴,声音是朝四面八方散的;如果让最远的人先喊、最近的人后喊,这个“错峰喊话”能让声音在一个预先指定的点上汇聚,恰好像聚光灯。
超声相控阵聚焦就是这个原理的工程版。设焦点坐标为F(x0, y0),第i个阵元的中心坐标为(xi, yi),声速为c。声波从第i个阵元传到焦点需要的时间是:
ti = sqrt((xi - x0)^2 + (yi - y0)^2) / c
要让所有阵元发出的波同时到达焦点,激励信号就需要按时间差做补偿。通常以最远阵元为基准,取:
Δt_i = t_max - ti
也就是距离焦点越近的阵元,越晚激励。把Δt_i换算成频域相位偏移,就得到每个阵元的激励相位。这一整套延时分布,业内叫“聚焦法则”,是相控阵聚焦的灵魂。
1.2 频域仿真为什么是工程主力
COMSOL里做声学仿真,最常用的有两类研究:时域研究和频域研究。时域能捕捉脉冲波传播的完整瞬态过程,看得到波包如何运动、如何反射,物理画面很直观。但时域求解有严格的时间步长约束,网格越细、域越大,步数越多,一个二维模型跑几个小时稀松平常,三维模型更是灾难。
频域仿真假设系统处于稳态正弦激励下,求解的是线性方程组,不存在时间步进问题。相控阵聚焦的典型工作状态是连续波或窄带脉冲激励,频率基本固定在中心频率附近,用频域求解在物理上完全合理。更重要的是,频域天然适合做参数化扫描:频率、阵元间距、焦点深度、阵元数量这些东西一变,重新解一次线性系统就行,不需要从头跑时间历程。
工程选型时我的建议很明确:如果只看聚焦效果、旁瓣水平、焦点尺寸这类稳态指标,直接上频域;如果非要研究脉冲波形畸变、非线性效应或者瞬态聚焦过程,再考虑时域。
1.3 有限元方法在这个场景里的不可替代性
超声换能器声场也可以用解析方法算,最经典的是瑞利-索末菲积分,通过把每个阵元等效为点源叠加得到空间任一点的声压。解析方法的优点是快,几十秒就能出来一幅声场图;缺点是边界条件简化得厉害,碰到复杂几何形状、近场区域、非均匀介质、多层结构就不那么好用。
有限元方法把计算域离散成网格单元,在每个单元内用形函数逼近声压场,能处理任意几何形状和材料分布,近场精度比解析法高得多。代价是网格要划得足够密,矩阵求解要吃掉不少内存。现实中做相控阵聚焦仿真,通常就是几何还算规整、但阵元排布和边界情况比较复杂,有限元这种“一刀切”的通用求解器反而最省心。
2. 模型搭建:几何、物理场与边界设定
2.1 几何建模:2D还是3D,对称性该用就用
我一开始直接烧三维模型,结果网格数量大得离谱,一台32G内存的工作站跑一个8阵元阵列就到极限了。说到底,相控阵聚焦仿真不一定非得3D。
如果阵列是一维排布,也就是阵元沿x轴排列、声场在xy平面内传播,那用2D模型完全够用。COMSOL里新建“二维”组件,计算域设成一个矩形水域,阵列边界放在上边沿或者左边沿,焦点落在域内部。2D模型网格量小两个数量级,参数扫描时可以一口气跑几十组。
二维模型还能进一步利用对称性。阵列排列和焦点都关于某条轴线对称时,只建一半模型,在对称轴上施加对称边界条件,计算量立刻减半甚至减更多。COMSOL的“对称”边界条件在压力声学里对应的是硬边界条件,也就是法向振速为零,物理上等同镜像反射。
三维模型也不是不能做,适合阵列是面阵、焦点在三维空间里、需要考察横向和纵向聚焦分辨率的场景。实际经验是,先用2D把方案跑通,把参数趋势摸清,再上3D做最终验证,这条路径效率最高。
CAD模型的导入偶尔会遇到“转换为CAD内核时不支持的拓扑”这个报错,通常是STEP文件里存在重叠面、微小边或者退化几何。我的习惯是直接用COMSOL内置的几何工具重建声学域——反正就是一个矩形或圆柱水域,阵列边界用矩形阵列操作生成,几十秒就能搞定,比在CAD软件里反复修补导出再导入,省心得多。
2.2 物理场接口:压力声学、频域是默认选项
COMSOL里做常规声学仿真,物理场接口选择“声学模块 > 压力声学 > 压力声学,频域”。这个接口求解的是亥姆霍兹方程,也就是频域波动方程,变量是声压p。在均匀介质中,方程形式是:
∇·(−1/ρ0 ∇p) − ω^2/(ρ0 c^2) p = 0
其中ρ0是介质密度,c是声速,ω=2πf是角频率。这个接口会求解复声压场,实部代表瞬时声压在某一相位时刻的值,虚部加入了相位信息。
声学域的材料设置为水:密度998 kg/m³,声速1480 m/s。如果目标介质是其他液体或固体,替换材料参数即可。这里要注意,材料参数里的声速必须与你设置的频率、波长配套,否则网格尺寸和PML厚度即使看起来合理,实际却可能差出一个数量级。
换能器的激励边界有几种处理方式。最简化的方法是把每个阵元边界设成“法向加速度”边界条件,或者直接给阵元边界赋一个复声压边界条件。如果你不关心压电陶瓷内部电场和机械振动的耦合,这就是最快的路子。如果要做完整的压电超声换能器仿真,那必须加上“压电设备”物理场接口,把PZT材料的压电耦合矩阵、电极边界全建出来,网格和计算量会相应增大。
2.3 边界条件:别让声波“碰壁”
无限大水域在有限元模型里只能截取有限区域,截断边界如果处理不好,声波会在边界上反射回来,聚焦声场里就会混入一圈圈的假干涉条纹。这个干扰早期特别容易忽略,因为图像上看起来像漂亮的波纹,实际上全是假信号。
COMSOL里处理开放声场的最标准做法是加完美匹配层,也就是PML。在声学域的外围再包上一圈环状区域,把这个区域设为“完美匹配层”的域条件。PML的原理是在内部对方程做坐标拉伸变换,使进入该区域的波被指数衰减吸收,理论上不产生反射。
PML参数设置有两个关键点。第一是厚度,建议至少一个波长,稳妥一点取1.5到2个波长。第二是网格,PML区域内网格应该尽量规整,通常用映射网格或扫掠网格生成规则矩形网格,这样可以避免不规则网格引起的局部数值误差。
还有一个容易被忽略的点,就是PML外面不需要再设任何边界条件,程序默认处理为吸收。物理域和PML交界处的网格连续性要保证,否则出现数值反射,焦点位置的声压分布可能已经受了污染。
2.4 网格尺寸怎么定
频域声学仿真的网格规则可以用一句话概括:每个波长内至少5到6个二阶单元。声速c、频率f和波长λ的关系是λ=c/f。以水声速1480 m/s为例,不同频率对应的波长和推荐网格尺寸如下:
| 频率 | 波长 | 推荐网格(每波长6单元) |
|---|---|---|
| 250 kHz | 5.92 mm | 约1.0 mm |
| 500 kHz | 2.96 mm | 约0.5 mm |
| 1 MHz | 1.48 mm | 约0.25 mm |
在COMSOL网格节点里,可以直接选择“声学”预定义网格大小,软件会根据物理场接口自动估算波长并给出推荐尺寸。我自己的流程是从较粗网格开始试算,逐步细化,做一次标准的网格收敛性检查。如果两次加密后焦点声压变化小于1%,网格量就是合适的。
PML区域网格要单独处理。我的做法是在PML区域用映射网格划定结构化网格,层内沿厚度方向划分4到6层即可,太多太密只会徒增计算量。
3. 聚焦延时法则在COMSOL里的工程化实现
3.1 延时计算:先算传播时间,再转相位
聚焦法则的工程实现在COMSOL里有几种套路,先说最朴素的。假设有N个阵元沿x轴排列,阵元间距为pitch,第i个阵元的中心坐标为xi。焦点坐标是(x_f, y_f)。
第i个阵元到焦点的距离为:
ri = sqrt((xi - x_f)^2 + y_f^2)
对应的传播时间为ti = ri/c。取所有阵元中传播时间最大值t_max,第i个阵元的延时为Δt_i = t_max − ti。
在频域谐波分析中,时间延迟Δτ对应的相位偏移是−2πfΔτ(符号约定取决于COMSOL的时谐因子约定,工程计算中你只需要保证各阵元间的相对相位差是对的)。这样,第i个阵元的激励就可以写成复值边界条件:
p_i = p0 * exp(−j * 2 * pi * f * Δt_i)
p0是单个阵元的激励声压幅值,设置为1 Pa便于后处理归一化。
3.2 用分段函数把延时映射到阵列边界
每个阵元的坐标不同,延时也逐元变化。在COMSOL里不需要为每个阵元单独建边界条件,更聪明的办法是用一个分段函数把延时映射到空间坐标上。
在“全局定义 > 函数”中新建一个“分段函数”,变量设为x,区间按阵元边界划分。比如阵元1的x范围是0到0.6mm,此区间内函数值是Δt_1;阵元2的x范围是0.6到1.2mm,函数值是Δt_2,依此类推。然后把换能器整个阵列边界设成一个统一的压力边界条件,赋值为:
p0 * exp(−j * 2 * pi * f * delay_func(x))
由于分段函数只在相应区间内取相应延时值,就实现了各阵元独立相位控制。这个思路最大的好处是:参数扫描时只要更新延时函数,整个模型自动响应,不需要动几何结构。
阵元数量很多时,也可以用外部CSV表格导入延时数据,再通过“插值函数”映射到坐标上。听说有些项目里还有把MATLAB算好的聚焦法则直接灌进COMSOL的做法,本质上都是一样。
3.3 参数化扫描:让所有关键参数活起来
COMSOL的“全局参数”是参数化仿真的心脏。我把f0(工作频率)、pitch(阵元间距)、elem_count(阵元数)、focus_x和focus_y(焦点坐标)全部定义成全局参数。
几何构建时,阵列位置用参数驱动。二维建模时,先用一个“矩形”表示单个阵元边界,再用“阵列”操作,x方向间距设为pitch,个数设为elem_count。这样pitch和elem_count一变,几何自动重建,网格也跟着自适应。
研究设置中,在“研究1”里选择“频域”,把频率设为f0。然后在研究步骤前添加“参数化扫描”,把需要扫描的参数加进去,比如扫f0从300kHz到700kHz,步长50kHz;同时pitch从0.4mm扫到1.0mm,步长0.2mm。COMSOL会自动计算所有参数组合,每个组合解一次频域方程,不需要你手动干预。
这里给一个参数表参考,方便你直接抄作业:
| 参数名 | 含义 | 典型值 | 扫描范围 |
|---|---|---|---|
| f0 | 工作频率 | 500 kHz | 250k–1 MHz |
| pitch | 阵元间距 | 0.6 mm | 0.3–1.2 mm |
| elem_count | 阵元数量 | 16 | 8–32 |
| focus_x | 焦点横向坐标 | 0 mm | −10–10 mm |
| focus_y | 焦点纵向深度 | 30 mm | 10–60 mm |
| p0 | 阵元激励幅值 | 1 Pa | 固定1 |
参数化扫描跑完后,所有结果都存放在不同数据集里。后处理时可以通过“数据集”下拉列表切换不同参数组合的结果,非常方便。
4. 聚焦效果分析:怎么证明“聚焦成功”了
4.1 第一眼判定:声压幅值分布图
最直观的分析是在“二维绘图组”里画声压幅值分布。这里的第一个坑是变量选择:COMSOL频域求解得到的是复声压acpr.p,直接用实部或虚部绘图会看到明显的不对称图案,好像聚焦非常怪异。必须用幅值,也就是abs(acpr.p)或者声压级Lp,才能得到真实的声场包络。
画出来后,判断聚焦是否成功的三个视觉标准:
- 焦点位置是否有明显的亮斑,也就是声压幅值极大值。
- 焦点周围是否存在过大的旁瓣,主瓣和旁瓣的亮度差是否清晰。
- 声束是否沿着预期的轴线传播,有没有明显偏斜。
如果亮斑不在预设焦点位置,先检查延时法则的符号和坐标定义是不是反了,这是我之前踩过最多次的坑。
4.2 量化指标这样算
视觉判断只能用来粗筛,写报告还需要量化指标。COMSOL的“派生值”菜单里可以直接计算这些:
第一,焦点位置。使用“派生值 > 体最大值”或“面最大值”,在“表达式”里填abs(acpr.p),让软件帮你定位声压幅值最大的坐标。如果这个坐标和预设焦点坐标偏差在可接受范围内,说明聚焦法则设置正确。
第二,焦点尺寸。一般是提取通过焦点的直线上声压分布,然后找主瓣下降6dB两个位置的距离。在COMSOL里用“一维绘图组”和“截线”数据集,在焦点处画一条横向截线,再把表达式调成20*log10(abs(acpr.p)/max),读取−6dB对应的横坐标差。横向分辨率就是这个值。
第三,聚焦增益。把相控阵聚焦时焦点的峰值声压,除以同等条件下单个阵元在焦点位置的声压,得到的就是聚焦增益,通常用dB表示。这个指标直接反映相控阵相比单阵元的增强能力,工程上很关键。
4.3 参数化扫描结果怎么“看”
参数化扫描后,“一维绘图组”里选择不同参数组合的数据集,可以叠加多个焦点压力曲线。我通常把频率或阵元间距作为横轴,画出焦点声压随参数变化曲线,用来判断最优工作点。
举个例子,扫描阵元间距时如果发现焦点声压在某个间距之后明显衰减,同时旁瓣开始升高,说明可能出现栅瓣效应,这个间距就该避开。反之,如果焦点声压随阵元数线性上升,说明聚焦在正常增长阶段。
也可以把不同参数下的声场图横竖排列在一起做一个“报告”,用COMSOL自带的“报告工具”生成带图带的PDF,沟通方案、写专利都够用。
4.4 经验公式:焦点尺寸可以提前算个底
做参数扫描之前,用近似公式估算一下预期的焦点尺寸,能帮你判断仿真结果靠不靠谱。空间分辨率的近似公式是:
焦点横向宽度 ≈ λ * F / D
其中λ是波长,F是焦距,D是阵列总孔径宽度。比如f=500 kHz,水中声速1480 m/s,λ≈2.96mm;阵元数16,间距0.6mm,孔径D=9.6mm;焦距F=30mm。代入得到焦点宽度约9.25mm。如果仿真结果和这个数量级对不上,就该回头检查模型了。
另一方面,阵元间距有一个硬限制:为了避免栅瓣干扰,阵元间距一般要求小于等于半个波长。上面例子里半个波长是1.48mm,pitch取0.6mm是安全的;如果扫描到1.5mm以上,图像上激光瓣就会冒出来。
5. 实操踩坑记录与排错技巧
5.1 边界反射带来的假干涉条纹
这是新手上路最容易撞的墙。现象是声场图中不仅焦点处有亮斑,域边缘还出现一圈圈规则的弧形条纹,越靠近边界越明显。原因就是截断边界没有加PML,或者PML厚度不够、网格不匹配。
解决办法很简单:给计算域外层包一圈厚度至少一个波长的PML区域,确保PML和内部物理域的网格交界处节点连续。如果你用了映射网格,注意PML区域的网格不要跨层扭曲。曾经有人图省事把PML厚度设成0.5个波长,结果边界反射还是明显,加厚到1.5个波长后干净多了。
5.2 内存不足导致求解失败
COMSOL求解器报“内存不足”在三维模型中很常见。我的排查顺序是:
- 优先利用对称性,能切一半就切一半。
- 检查网格是否局部过密,比如阵元边缘处是否出现了极小尺寸的网格,可以用网格统计里的“最小网格质量”来看。
- 求解器上,二维模型直接用MUMPS或者PARDISO直接求解器最稳;三维大模型才考虑迭代求解器加预处理器。
迭代求解器对声学问题收敛不一定快,实际经验是三维模型中用“GMRES+多网格”有时能压住内存,但参数不合适会发散。如果你不是特别熟,还是老实靠网格控制和对称性降低规模。
5.3 单位换算与复声压的显示误区
频域计算得到的声压是一个复数,很多新手画出来图后觉得声场不对称,其实只是显示了实部。把表达式改成abs(acpr.p)之后瞬间就正常了。
另一个单位坑是分贝。COMSOL里“声压级”默认参考声压是20微帕,但在水声和超声领域,参考声压标准并不统一。如果要自定义基准,需要手动写表达式:20*log10(abs(acpr.p)/p_ref),p_ref按你自己的标准设置,别直接套默认结果。
5.4 CAD导入报错“不支持的拓扑”
这个报错通常出现在使用外部CAD几何导入COMSOL时,尤其是STEP格式文件含有微小倒角、重叠面、破面等。解决方法有几个:
- 在CAD软件里简化模型,去掉对声场影响可以忽略的小特征。
- 在COMSOL“几何”里利用“修复”工具,自动删除短边、合并薄片。
- 最省心的是直接用COMSOL内建几何图元重建声学域,毕竟仿真域就是一个水域加阵列边界,没必要非得从复杂CAD模型导进来。
5.5 模型验证的“金标准”
参数化模型跑出来再漂亮,也得有一个正确的参照物来验证。我常用的验证方法是:把阵列激励设定为所有阵元同相位,计算远场指向性,和理论公式对比。单阵元、线阵远场指向性有解析解,误差在1dB以内说明模型基础设置没问题。
再进阶一点,就是用4.4节的经验公式核对焦点尺寸和焦点增益的数量级。焦点宽度、旁瓣水平这些指标和理论趋势一致,模型就可信。如果仿真结果和理论差了一倍以上,别急着调网格,先回头检查介质声速、频率单位和延时符号。
5.6 那些看起来很吓人的热词其实与本模型无关
搜索COMSOL相关资料时,总会看到“塑性变形”“欧拉角”“摩擦角”“粘度随温度变化”这些词。这些大部分是结构力学、流体力学或者电磁场的仿真议题,和超声相控阵聚焦声场模型没有直接关系。你如果在声学域里面设置了塑性参数或者欧拉角变量,反而会让模型变得混乱。
我个人的经验是,仿真之前先想清楚这一版要回答什么问题。超声相控阵聚焦,核心就是频域声场、聚焦法则、参数扫描这三个点。把边界反射挡在外面,把延时法则算对,把网格按波长划好,这个模型就能踏踏实实给设计提供依据。之后就算要扩展,比如加入压电耦合、时域脉冲分析、热效应分析,也是在现有框架上加模块,而不是返工重来。