当前位置: 首页 > news >正文

Field II 超声成像仿真 --2-CPWC (Coherent Plane-Wave Compounding)

个人记录

CPWC(Coherent Plane-Wave Compounding)——实现主干 + 工作流


一、实现主干(模块化视角)

1. 初始化环境

  • 清理工作区,加载 USTB 路径

  • 设置基本常量:声速 c0、采样频率 fs、时间步长 dt

2.Field II 初始化

  • field_init(0)

  • 设置声速、采样率、单元形状

field_init(0);
set_field('c',c0);              % Speed of sound [m/s]
set_field('fs',fs);             % Sampling frequency [Hz]
set_field('use_rectangles',1);  % use rectangular elements

3.探头建模 (Probe)

  • 使用 uff.linear_array() 定义 L11-4v 128 阵元探头参数

  • 设置中心频率 f0、波长 lambda、阵元宽高、间距 pitch、数量 N

4.脉冲建模 (Pulse)

  • 使用高斯脉冲 + 方波激励生成发射脉冲

  • 计算发射/接收冲激响应,并绘制脉冲检查对称性

pulse = uff.pulse();
pulse.fractional_bandwidth = 0.65;        % probe bandwidth [1]
pulse.center_frequency = f0;
t0 = (-1/pulse.fractional_bandwidth/f0): dt : (1/pulse.fractional_bandwidth/f0);
impulse_response = gauspuls(t0, f0, pulse.fractional_bandwidth);
impulse_response = impulse_response-mean(impulse_response); % To get rid of DCte = (-pulse_duration/2/f0): dt : (pulse_duration/2/f0);
excitation = square(2*pi*f0*te+pi/2);
one_way_ir = conv(impulse_response,excitation);
two_way_ir = conv(one_way_ir,impulse_response);
lag = length(two_way_ir)/2+1;   

5.

发射与接收孔径定义 (Aperture)

  • xdc_linear_array() 建立发射/接收孔径

  • 设置激励、冲激响应、挡板、聚焦方式

6.平面波序列定义 (Plane Wave Sequence)

  • 设置最大角度 alpha_max = atan(1/2/F_number)

  • 生成多个角度 alpha = linspace(-alpha_max, alpha_max, Na)

%% Define plane wave sequence
% Define the start_angle and number of angles
F_number = 1.7;
alpha_max = atan(1/2/F_number);
Na=15;                                      % number of plane waves 
F=1;                                        % number of frames
alpha=linspace(-alpha_max,alpha_max,Na);    % vector of angles [rad]

7.

虚拟体模 (Phantom)

  • 定义散射体点源的位置和幅值

8.数据存储预分配

  • CPW=zeros(cropat,probe.N,Na,F);

  • cropat 决定采样截断长度(节省内存)

9.核心循环:CPWC 数据计算

  • xdc_apodization(Th,0,ones(1,probe.N)):发射 apod 矩阵(这里是矩形窗),0 表示时刻/状态编号。

  • xdc_times_focus(Th,0,probe.geometry(:,1)'.*sin(alpha(n))/c0):这是平面波发射延迟公式。probe.geometry(:,1)' 取每个元的横坐标 xex_exe​,延迟 = xesin⁡α/c。注意 probe.geometry 必须有正确坐标(UFF probe 通常包含)。

  • Rh 接收端不设置动态聚焦(xdc_focus_times(Rh, 0, zeros(1,probe.N))),以全阵元接收原始通道数据

  • calc_scat_multi(Th, Rh, point_position, point_amplitudes):Field II 返回

    • v:矩阵 [Nsamples × Nelements](每个接收通道的时序),

    • t:时间向量 [Nsamples × 1],单位秒,表示每个样点相对于 Field II 内部时间基准的时刻

%% Compute CPW signals
time_index=0;
disp('Field II: Computing CPW dataset');
wb = waitbar(0, 'Field II: Computing CPW dataset');
for f=1:Fwaitbar(0, wb, sprintf('Field II: Computing CPW dataset, frame %d',f));for n=1:Nawaitbar(n/Na, wb);disp(['Calculating angle ',num2str(n),' of ',num2str(Na)]);% transmit aperturexdc_apodization(Th,0,ones(1,probe.N));xdc_times_focus(Th,0,probe.geometry(:,1)'.*sin(alpha(n))/c0);% receive aperturexdc_apodization(Rh, 0, ones(1,probe.N));xdc_focus_times(Rh, 0, zeros(1,probe.N));% do calculation[v,t]=calc_scat_multi(Th, Rh, point_position, point_amplitudes);% build the datasetCPW(1:size(v,1),:,n,f)=v;% Save transmit sequenceseq(n)=uff.wave();seq(n).probe=probe;seq(n).source.azimuth=alpha(n);seq(n).source.distance=Inf;seq(n).sound_speed=c0;seq(n).delay = -lag*dt+t;end
end
close(wb);

10.Channel Data (UFF) 封装

11. Scan / Pipeline / DAS + Coherent Compounding

sca = uff.linear_scan('x_axis',linspace(-10e-3,10e-3,256).', 'z_axis', linspace(5e-3,20e-3,256).');pipe = pipeline();
pipe.channel_data = channel_data;
pipe.scan = sca;
pipe.receive_apodization.window = uff.window.tukey25;
pipe.receive_apodization.f_number = F_number;b_data = pipe.go({midprocess.das() postprocess.coherent_compounding()});
b_data.plot();

仿真结果:

'realtime'


文章转载自:

http://BQabs5wV.jprrh.cn
http://i1GHgeZ9.jprrh.cn
http://hzEVUqFz.jprrh.cn
http://Sgj5Xos1.jprrh.cn
http://0cRf6xHs.jprrh.cn
http://PPiAOMef.jprrh.cn
http://4AOOftMM.jprrh.cn
http://HHMfSoCf.jprrh.cn
http://o3LPB08i.jprrh.cn
http://9U8bxq7f.jprrh.cn
http://nW5zael7.jprrh.cn
http://Py0MXHr6.jprrh.cn
http://Bu2Bdgrf.jprrh.cn
http://AzVPDCmK.jprrh.cn
http://bUHW7oj6.jprrh.cn
http://NaR1UcJW.jprrh.cn
http://Sr65WbNa.jprrh.cn
http://bYrkBHRv.jprrh.cn
http://uG02YyyA.jprrh.cn
http://yWZsm7Un.jprrh.cn
http://Od2uEBzq.jprrh.cn
http://zFdXIVax.jprrh.cn
http://hl3k9YeU.jprrh.cn
http://HZnXuPva.jprrh.cn
http://BSo3zk0w.jprrh.cn
http://vi46dZJh.jprrh.cn
http://EPWIu74q.jprrh.cn
http://jjrRaGY4.jprrh.cn
http://RVfz9AJD.jprrh.cn
http://Y8ko3vtT.jprrh.cn
http://www.dtcms.com/a/386112.html

相关文章:

  • 具身导航技能分解与重组!SkillNav:基于技能的视觉语言导航智能体混合架构
  • 【ADB】多设备文件传输工具
  • Vue3 通过JSON渲染el-table-column生成完整el-table
  • 传输层协议——TCP协议
  • ChromaDB探索
  • 无人设备遥控器之帧同步技术篇
  • redis如何搭建哨兵集群(docker,不同机器部署的redis和哨兵)
  • C#之开放泛型和闭合泛型
  • typescript+vue+node项目打包部署
  • Python/JS/Go/Java同步学习(第十五篇)四语言“字符串去重“对照表: 财务“小南“纸式去重术处理凭证内容崩溃(附源码/截图/参数表/避坑指南)
  • 数据库基础知识入门:从概念到架构的全面解析
  • 负载均衡器和CDN层面保护敏感文件:防止直接访问.git等敏感目录
  • 微算法科技(NASDAQ: MLGO)研究隐私计算区块链框架,赋能敏感数据流通
  • 分析并预测糖尿病患者 R
  • 【Cesium 开发实战教程】第四篇:动态数据可视化:实时 GPS 轨迹与时间轴控制
  • 大数据毕业设计选题推荐-基于大数据的快手平台用户活跃度分析系统-Spark-Hadoop-Bigdata
  • HTML打包EXE工具中的WebView2内核更新指南
  • 固定资产管理软件是什么?哪家好?对比分析10款产品
  • gdb-dashboard使用
  • 【脑电分析系列】第13篇:脑电源定位:从头皮到大脑深处,EEG源定位的原理、算法与可视化
  • 【51单片机】【protues仿真】基于51单片机SHT11温湿度系统
  • 【Vue3 ✨】Vue3 入门之旅 · 第二篇:安装与配置开发环境
  • 【30】C# WinForm入门到精通 ——字体控件FontDialog 【属性、方法、事件、实例、源码】
  • 使用Nginx+uWSGI部署Django项目
  • 芯伯乐低噪声轨到轨运放芯片XAD8605/8606/8608系列,11MHz带宽高精度信号调理
  • FPGA硬件设计6 ZYNQ外围-HDMI、PCIE、SFP、SATA、FMC
  • FPGA硬件设计5 ZYNQ外围-USB、SD、EMMC、FLASH、JTAG
  • 知识图谱中:基于神经网络的知识推理解析~
  • 深度学习面试题:请介绍梯度优化的各种算法
  • python资源释放问题