超声平面波成像仅一次发射就可以获取整个感兴趣区域图像信息,且具有较高的帧频,但由于发射声场不聚焦,图像对比度和分辨率降低。为了提高成像质量,可以通过发射若干个不同角度的平面波,进行相干叠加以提高成像质量。
此处以Field II软件仿真相控阵的复合平面波成像。
图1 相控阵成像空间坐标
图1为相控阵成像的成像空间坐标,X轴代表成像的Lateral方向,沿换能器阵列;Z轴代表Axial方向,与超声传播方向平行;Y轴代表Elevation方向。
图2 偏转角度平面波示意图
图2为相控阵平面波偏转发射的示意图,对于无偏转角度,可使各阵元发射延时全为0,对于偏转发射(包括正常发射)延时计算为:
tx_d=pitch*[0:number_of_ele-1]*sin(steer);
偏转角度表示为负往左偏转,角度为正往右偏转。
在波束合成中时,采用最常用的延时叠加算法,延时由两部分构成发射延时Tx 和接收延时Rx ,在成像过程中需要减去起始采样时间tstart,在实际工程中tstart可以代表波束合成参数准备时间、声束在透镜中传播时间等,最终成像的延时表示为:
delay_t=Tx+Rx-tstart;
Tx=(z(k)*cos(TXangle) + (x(k)+ halfaper)*sin(TXangle))/c; % TX distance
Rx = (sqrt((xT-x(k)).^2 + z(k).^2))/c; % RX distance
halfaper = sign(TXangle)*xT(end);
其中tstart可有Field II中 calc_scat_multi 函数提供, c为声速,[x(k),z(k)] 为像素点坐标。xT为换能器阵元坐标。
需要注意的是相控阵成像是成像区域为扇形区域,并非矩形区域,如下图所示,因此在做延时叠加时,需要将极坐标系转化为笛卡尔坐标系。
仿真程序
1. 参数设置
%% specify trans parameters
trans.name='P7-4';
trans.fc=6e6;
trans.numele = 64;
trans.width =136.9e-6; % width in mm
trans.pitch = 171.1e-6; % Spacing between elements in mm.
trans.kerf=trans.pitch-trans.width;
trans.heigh=14e-3;
trans.elevationFocus =60e-3; % nominal elevation focus depth from lens on face of transducer (spec)
trans.focus=[0 0 100e6]/1000;
trans.ElementPos = trans.pitch*(-((trans.numele-1)/2):((trans.numele-1)/2));
trans.c=1540; % speed of sound
xT=trans.ElementPos;
2.设置相控阵成像视角,成像深度,偏转角度
userset.theta = -pi/4;
userset.fs=100e6; % sampling frequency
userset.dep1=0e-3; % image start depth
userset.dep2=40e-3; % image end depth
userset.lat1=trans.ElementPos(1); %image start lateral position
userset.lat2=trans.ElementPos(end); %imade end lateral position
userset.angrange=20;
userset.angnum=21;
3 设置阵元激励以及脉冲响应
%% generate TX array
emit=xdc_linear_array(trans.numele,trans.width,trans.heigh,trans.kerf,3,10,trans.focus);
% generate RX array
rcv=xdc_linear_array(trans.numele,trans.width,trans.heigh,trans.kerf,3,10,trans.focus);
%% set implse response
impulse=sin(2*pi*trans.fc*(0:1/userset.fs:2/trans.fc));
impulse_response=impulse.*hanning(max(size(impulse)))';
xdc_impulse(emit,impulse_response); %set emit aperture impulse response
xdc_impulse(rcv,impulse_response);
%% set exciting of TX array
excitation=sin(2*pi*trans.fc*(0:1/userset.fs:2/trans.fc)); %set excitation
xdc_excitation(emit,excitation); %set emit aperture excitation
%% set frequency of sampling
set_sampling(userset.fs)
4 生成仿真数据
Angles= Anglearange(userset.angrange,userset.angnum);
for i=1:userset.angnum
txsteer=Angles(i);
%%
tx_d=plane_wave_delayt(trans,txsteer);
xdc_apodization(emit,0,ones(1,trans.numele));
xdc_apodization(rcv,0,ones(1,trans.numele));
xdc_center_focus(emit,[0 0 0]);
xdc_focus_times(emit,0,tx_d);
xdc_focus_times(rcv,0,zeros(1,trans.numele));
%% set point target
point_pos=[
-2 0 10;
2 0 10;
-2 0 15;
2 0 15;
-2 0 20;
2 0 20;
-2 0 25;
2 0 25;
-2 0 30;
2 0 30;
-2 0 35;
2 0 35;]/1000;
point_amp=20*ones(1,max(size(point_pos)));
[v_temp,tstart(i)]=calc_scat_multi(emit,rcv,point_pos,point_amp');
rf_data(1:max(size(v_temp)),:,i)=v_temp;
end
5.波束形成
[xx,zz]=ImageRegion(userset.lat1,userset.lat2,userset.dep1,userset.dep2);
x=xx(Region.idx);
z=zz(Region.idx);
rf=hilbert(rf_data);
dasdata = zeros(size(xx,1),size(xx,2),userset.angnum);
tic
for ii=1:userset.angnum
rf_an=rf(:,:,ii);
TXangle = Angles(ii);
halfaper = sign(TXangle)*xT(end);
%% Do Imaging
dTX = z*cos(TXangle) + (x+ halfaper)*sin(TXangle); % TX distance
dRX = sqrt((xT-x).^2 + z.^2); % RX distance
tau = (dTX + dRX) / trans.c; % TX+RX travel time
tau=dTX+dRX-tstart(ii);
dasdata(:,:,ii)=das(rf_an,tau,trans)
end
5 成像
migSIG1=sum( dasdata,3);
FrameData = abs(migSIG1);
f1 = figure;
imagesc(X*1000,Z*1000,20*log10(FrameData/maxd),[-60,0]);colorbar;
colormap gray;
axis image
6 结果