☰
相控阵超声声场计算绕不开瑞利积分:原理、离散化与工程实践
2026/10/14 20:37:43 网站建设 项目流程

简介:围绕相控阵超声、瑞利积分与pencil法展开,内容侧重声场计算、波束控制及成像仿真,适合声学、医学超声及雷达通信方向的工程师与研究人员参考。压缩包体积约3KB,核心材料为“附录6 相控阵”,包含完整理论推导、仿真参数设置、计算示例及实验验证过程,从阵元相位配置、瑞利积分求声场,到pencil法简化积分,再到波束形成与TGC信号处理均有涉及。具体包括按阵元数量、间距、发射脉冲等参数设定发射相位,并考虑声波在介质中的折射与反射对声场分布的影响,最终通过接收回波结合逆运算重建图像,可帮助读者快速掌握相控阵超声从物理模型到数值仿真的完整链路。已有391人学习下载,对于希望缩短理论到仿真距离、提高相控阵成像精度的从业者,是一份高密度技术笔记。

1. 相控阵超声声场为什么绕不开瑞利积分

做相控阵超声的人,迟早会撞上瑞利积分。无论是算聚焦延时、看焦点尺寸,还是评估某个自定义阵列的偏转能力,瑞利积分都是那个“绕不开的底层层”。它并不神秘——本质是把每个阵元表面看成无数个点源,把每个点源对空间某点的贡献做叠加,得到整个阵面的声场。这个思路在 Helmholtz 方程线性假设下成立,即声压随激励幅度线性叠加、介质不产生新的频率分量。对绝大多数相控阵超声检测场景(水浸、楔块耦合、钢件内部),这个假设足够可靠。它解决的问题很具体:给一组阵元的延时、幅度和几何位置,算出任意焦点处的声压幅值、波束宽度和旁瓣水平。适合的人是那些需要自己设计探头参数、评估检测覆盖能力、或者在做全聚焦(TFM)之前先验证声场合理性的工程师。反直觉的一点是:瑞利积分不是“精确解”,但工程上比很多所谓的简化公式可用得多,因为它保留了衍射对焦点的真实影响,尤其是近场和偏转角度大的场景,几何声学根本不够用。

2. 瑞利积分的数学模型与离散化实现

2.1 连续卷积形式到离散点源叠加

瑞利积分的常见形式是:

p(x, y, z, t) = (jρ0c / λ) ∫∫S [v_n(x', y') exp(-j k r)] / r dS'

其中 S 是阵元表面,v_n 是表面法向振速,r 是表面点到场点 (x, y, z) 的距离,k = 2πf/c 是波数。这个式子的物理含义是每个面元 dS' 视为一个辐射球面波的点源,振幅正比于该点的振速,相位由距离 r 决定,叠加后形成总声场。它成立的条件是:介质均匀、声压满足标量波动方程、阵元表面为刚性活塞式振动。相控阵探头每个阵元的宽度通常远大于波长(几倍到几十倍),用均匀振速近似足够。

把积分换成有限求和,就是仿真代码的第一版框架。每个阵元划分成若干个矩形小面元,每个小面元中心视为点源,对声场中感兴趣的点累加贡献。这个做法的好处是阵元几何可以任意定义,不规则阵列、楔块分层、曲面探头都能靠改网格来完成。

import numpy as np def rayleigh_pressure(elem_centers, elem_size, grid_points, freq, c, rho0): """ 通过瑞利积分离散化计算相控阵声场 elem_centers: (N, 2) 每个阵元中心的 (x, y),单位 m elem_size: (width, height),阵元的有效辐射尺寸 grid_points: (M, 3) 需要计算声压的空间点 freq: 中心频率 Hz c: 声速 m/s rho0: 介质密度 kg/m^3 """ lam = c / freq k = 2 * np.pi / lam p_total = np.zeros(len(grid_points), dtype=np.complex128) for idx, center in enumerate(elem_centers): subdiv = 8 # 每个阵元划分 8x8 面元 dx = elem_size[0] / subdiv dy = elem_size[1] / subdiv for i in range(subdiv): for j in range(subdiv): # 面元中心坐标 xs = center[0] + (i - subdiv/2 + 0.5) * dx ys = center[1] + (j - subdiv/2 + 0.5) * dy dS = dx * dy # 到场点距离 diff = grid_points[:, :2] - np.array([xs, ys]) r = np.sqrt(diff[:, 0]**2 + diff[:, 1]**2 + grid_points[:, 2]**2) # 避免除零 r[r < 1e-6] = 1e-6 p_total += 1j * rho0 * c * (k / (2 * np.pi)) * np.exp(-1j * k * r) / r * dS return p_total

代码里的关键是subdiv这个参数:每个阵元划分的面元数量直接决定计算精度和耗时。面元尺寸要小于 0.3λ 才能让离散误差不明显。上面代码把每个阵元固定切成 8×8,但实际使用时应该按尺寸除以波长来计算。参数rho0 * c是介质的声阻抗率,对纵波声场只影响绝对幅值,不影响相对分布;如果只关心焦点位置和波束形状,可以省略。

2.2 精度控制:面元尺寸与采样间隔的配合

瑞利积分离散化的误差来源主要有两个:一是面元划分不够细导致球面波叠加时出现相位混叠,二是场点网格间距过大导致焦点峰被漏采。面元尺寸的经验阈值是≤0.25λ,此时旁瓣误差能压到 ±0.5dB 以内。场点网格间距则要≤λ/4,尤其在焦点附近,否则波束宽度算出来会偏大或出现假旁瓣。

另一个被忽略的问题是距离 r 的计算精度。场点坐标和源点坐标都是浮点数,当 r 很大(数十个波长以上)时,exp(-jkr) 的相位对 r 的微小误差极其敏感——k 本身是 2π/λ,r 误差 0.01λ 就能引起 3.6° 相位偏差。所以计算距离时不要用sqrt(x^2 + y^2 + z^2)直接算,而是用hypot类函数。在高精度场景,考虑先用 double 计算,避免 float 截断。

2.3 与近场公式、远场公式的适用边界对比

相控阵声场计算有三层供选择:近场可以用 O'Neil 模型求轴上的解析值,远场可以用 FFT 做 Fraunhofer 近似,中间区域用瑞利积分硬算。参数里有一个无量纲量决定该用哪层:L²/λ 称为瑞利距离或近场长度,其中 L 是阵面最长尺寸。

当目标点到阵面的距离小于 0.5 倍的 L²/λ 时,Fresnel 或 Fraunhofer 近似会引入不可接受的旁瓣误差,这就是瑞利积分的“主场”。大多数相控阵检测的近场长度在几十到几百毫米之间,而检测区域恰好就在这个区间。与其用不恰当的简化,不如把瑞利积分的计算效率和精度妥协处理好。常见做法是离焦平面做粗网格,焦点附件做细网格,分层计算后拼接。

3. 相控阵焦点控制:延时法则与瑞利积分的配合

3.1 从声场反推延时的基本思路

相控阵聚焦的本质是“逆向题”:想让声波在某个位置同相叠加,就应该让每个阵元的声波到达该位置时相位一致。设第 n 个阵元的中心坐标为 (x_n, y_n),焦点坐标为 (x_f, y_f, z_f),则焦点到该阵元的距离 d_n = √[(x_f - x_n)² + (y_f - y_n)² + z_f²]。理想延时 τ_n = d_n / c,即“先给远阵元发波,让波同时到焦点”。这个结论来自几何声学,但验证它是否真的聚焦得好,就必须回到瑞利积分去算焦点处的合成声压——因为真实声场里,阵元不是点源,阵元的有限尺寸会让焦点发生偏移,尤其是偏转角度大的时候。

def compute_delays(elem_centers, focus, c, num_elements): """ 计算聚焦延时,单位为秒 elem_centers: (N, 2) 阵元中心 x, y focus: (x_f, y_f, z_f) 焦点坐标 """ distances = np.hypot(elem_centers[:, 0] - focus[0], elem_centers[:, 1] - focus[1]) distances = np.sqrt(distances**2 + focus[2]**2) # 参考值:取最远距离作为零延时基准 ref = distances.max() delays = (ref - distances) / c return delays # 例:32 阵元,阵元中心距 0.6mm,焦点放在 (0, 0, 30mm) n = 32 pitch = 0.6e-3 centers_x = (np.arange(n) - (n - 1) / 2) * pitch centers = np.stack([centers_x, np.zeros(n)], axis=1) tau = compute_delays(centers, (0, 0, 30e-3), 5920, n) print(tau / 1e-6) # 微秒

这里有一个常犯的错误:先算焦点到各阵元的距离差,然后直接除以声速。这样得到的延时是“从焦点出发到阵元的传播时间”,但激励信号是从阵元出发的。严格来说,信号发射时刻 = 参考时刻 + (焦点到阵元的距离差)/c,与上面的ref - distances等价,但写成ref + distance就不是同一回事了。实际硬件里延时分辨率和通道数由设备决定,软件层输出的是一组相对延时,最大值为零或最小值为零都可以,但必须统一。

3.2 焦点偏移规律:电子偏转与几何偏转的差异

延时法则只是理论值,真实声场焦点会出现偏移,这个偏移能用瑞利积分定量算出来。规律是:当偏转角度小于 20° 时,焦点偏移量很小,接近几何声学预测;偏转角度越大,旁瓣抬升越明显,焦点的实际位置会偏向阵列中心方向偏移。原因也很直观:阵元本身的指向性不是全向的,阵元宽度越接近波长,阵元辐射的指向性越强,偏转方向上的有效振速下降,等效阵面上只有局部在起作用。

用瑞利积分可以把这个效应算出来:给全场点加延时激励,扫描焦点附近小区域的最大声压,看峰值位置和理论焦点差多少。这个操作其实就是一个简化版的相位校准仿真,做一次就能知道要不要在延时里加校正量。中低频相控阵(如 5MHz 以下)通常不需要额外校正,但高频小间距阵列(10MHz 以上)偏转角超过 25° 时必须考虑。

3.3 焦距、孔径与瑞利距离的协调规则

设计检测方案时,焦距选哪个区间,不是随意定的。常规探头的孔径 D 决定了瑞利距离 R = D²/λ。焦点放在 R 以内时,声场处于近场区,焦点处的声压震荡很大——近场轴上本来就有极大极小值交替,焦距偏小可能导致焦点位置刚好落在极小值区,局部声压反而低。工程经验:焦点放在 0.7R 到 2R 之间,以焦平面声束宽度尽量窄为准。

下表给出常用孔径和频率的近场长度,便于快速估算:

频率/MHz阵元数×间距/mm孔径/mm钢中波长/mm近场长度/mm
564×0.638.41.1841247
532×0.825.61.184554
1064×0.319.20.592623
2.2532×1.0322.631389

近场长度都偏大,说明常规相控阵检测实际使用的聚焦深度远在近场内部。这恰好是瑞利积分最擅长覆盖的区域——近场公式在这里完全无法使用,远场近似也不成立。

4. 从单阵元到全矩阵:瑞利积分驱动的相控阵成像路径

4.1 全矩阵采集(FMC)与全聚焦方法(TFM)的声场视图

相控阵不止能做到聚焦偏转,还能做全矩阵采集(FMC):阵列中每个阵元轮流发射,全部阵元同时接收,得到 N×N 条 A 扫信号。全聚焦(TFM)算法把这 N² 条信号按到任意像素点的理论传播时间做相干叠加。这一步的空间分辨率取决于声场在焦点附近的聚焦能力,本质上就是瑞利积分里每个阵元球面波叠加的结果。

TFM 的成像质量由声场质量和延时计算精度共同决定。声场质量好,指阵元的孔径和频率匹配,焦点附近的焦斑小、旁瓣低;而延时计算的精度则取决于声速模型——各向同性材料直接用纵波声速,各向异性材料就要用施耐德模型先算出群速度角度曲线。瑞利积分在这一步的价值在于:可以先仿真阵列在某材料中的声场,验证能不能聚焦到目标区域,再决定要不要上 FMC。

def tfm_image(fmc_data, tx_elements, rx_elements, grid_x, grid_z, c, dt): """ 简易 TFM 成像:只做纵波直通路径 fmc_data: (N*N, T) 每行是一条 A 扫 tx_elements: 第 i 条 A 扫的发射阵元编号 rx_elements: 第 i 条 A 扫的接收阵元编号 """ image = np.zeros((len(grid_z), len(grid_x))) for iz, z in enumerate(grid_z): for ix, x in enumerate(grid_x): val = 0.0 for i in range(len(tx_elements)): xt = elements_x[tx_elements[i]] xr = elements_x[rx_elements[i]] d_tx = np.hypot(xt - x, z) d_rx = np.hypot(xr - x, z) time_idx = int((d_tx + d_rx) / c / dt) if time_idx < fmc_data.shape[1]: val += fmc_data[i, time_idx] image[iz, ix] = np.abs(val) return image

这段代码是 TFM 的最简骨架,实际工作时的差异在于:真实验收数据要先做 Hilbert 变换取包络,声速 c 如果是楔块耦合还得分段计算(楔块内和工件内),时间索引要加窗避免直达波混叠。而对很多工程师来说,这个写法的价值在于能直接看到为什么焦区声场会影响成像——如果瑞利积分显示某个深度处声场旁瓣高,TFM 图里同样的位置就会出现伪像重复。

4.2 用瑞利积分做阵列性能预检的两条命令

在买探头之前或者在编写检测工艺之前,先跑一个瑞利积分脚本,能把阵列性能看得一清二楚。常见做法是只算两条线:阵面中轴线的声压分布,以及焦点所在平面的横向声压分布。轴线分布告诉你焦点位置是否在实际可用的焦深内;横向分布告诉你焦斑宽度和旁瓣高度。

# 快速预检:沿中轴线扫描,找最大声压位置和 -6dB 焦点范围 z_axis = np.linspace(5e-3, 60e-3, 500) points = np.stack([np.zeros_like(z_axis), np.zeros_like(z_axis), z_axis], axis=1) p_axis = rayleigh_pressure(centers, elem_size, points, freq, c, rho0) amp = np.abs(p_axis) focal_peak_idx = np.argmax(amp) z_peak = z_axis[focal_peak_idx] half_max = amp.max() / 2 within_6db = np.where(amp > half_max)[0] print(f"峰值焦点: {z_peak*1e3:.1f} mm") print(f"-6dB 焦深范围: {z_axis[within_6db[0]]*1e3:.1f} 到 {z_axis[within_6db[-1]]*1e3:.1f} mm")

运行这个脚本时,把频率、阵元间距、阵元宽度分别做一次扫描,能看到一组规律:阵元间距大于 0.7λ 时,偏转方向会出现栅瓣,这是周期性阵列的固有属性;阵元宽度过窄时灵敏度不足,过宽时波束偏转能力下降。用这组曲线去跟设备供应商的探头参数表对一下,基本能筛掉一半不合适的探头。

4.3 影响成像分辨率的参数:孔径、频带与相位畸变

TFM 图像的横向分辨率由合成孔径决定,而合成孔径的有效尺寸又和声场中偏离焦点后的能量衰减相关。用瑞利积分仿真一个 32 阵元阵列在 30mm 深度处的焦斑宽度,再用 64 阵元阵列跑一遍,可以看出增大孔径对焦点宽度的改善是明显的,代价是近场范围变大,近表面盲区增大。频带宽度对分辨率的影响也类似——宽频信号的中心频率决定焦斑尺寸,但宽带信号在边界处叠加时会有波形畸变,这个畸变在瑞利积分仿真里如果只用单频做,是看不到的,要做宽带仿真就得把多个频率的声场结果做加权叠加。

相位畸变是工业检测里常见但常被忽略的问题。耦合层厚度不均、各向异性材料、楔块磨损,都会让到达焦点的波前不再是理想球面,瑞利积分在均匀介质假设下算出的只是理想声场。检测时若发现旁瓣异常升高,可以反推相位误差量级,再决定是否需要做相位校正或改用自适应聚焦。

5. 边界条件与维数选择:瑞利积分仿真的实用校验技巧

瑞利积分看似简单,但仿真结果对参数设置很敏感,几个小习惯能避免算出表面合理实际离谱的结果。这里的技巧集中在三个方面:维数选择、边界截断和散度校验。

第一是维度选择。不少实现把阵元面积直接设为 dS,算的是三维球面波扩散,但有的文档里把公式改成了二维圆柱波,幅值衰减规律不同。同一套代码如果混用二维和三维公式,远场幅值会差一个 1/√r 因子,轴向衰减趋势完全不同。实现前先确认:探头阵元是矩形,算三维声场,每个点源的衰减是 1/r;如果截面是对称柱面波,衰减是 1/√r。检测钢中的矩形阵列,一律按三维处理。

第二是边界截断。网格范围开太大,内存吃不消;开太小,边缘处的声场会被截断造成假干涉。推荐做法是让计算区域在横向延伸至少超过阵列孔径的 1.5 倍,轴向覆盖 0.5 倍近场深度。焦点所在的平面,网格间距必须小于 λ/4,其余区域可以放宽到 λ/2,分块计算后拼接。实际操作中,先算粗网格定位焦点,再在焦点附近加密一次,速度能快 10 倍以上。

# 散度校验:总功率守恒 # 在场点离阵列足够远去取两个球面,比较积分声强 r1, r2 = 80e-3, 100e-3 theta = np.linspace(0, np.pi, 100) # 极角采样 s1 = np.sum(np.abs(rayleigh_pressure(centers, elem_size, points_on_sphere(r1, theta), freq, c, rho0))**2) * r1**2 s2 = np.sum(np.abs(rayleigh_pressure(centers, elem_size, points_on_sphere(r2, theta), freq, c, rho0))**2) * r2**2 print(f"球面1归一化声强: {s1:.3e}, 球面2: {s2:.3e}, 比值: {s2/s1:.3f}")

第三是单频 vs 宽带。瑞利积分天然是单频计算,工程中用的检测信号是宽带脉冲,如果只看中心频率的声场,焦点处的干涉图样会比脉冲激励更剧烈。做定量声场评估(比如测量焦斑宽度)时,用 3-5 个频率点分别计算,再按激励脉冲频谱加权叠加,这个流程虽然耗时,但结果和实测超声检测的灵敏度曲线吻合度明显更好。自制探头或调试楔块时,这套流程值得跑一次,形成自己常用探头的声场校准记录。

最后一个小技巧是保存仿真数组时用原始二进制格式而不是 CSV,处理 64×64×400 的网格点时能省下大量磁盘和读取时间。瑞利积分的计算速度通常以分钟计,每次调参都从头算一遍不划算,把已算好的区域缓存下来,只重算修改过的参数对应的声场块。这套做法熟练之后,测量前的工艺预检时间能压缩到几分钟以内。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询