Field II 超声相控阵成像系列1——复合平面波成像(更正)

文章介绍了超声平面波成像技术,尤其是相控阵成像中如何通过发射多个不同角度的平面波来提高成像质量和对比度。利用FieldII软件进行仿真相控阵的复合平面波成像,通过设置发射和接收延时来改善成像效果,同时讨论了坐标转换和波束形成的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       
       超声平面波成像仅一次发射就可以获取整个感兴趣区域图像信息,且具有较高的帧频,但由于发射声场不聚焦,图像对比度和分辨率降低。为了提高成像质量,可以通过发射若干个不同角度的平面波,进行相干叠加以提高成像质量。

      此处以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 结果

### 超声相控阵Field II声场建模与仿真 #### 方法概述 超声相控阵技术依赖于多个换能器元件组成的阵列,这些元件能够发射和接收超声波。通过控制各元件之间的相对相位差,可以在特定方向上形成聚焦点或扫描整个区域。对于Field II软件而言,主要关注的是从射频(RF)信号到最终图像形成的全过程。 #### 主要步骤说明 - **数据采集**:使用MATLAB或其他编程语言编写脚本读取来自硬件设备的数据流; - **预处理阶段**:应用希尔伯特变换将原始时间序列转换为解析信号形式,以便后续操作更加简便高效; - **包络提取**:采用`abs()`函数获取复数值的绝对值得到瞬时振幅信息; - **重建算法实现**:根据具体应用场景选择合适的成像模式(B-mode, M-mode等),并调用相应库函数完成图像重构过程[^3]。 #### 使用工具推荐 为了简化开发流程并提高效率,在进行上述工作时建议选用如下几种常用工具: - **MATLAB/Simulink**: 提供了丰富的内置功能以及第三方插件支持,非常适合科研人员快速搭建原型系统; - **Python (NumPy/Pandas/SciPy)**: 开源社区活跃度高,拥有大量现成模块可供直接调用,适合大规模数据分析任务; - **CUDA/OpenCL**: 如果涉及到高性能计算需求,则可考虑利用GPU加速运算性能。 #### 学习资源链接 针对初学者来说,可以从官方文档入手逐步深入理解各个知识点: - [MathWorks 官网](https://www.mathworks.com/products/matlab.html): MATLAB 的官方网站提供了详尽的帮助手册和技术白皮书下载服务; - GitHub 上有许多开源项目实现了类似的案例研究,可以通过搜索关键词找到感兴趣的仓库地址加以学习借鉴。 ```matlab % 示例代码片段展示如何加载数据文件并执行基本处理操作 data = load('sample_data.mat'); % 加载样本数据集 signal = data.signal; % 获取其中的时间序列向量 analytic_signal = hilbert(signal); % 应用Hilbert变换得到分析信号 envelope = abs(analytic_signal); % 计算包络线作为输出结果 plot(envelope); title('Envelope of the Analytical Signal'); xlabel('Sample Index'); ylabel('|A(t)|'); ```
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值