【学习记录】射线补偿原理与实现:从物理模型到MATLAB代码

【学习记录】射线补偿原理与实现:从物理模型到MATLAB代码

在经颅超声聚焦中,颅骨会引入严重的相位畸变和幅度衰减。射线补偿(Ray Compensation)是一种快速预补偿方法,通过沿直线积分介质参数,计算每个通道的额外延时和衰减,然后反向补偿。本文从原理、数学公式、离散实现、补偿逻辑到完整实现链条,系统梳理射线补偿的全部知识点,并对照实际脚本说明其局限。


📌 目录

  1. 原理:一句话
  2. 物理模型
  3. 数学公式
  4. 离散实现:梯形积分
  5. 补偿逻辑
  6. 完整实现链条
  7. 对应脚本
  8. 局限
  9. 总结

一、原理:一句话

把声波从阵元到焦点的路径近似成一条直线,沿这条线积分介质的慢度和衰减,得到每通道的额外延时和额外衰减,然后反向补偿。


二、物理模型

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)
局限 忽略折射,精度有限
定位 快速预检,不是最终方案

一句话总结:射线补偿是经颅超声聚焦的快速预补偿方法,沿直线积分介质慢度和衰减,得到每通道的额外延时和衰减,反向补偿后让所有通道同时到达焦点。但它忽略了折射这一最大误差源,精度有限,只适合快速预检。

相关推荐
yangmu32031 小时前
单片机发展史:从 8051 到 AIoT 芯片
学习
Chloe.Zz1 小时前
一篇入门Agent
开发语言·前端·javascript
余醉 | dtminer1 小时前
3337 OTU×999置换:群落构建mBio 高分沉积物
开发语言·r语言·微生物学
白杨尚青1 小时前
C++入门篇(十八):模板进阶——非类型参数、特化全家桶与分离编译(收官篇)
开发语言·c++·笔记·模板·偏特化·分离编译
qq_284274051 小时前
液压泵类型结构与液压马达笔记:柱塞泵奇数柱塞减震槽通轴斜轴、单双作用叶片泵八段曲线限压变量、齿轮泵排量困油径向力端面补偿、内啮合螺杆泵与高低速马达(含考点)
笔记·学习·自动化·制造
云半S一2 小时前
Agent学习总结二
经验分享·笔记·学习·agent
彧azz2 小时前
B-树学习总结:从结构特性到核心操作的系统复习
数据结构·笔记·b树·学习
燕落南枝2 小时前
HTML 学习笔记:从基础到音频标签
笔记·学习·html
qetfw2 小时前
Bash 内置与外部命令:type、command 与 builtin 验证
linux·开发语言·bash