【学习记录】射线补偿原理与实现:从物理模型到MATLAB代码
在经颅超声聚焦中,颅骨会引入严重的相位畸变和幅度衰减。射线补偿(Ray Compensation)是一种快速预补偿方法,通过沿直线积分介质参数,计算每个通道的额外延时和衰减,然后反向补偿。本文从原理、数学公式、离散实现、补偿逻辑到完整实现链条,系统梳理射线补偿的全部知识点,并对照实际脚本说明其局限。
📌 目录
一、原理:一句话
把声波从阵元到焦点的路径近似成一条直线,沿这条线积分介质的慢度和衰减,得到每通道的额外延时和额外衰减,然后反向补偿。
二、物理模型
2.1 声波走直线
真实声波在骨-水界面会折射,路径弯曲。射线法忽略折射,假设波沿直线从阵元走到焦点。
⚠️ 这是一个近似,但计算极快,适合快速预检。
2.2 沿直线积分
对每个阵元,画一条到焦点的直线。直线上每一点的介质参数(声速、衰减)从 k-Wave 的介质网格里插值得到。
沿这条线积分:
- 慢度积分 → 总传播时间
- 衰减积分 → 总衰减
2.3 减去纯水参考
得到"额外延时"和"额外衰减":

💡 这两个差值才是颅骨引入的畸变,需要补偿。
三、数学公式
3.1 额外延时
总传播时间:

纯水参考时间:

额外延时:

3.2 额外衰减
幂律衰减模型:

沿直线积分:

额外衰减:

相对幅度:

四、离散实现:梯形积分
连续积分在代码里用梯形法离散:
matlab
% 1. 把直线分成 nIntervals 段
nIntervals = ceil(L / sampleStepMm); % 采样间隔 = 网格步长的一半
t = linspace(0, 1, nIntervals+1);
% 2. 计算每个采样点的坐标
pointsMm = elementMm + t * (focusMm - elementMm);
% 3. 插值查介质参数
soundSpeed = interpolants.soundSpeed(pointsMm);
alphaCoeff = interpolants.alphaCoeff(pointsMm);
% 4. 梯形权重
weights = ones(nSamples, 1);
weights(1) = 0.5; weights(end) = 0.5;
% 5. 积分
dsMm = L / nIntervals;
travelTimeSec = (dsMm * 1e-3) * sum(weights .* (1 ./ soundSpeed));
alphaIntegral = (dsMm / 10) * sum(weights .* alphaCoeff);
💡 梯形法:把积分区间分成小段,每段用梯形面积近似,再求和。
五、补偿逻辑
5.1 延时补偿
extraDelayUs 是绝对延时------穿骨越厚越大。
补偿:
matlab
ref = max(extraDelayUs);
compDelay = ref - extraDelayUs;
物理直觉:
- 穿骨最厚的通道延时最大 → 补偿量 = 0(它已经最晚)
- 穿骨最薄的通道延时最小 → 补偿量最大(它需要等)
💡 这样所有通道同时到达焦点。
5.2 幅度补偿
relativeAmplitudeScale 是接收幅度比。
补偿:
matlab
gain = relativeAmplitudeScale .^ (-gamma); % gamma 控制强度
gain = gain / mean(gain); % 归一化
gain = (1-blend) + blend * gain; % 与均匀混合
gain = max(minGain, min(maxGain, gain)); % 限幅
gamma:
| gamma值 | 含义 |
|---|---|
gamma = 0 |
不补幅度 |
gamma = 0.5 |
半补(ray_compensated) |
gamma = 1 |
全补 |
⚠️ 限幅:防止把噪声放大。
六、完整实现链条
1. 读探头坐标 + 颅骨介质
↓
2. 对每个有效阵元:
a. 画直线到焦点
b. 沿直线采样介质参数
c. 梯形积分得时间和衰减
d. 减去纯水参考
↓
3. 输出 focus_channel_attenuation.csv:
extra_delay_us, relative_amplitude_scale
↓
4. 补偿:
compDelay = max(extraDelay) - extraDelay
gain = relativeAmplitudeScale .^ (-gamma)
↓
5. 构造发射信号:
source.p(k,:) = gain(k) * circshift(pulse, compDelay(k)/dt)
↓
6. 跑 k-Wave,记录焦平面,算指标
七、对应脚本
| 脚本 | 职责 |
|---|---|
simulate_skull_attenuation |
画直线、积分、输出补偿表 |
skull_focus_ray_phase_compensated_export |
只补延时,幅度均匀 |
skull_focus_ray_compensated_export |
延时 + 轻度幅度 |
skull_focus_simulation_export |
构造发射信号、跑仿真、算指标 |
八、局限
| 假设 | 真实 | 后果 |
|---|---|---|
| 直线传播 | 骨-水界面强折射 | 相位残差几十度 |
| 无多次散射 | 颅骨内反射、模式转换 | 能量预测偏差 |
| 点源阵元 | 有限尺寸 2.5 mm | 高估焦点锐度 |
| 静态介质 | 颅骨不均匀 | 个体差异 |
⚠️ 折射是最大误差源。这就是为什么射线补偿只能到 20--30%,而全波时反能到 50--80%。
九、总结
射线补偿 = 沿直线积分介质参数,得额外延时和衰减,反向补偿。
| 维度 | 内容 |
|---|---|
| 原理 | 直线近似 + 数值积分 |
| 实现 | griddedInterpolant 查参数 + 梯形法积分 |
| 补偿 | 延时取 max - 当前,幅度取 scale^(-gamma) |
| 局限 | 忽略折射,精度有限 |
| 定位 | 快速预检,不是最终方案 |
一句话总结:射线补偿是经颅超声聚焦的快速预补偿方法,沿直线积分介质慢度和衰减,得到每通道的额外延时和衰减,反向补偿后让所有通道同时到达焦点。但它忽略了折射这一最大误差源,精度有限,只适合快速预检。