k-Wave仿真例程:创建超声换能器并绘制声场分布

k-Wave介绍

k-Wave软件是为了模拟超声波在1D、2D或3D中的传播。
应用示例包括:
- 均匀和非均匀介质中的传播
- 模拟各种类型的传感器
- 模拟多普勒效应
- 衍射、折射和反射
- 光声、超声成像
- 波束合成、成像重建
- 模拟弹性波

安装k-Wave

安装k-Wave需要几个步骤,可能会因您正在使用的操作系统而有所不同。以下是安装k-Wave的一般说明【注意:确保您的系统上安装了MATLAB,因为k-Wave是一个MATLAB工具箱】

  1. 下载k-Wave:访问k-Wave官方网站(https://www.k-wave.org/)下载最新版本的软件。
  2. 提取ZIP文件:下载后,将ZIP文件提取到您选择的文件夹中
  3. MATLAB设置:打开MATLAB并添加k-Wave路径,打开Matlab并包含工具箱路径:<文件><设置路径><添加文件夹><保存>
    在这里插入图片描述

基本仿真流程

  1. 定义:要计算的空间参数、传播介质参数、超声源、传感器
  2. 运行模拟
  3. 可视化结果
    在这里插入图片描述

例程:利用k-Wave创建超声换能器

  1. 设置 K-wave 网格
% 设置完美匹配层大小 perfectly matched layer (PML)
PML_X_SIZE = 20;            % [grid points]
PML_Y_SIZE = 10;            % [grid points]
PML_Z_SIZE = 10;            % [grid points]
% 设置不包括PML的网格点总数
Nx = 128 - 2*PML_X_SIZE;    % [grid points]
Ny = 128 - 2*PML_Y_SIZE;    % [grid points]
Nz = 64 - 2*PML_Z_SIZE;     % [grid points]
% 在不包括PML的x方向上设置所需的网格大小 ROI大小
x = 40e-3;                  % [m]
% 计算网格点之间的间距
dx = x/Nx;                  % [m]
dy = dx;                    % [m]
dz = dx;                    % [m]
% 创建网格 create the k-space grid
kgrid = kWaveGrid(Nx, dx, Ny, dy, Nz, dz);
  1. 设置传播介质参数
medium.sound_speed = 1540;      % [m/s]
medium.density = 1000;          % [kg/m^3]
medium.alpha_coeff = 0.75;      % [dB/(MHz^y cm)]
  1. 设置输入信号
source_strength = 1e6;          % [Pa]
tone_burst_freq = 0.5e6;        % [Hz]
tone_burst_cycles = 5;
% create the input signal using toneBurst 
input_signal = toneBurst(1/kgrid.dt, tone_burst_freq, tone_burst_cycles);
  1. 设置换能器
    在这里插入图片描述
transducer.number_elements = 72;    % 阵元个数
transducer.element_width = 1;       % 阵元宽度 [grid points]
transducer.element_length = 12;     % 阵元高度 [grid points]
transducer.element_spacing = 0;     % 阵元间隙 (kerf) [grid points]
transducer.radius = inf;            % 换能器曲率半径 [m]
% 计算换能器总宽度(网格点数)
transducer_width = transducer.number_elements * transducer.element_width ...
    + (transducer.number_elements - 1) * transducer.element_spacing;
% 利用 transducer_width 将换能器定位在计算网格的中心
transducer.position = round([1, Ny/2 - transducer_width/2, Nz/2 - transducer.element_length/2]);
% 用于波束合成延迟叠加的参数
transducer.sound_speed = 1540;                  % 声速 [m/s]
transducer.focus_distance = 20e-3;              % 焦距 [m]
transducer.elevation_focus_distance = 19e-3;    % elevation plane 仰角平面焦距 [m]
transducer.steering_angle = 0;                  % steering angle 偏转角 [degrees]
% 设置变迹 apodization
transducer.transmit_apodization = 'Rectangular';    
transducer.receive_apodization = 'Rectangular';
% 设置当前激活的换能器阵元 define the transducer elements that are currently active
transducer.active_elements = zeros(transducer.number_elements, 1);
transducer.active_elements(21:52) = 1;
% 设置用于驱动换能器的输入信号 
transducer.input_signal = input_signal;
% 创建换能器
transducer = kWaveTransducer(kgrid, transducer);
  1. 运行模拟
% 创建具有检测传感器的二进制掩码(此处设置3个检测位置)
sensor.mask = zeros(Nx, Ny, Nz);
sensor.mask([Nx/4, Nx/2, 3*Nx/4], Ny/2, Nz/2) = 1;
% run the simulation
[sensor_data] = kspaceFirstOrder3D(kgrid, medium, transducer, sensor, input_args{:});
% 计算输入信号和每个传感器位置记录的信号的幅度
[f_input, as_input] = spect([input_signal, zeros(1, 2 * length(input_signal))], 1/kgrid.dt);
[~, as_1] = spect(sensor_data(1, :), 1/kgrid.dt);
[~, as_2] = spect(sensor_data(2, :), 1/kgrid.dt);
[f, as_3] = spect(sensor_data(3, :), 1/kgrid.dt);
  1. 可视化
    在这里插入图片描述
    绘制3个传感器记录的时间序列
    在这里插入图片描述
    绘制3个传感器接收的响应振幅
    在这里插入图片描述
    绘制声场分布
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/345629.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的小徐影城管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

移动端测试如何学,超详细的APP测试攻略送上

前言 随着手机应用市场发展的逐渐成熟,手机APP已经渗透到人们的吃穿住行生活,比如手机支付APP、通讯APP、各大应用软件等,关于手机APP安全性能的重要性不言而喻。 鉴于此,做好手机APP测试对于软件开发方把控产品质量有着重要意义…

计算机408真的很难吗❓|深度分析+实操上岸规划

在下面这篇文章中,LUCEN详细分析了24考研的难度以及25考研人该怎么办 24考研计算机很难!25考研你就这么干 如果你对于计算机考研择校有任何疑问,那么下面这篇文章一定能够帮助你: 计算机择校指南,内含300所院校 如…

Linux命令-top

1、top命令简介 top命令是linux系统常用命令之一,能够实时显示系统各个进程的资源占用情况,类似于windows系统的任务管理器。 需要注意的是:top命令监控的最小单位是进程,如果想监控更小单位时,就需要用到ps或者nets…

代码评审——随机数Random问题

问题描述: 为了获取唯一值,经常会依赖产生随机数来保证唯一性。在获取随机数时,如果使用错误的方法,会比较低效。 可以参考以下代码: public static String geneRundomNo(){Random rnew Random();int numr.nextInt(…

springboot114基于多维分类的知识管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的基于多维分类的知识管理系统 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章…

Server-Sent Events(SSE)简单实现实时通信

Server-Sent Events(SSE)是一种基于HTTP的实时通信协议,它允许服务器向客户端推送信息。相比于传统的轮询方式,SSE 提供了更加轻量级和实时的通信机制。在本文中,我们将深入浅出地介绍如何简单实现 Server-Sent Events…

在上海做程序员这么多年,退休后我的工资是多少?

大家好,我是拭心。 最近看到一个很可惜的事:有个阿姨在深圳缴纳了 12 年社保,第 13 年家里突然有事不得不回老家,回去后没再缴纳社保,结果退休后无法领退休工资,还得出来打工赚钱。 之所以这样&#xff0…

STL常用容器—stack与queue容器(栈与队列)

STL常用容器—stack与queue容器(栈与队列) stack容器1. stack容器模型图2. stack 基本概念3. stack 常用接口 queue 容器1. queue 容器模型图2. queue 基本概念3. queue 常用接口 参考博文1:<C> stack与queue容器概念模…

这种环境下腾讯64亿在北京拿地?

近期,金融市场出现较大波动,A股指数跌至2700点,同时恒生指数也下滑至15000点,引发了社会各界的关注和思考。与此同时,腾讯以64.2亿元拿下北京海淀区地块,马云和蔡崇信又增持阿里股票,这一系列的…

【Java网络编程01】网络原理初识

【Java网络编程01】网络原理初识 1. 网络通信基础概念 网络通信:网络互连的目的就是网络通信,即网络数据传输,再直白点而言就是不同主机的不同进程之间基于网络进行数据的传输交互。 那么,在组建的网络上有各种各样的主机&#…

【Conda】超详细的linux-conda环境安装教程

背景 最近被python各个版本环境整的头晕目眩,本来就不是专长做python的,切换各种版本着实不好操作,因此想到了conda这个好工具,以下是对conda的相关理解和搭建的详细过程,做个记录。 Conda简介 Conda是在Windows、m…

3.Eureka注册中心

3.Eureka注册中心 假如我们的服务提供者user-service部署了多个实例,如图: 大家思考几个问题: order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口?有多个user-service实例地址&#xff0…

Redis - redis.windows.conf配置文件及RDB和AOF数据持久化方案

Redis - redis.windows.conf配置文件及RDB和AOF数据持久化方案 Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。 Redis支持两种方式的持久化…

Vue 的 事件修饰符and按键修饰符

1、事件修饰符概览 修饰符说明 .prevent阻止默认事件 .stop阻止冒泡.once事件只触发一次 .capture 添加事件侦听器时使用事件捕获模式.self只有点击当前元素本身时才会触发回调.passive事件的默认行为立即执行,无需等待事件回调执行完毕(不常用).native 将vue组件…

【单例模式】保证线程安全实现单例模式

📄前言:本文是对经典设计模式之一——单例模式的介绍并讨论单例模式的具体实现方法。 文章目录 一. 什么是单例模式二. 实现单例模式1. 饿汉式2. 懒汉式2.1 懒汉式实现单例模式的优化(一)2.2 懒汉式实现单例模式的优化&#xff08…

蓝桥杯官网填空题(01串的熵)

问题描述 答案提交 这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。 import java.util.*;public class Main {public static void main(String[] args) {for(double zero1;zero<2333…

开始学习vue2(Vue方法)

一、过滤器 过滤器&#xff08;Filters&#xff09;是 vue 为开发者提供的功能&#xff0c;常用于文本的格式 化。过滤器可以用在两个地方&#xff1a;插值表达式 和 v-bind 属性绑定。 过滤器应该被添加在 JavaScript 表达式的尾部&#xff0c;由“管道符 ”进行 调用&#…

【Linux】常见指令(二)

前言 常见指令第二部分。 文章目录 一、指令&#xff08;下&#xff09;重定向>&#xff1a;输出重定向>>&#xff1a;追加输出<&#xff1a;输入重定向 10. more—显示文本文件内容11.less—逐屏浏览文本文件内容12. head13. tail管道 |14. date—时间指令在这里插…