超声成像发射声场仿真(Ultrasound Emit Field Simulation)

根据超声波阵面的实现方式可以将超声成像分为平面波(plane wave)成像、扩散波(diverging wave)成像、聚焦(focus)成像。为了实现上述成像方式需要施加不同的发射延时形成相应的波阵面。不同的波阵面形成的发射声场表现不同,了解不同成像方式的声场有助于我们加深超声成像的了解。

此处以Field II软件仿真不同成像方式发射声场。发射延时可以使用Filed II自带函数生成,由于实际工程需要发射延时是由工程师去计算配置的,下文列出了发射延时的计算方式。

Field_II是丹麦超声专家J. A. Jensen等利用声学原理设计的一个超声系统。它可以仿真超声探头所形成的声场和超声图像等。这里默认已经对Filed _II有一定了解。

一、平面波发射声场

1、线阵探头/相控阵探头


超声相控阵仿真python 超声相控阵仿真技术_开发语言


上图是线阵/相控阵平面波正常发射和偏转发射的示意图,对于平面波没有聚焦的概念,因此只要使激励阵元的延时形成平面波就可以。

对于正常发射各阵元发射延时全为0,对于偏转发射(包括正常发射)延时计算为:
超声相控阵仿真python 超声相控阵仿真技术_开发语言_02
角度为负往左偏转,角度为正往右偏转,对于以后的扫描偏转方向沿用这一规则。

当计算完成发射延时,就可以进行声场仿真。

首先需要对配置探头参数进行配置,参数如下:

clear all
close all
clc
plt = 1;%是否绘制
f0 = 7500000;
N_elements = 128;
width = 0.17e-3;
height = 5e-3;
kerf = 0.03e-3;
focus = 20e-3;
fs = 200e6;
Th = xdc_linear_array (N_elements, width, height, kerf, 1, 10,[0,0,focus]);
Rh = xdc_linear_array (N_elements, width, height, kerf, 1, 10,[0,0,focus]);
if plt
probeplt(Th);
end


超声相控阵仿真python 超声相控阵仿真技术_三角函数_03

设置脉冲相应、阵元位置及平面波发射角度

%设置2个周期高斯脉冲相应、1个周期激励脉冲
dt  = 1/fs;
t0 = (-1/f0): dt:(1/f0);
impulse_response = gauspuls(t0, f0);
impulse_response = impulse_response-mean(impulse_response);
pulse_duration = 1;
te = 0:dt:pulse_duration/f0;
excitation = square(2*pi*f0*te);
%设置脉冲相应
xdc_impulse (Th, impulse_response);
xdc_impulse (Rh, impulse_response);
%设置激励脉冲
xdc_excitation (Th, excitation);
%发射角度
steer_angle = [-15,0,15];
%阵元位置
if strcmp(probetype,'linear')
    x_ele = ([0:N_elements-1]-(N_elements-1)/2).*pitch;
    probe_xyz = [x_ele',zeros(length(x_ele),1),zeros(length(x_ele),1)];
end


超声相控阵仿真python 超声相控阵仿真技术_3c_04

计算发射声场

%设置发射声场显示区域
x = linspace(-2e-2,2e-2,128);
z = linspace(0,4e-2,256);

emit_field = zeros(256,128,length(steer_angle));
for i = 1:length(steer_angle)
    %实际工程中发射变迹通过发射波形去控制,以后再实施,这里不做发射变迹
    xdc_apodization(Th,0,ones(1,N_elements));
    %设置平面波发射延时
    delay(i,:) = plane_wave_tranmit_delay(probe_xyz,steer_angle(i)*pi/180,c,probetype);
    xdc_times_focus(Th,0,delay(i,:));
    %计算发射声场
    emit_field(:,:,i) = emit_field_calc(Th,x,z);
end

无偏转平面波延时设置也可以通过下面进行

xdc_center_focus(Th,[0,0,0]);
xdc_focus(Th,0,[0,0,0]);

发射声场field II计算函数

[xi,zi] = meshgrid(x,z);
xi = xi(:);
zi = zi(:);
emit_field = calc_hp(Th,[xi,zeros(length(xi),1),zi]);

超声相控阵仿真python 超声相控阵仿真技术_matlab_05

从上图可以看出发射延时有负数,实际工程中会给一个t进行补偿,保证延时大于0。

2、凸阵

超声相控阵仿真python 超声相控阵仿真技术_三角函数_06

上图是凸阵平面波正常发射和偏转发射的示意图

对于正常发射各阵元发射延时全为0,对于偏转发射(包括正常发射)延时计算为:
超声相控阵仿真python 超声相控阵仿真技术_开发语言_07
超声相控阵仿真python 超声相控阵仿真技术_三角函数_08为平面波偏转角度,超声相控阵仿真python 超声相控阵仿真技术_matlab_09为阵元相对中间线的夹角

另一种计算发射延时方法是计算定点到阵元超声相控阵仿真python 超声相控阵仿真技术_超声相控阵仿真python_10波阵面(与波阵面垂直)的切线,通过切线可以计算出阵元到波阵面的距离,然后转化为发射延时。

代码框架与上面一致,结果为

超声相控阵仿真python 超声相控阵仿真技术_matlab_11

二、扩散波发射声场

扩散波与平面波都可以通过一次发射获取较大的图像视野,与平面波不同的是扩散波虚拟了一个点源

1、线阵探头/相控阵探头

超声相控阵仿真python 超声相控阵仿真技术_超声相控阵仿真python_12

此处定义虚拟源的半径为超声相控阵仿真python 超声相控阵仿真技术_三角函数_13,偏转角度为超声相控阵仿真python 超声相控阵仿真技术_超声相控阵仿真python_14

超声相控阵仿真python 超声相控阵仿真技术_超声相控阵仿真python_15

2、凸阵

凸阵原理与线阵类似

超声相控阵仿真python 超声相控阵仿真技术_开发语言_16

三、聚焦波发射声场

1、线阵探头

聚焦声场的延时使用Field II 自带函数计算,聚焦深度3cm,发射线为中心线,发射延时计算

xdc_center_focus(Th,[fcous_x,0,0]);
xdc_focus(Th,0,[fcous_x,0,fcous_z]);

或是通过自行计算的延时导入Filed II

delay = fcous_wave_tranmit_delay(probe,loc_x,fcous_depth,steer_angle*pi/180,c);
xdc_times_focus(Th,0,delay);

偏转-15自行计算与Fileld II延时对比,符合预期

超声相控阵仿真python 超声相控阵仿真技术_超声相控阵仿真python_17

超声相控阵仿真python 超声相控阵仿真技术_超声相控阵仿真python_18

2、凸阵探头

代码框架与上面一样,发射线为中心线,聚焦深度4cm,结果为

超声相控阵仿真python 超声相控阵仿真技术_超声相控阵仿真python_19

3、相控阵探头

相控阵探头发射线永远位于中心线处,聚焦延时修改为

xdc_center_focus(Th,[0,0,0]);
xdc_focus(Th,0,[fcous_x,0,fcous_z]);

发射线为中心处,角度为[-30,0,30],聚焦深度6cm,结果为

超声相控阵仿真python 超声相控阵仿真技术_开发语言_20

总结

设置不同的发射延时,可以实现不同的成像方式,同时将自己计算的发射延时与Field II做对比有助于验证发射延时的正确性。