k-Wave 工具箱学习-5 定义传感器

3.5 定义传感器

最终的输入结构传感器定义了用于记录模拟过程中每个时间步的声场的传感器点的属性和位置。计算域内传感器点的位置是使用sensor.mask 设置的。这可以用三种不同的方式定义:

(1)作为直接指定记录数据的网格点的二元矩阵(1或0组成);(大型GPU模拟中此定义方法最常用)

(2)以两个对角的网格点坐标定义,定义结果(在一维中为线,在二维中为矩形,三维中为长方体);(网格点坐标指在matlab定义的计算网格中,一个网格点在整个网格中的位置,同时也是matlab的下标

(3)作为一组笛卡尔坐标(就是你平常知道的那个坐标,长度单位为m的坐标)。

(1)二元方法

二元传感器掩码是通过将与计算网格大小相同的二进制矩阵分配给sensor.mask来定义的,其中1代表构成传感器一部分的域内的网格点。下面给出了在 2D 中创建二进制传感器掩模的两个示例:

% 定义一条线形的 2D 二元传感器掩模
x_offset = 25; %  网格点坐标
width = 50; % 网格点坐标
sensor.mask = zeros(Nx, Ny);
sensor.mask(x_offset, Ny/2 - width/2 + 1:Ny/2 + width/2) = 1;
% define a 2D binary sensor mask in the shape of an arc using makeCircle
x_pos = Nx/2; % 网格点坐标
y_pos = Ny/2; %网格点坐标
radius = 20; % 网格点坐标
arc_angle = pi/2; %网格点坐标
sensor.mask = makeCircle(Nx, Ny, x_pos, y_pos, radius, arc_angle);
(2)对角方法

对于规则形状的二元传感器掩模(由均匀棱柱多面体定义),指定传感器点位置的另一种方法是定义传感器区域的两个相对角。对角由以下列向量定义:

一维:[X1; X2]

二维:[X1; Y1; X2; Y2]

三维: [X1; Y1; Z1; X2; Y2; Z2]

坐标以网格点为单位给出,其中 2D 中的 (1, 1) 定义网格的左上角(对于其他维度也类似)。可以通过向sensor.mask添加额外的列向量来指定多个传感器区域,如下所示。对于使用 C++ 代码(手册第 4 节中描述,三维仿真需要)的模拟,使用对角可以显着减小input文件的尺寸(不过我感觉这个减小的很鸡肋,我自己用不到)

% 通过指定矩形对角 x、y 位置定义二维矩形传感器区域的
rect1_start = [25, 31];
rect1_end = [30, 50];

% 定义第二个矩形传感器区域
rect2_start = [71, 81];
rect2_end =  [80, 90];
% 将对角列表分配给传感器掩码
sensor.mask = [rect1_start, rect1_end; rect2_start, rect2_end]’;

注意!最后一行代码的最后还有一个“”转置符号,大家运行一下就知道怎么回事了

(3)笛卡尔方法

笛卡尔传感器掩码是通过将笛卡尔坐标的 N ×M 矩阵分配给sensor.mask 来定义的,其中 N 是维度数(1、​​2 或 3),M 是传感器点的数量。下面给出了在对角线上创建具有 11 个传感器点的 2D 笛卡尔传感器掩模的示例:

% 定义二维笛卡尔传感器掩码
x = -10:2:10; % [m]
y = -10:2:10; % [m]
sensor.mask = [x; y];

笛卡尔传感器点必须始终位于计算域的维度内。网格原点位于计算域中心,如果网格点数为偶数,则向行和列的末端偏移(注意!因为每个方向的点数如Nx = 128是偶数,所以计算域并不完全对称,所以这个时候x = Nx/2+1=65才是原点0,大家运行试试就知道了)。网格点的笛卡尔坐标可以使用 kgrid.x 和 kgrid.x_vec (等)返回。下面显示了显示每个网格点距原点的笛卡尔距离的示例(我感觉这没什么用,不如在matlab变量查看kgrid.x_vec方便):

kgrid = makegrid(6, 1, 6, 1); sqrt(kgrid.x.^2 + kgrid.y.^2)
ans =
4.2426	3.6056	3.1623	3.0000	3.1623	3.6056
3.6056	2.8284	2.2361	2.0000	2.2361	2.8284
3.1623	2.2361	1.4142	1.0000	1.4142	2.2361
3.0000	2.0000	1.0000	0	    1.0000	2.0000
3.1623	2.2361	1.4142	1.0000	1.4142	2.2361
3.6056	2.8284	2.2361	2.0000	2.2361	2.8284

如果使用笛卡尔传感器掩模,则使用插值在每个时间步长获得传感器点处的声场值(三维仿真时,C++代码就不能这样插值用了,应该是这样,大家可以试试)。默认情况下,使用线性插值(这可以使用可选输入参数“CartInterp”进行更改;请参阅第 3.6 节中的讨论)。在仿真过程中,使用笛卡尔和二进制传感器掩模之间只有很小的性能差异。然而,使用笛卡尔掩模时插值所需的三角测量点的计算会显着延长预计算时间,特别是对于 3D 模拟而言。使用函数 cart2grid 和 grid2cart 可以将笛卡尔传感器掩码转换为二进制传感器掩码(反之亦然)。这些函数对于使用imagesc绘制笛卡尔传感器掩模也很有用。例如:

%使用 imagesc 绘制 二元源掩模和笛卡尔传感器掩模
imagesc(double(source.mask | cart2grid(kgrid, sensor.mask)));

定义了四个输入结构后,就可以调用仿真函数了。一维、二维和三维仿真的语法是类似的的。例如:

sensor_data = kspaceFirstOrder3D(kgrid, medium, source, sensor);
仿真后的输出数据

在仿真过程中的每个时间步,都会存储sensor.mask 中给定的传感器点处的声压值。这些值在模拟完成后返回。如果使用二进制或笛卡尔传感器掩码,则输出索引为sensor_data(sensor_point_index, time_index)。如果传感器掩码以二进制矩阵形式给出,则传感器数据将使用 MATLAB 的按列线性索引排序进行排序。这在第 3.2 节中进行了描述。 3.4 与二进制源掩码内点的排序有关。如果传感器掩码作为一组笛卡尔坐标给出,则计算出的sensor_data将以与定义坐标相同的顺序返回。

如果使用对角列表来定义传感器掩模,则在 1D、2D 和 3D记录的数据索引分别为为:

sensor_data(region_index).p(x_index, time_index)

sensor_data(region_index).p(x_index, y_index, time_index)

sensor_data(region_index).p(x_index, y_index, z_index, time_index)

这里 x_index、y_index 和 z_index 对应于传感器区域内的网格索引(例如,1D 中的线、2D 中的矩形、3D 中的长方体),如果指定了多个,则region_index 对应于该区域的编号。记录的数据在数值上与使用覆盖相同区域的二进制传感器掩模记录的数据相同(数据结果一样,所以本人还是觉得全用二元方法比较方便)。

可选记录参数

可以通过设置sensor.record这个结构体变量的值来控制传感器掩模记录的声学变量。所需的字段参数在元胞数组中以字符串形式列出。例如,要记录声压和粒子速度,sensor.record 应设置为 {‘p’, ‘u’}。如果设置了sensor.record的值,则从模拟返回的输出sensor_data被定义为结构,并且记录的声学变量作为结构字段附加。例如,如果sensor.record = {‘p’, ‘p_max’, ‘u’},则各个输出变量将作为sensor_data.p、sensor_data.p_max、sensor_data.ux、sensor_data.uy(等)进行访问。文末的表格给出了传感器选项的完整列表。

大多数声学参数在由sensor.mask定义的传感器点的每个时间步记录。这些参数的输出以与上述声压相同的方式索引为(sensor_point_index, time_index)。例外情况是平均数量('p_max'、'p_rms'、'u_max、'p_rms、'I_avg')和域内所有网格点记录的数量('p_max_all'、'p_min_all'、'p_final'、 'u_max_all'、'u_min_all'、'u_final')。平均量返回完整模拟的每个传感器点的最大值、平均值或均方根值,并索引为 (sensor_point_index)。 _final 和 _all 表示的量返回整个计算网格上最终、最大或最小压力或粒子速度场,无论传感器点由sensor.mask 定义,并在一维中索引为 (nx, 1),在2D 中(nx, ny ),在 3D 中(nx, ny, nz)。

在定义和使用模拟输入和输出时,记住 k-Wave 使用的交错网格方案的效果非常重要(请参阅第 2.4 节和表 2.1 以供参考)。特别是,与压力的输出相比,粒子速度的输出在空间和时间上都是交错的。例如,sensor_data.ux 是在 x 方向上交错 +kgrid.dx/2 和时间方向上交错 -kgrid.dt/2 的网格点处获得的。如果sensor.record包含“u_non_staggered”或强度参数“I”或“I_avg”之一,则使用傅里叶插值在模拟函数中自动计算非交错网格点处的粒子速度值。(这一段我也看不懂

由sensor.mask定义的传感器点不会以任何方式修改波场。相反,它们充当透明观察者,记录域内压力和粒子速度的数值。任何给定传感器点的响应也是全向的,这意味着它对来自任何方向的波同样敏感。对于使用二元传感器掩模进行 2D 模拟,可以使用sensor.directivity_angle 和sensor.directivity_size设置各个传感器点的方向性。方向角对应于最大响应的方向。它以与计算网格大小相同的二维矩阵形式给出,每个传感器点的值在sensor.mask中指定。角度以弧度指定,其中 0 对应于 x 方向的最大灵敏度,pi/2 或 -pi/2 对应于 y 方向的最大灵敏度。方向性大小设置等效元件大小(以米为单位)。单元尺寸越大,响应的方向性越强。

字段名称

描述

sensor.mask

二元网格、一组笛卡尔点或一组对角,指定在每个时间步记录压力的位置

sensor.record

可选记录的声学参数的数据;有效输入为:

'p'(声压)

'p_max'(最大压力)

'p_min'(最小压力)

'p_rms'(RMS 压力)

'p_final'(最终压力场)

'p_max_all'(所有网格点的最大压力)

'p_min_all'(所有网格点的最小压力)

'u'(粒子速度)

'u_max'(最大粒子速度)

'u_min'(最小粒子速度)

'u_rms'(RMS 粒子速度)

'u_final'(最终粒子速度场)

'u_max_all' (所有网格点的最大速度)

'u_min_all' (所有网格点的最小速度)

'u_non_staggered' (非交错网格点上的粒子速度)

'I_avg' (随时间变化的声强)

'I_avg' (平均声强)

sensor.record_start_index

传感器应开始记录的时间索引(默认 = 1

sensor.

time_reversal_boundary_data

随时间变化的压力以时间相反的顺序强制执行,作为sensor.mask上的狄利克雷边界条件

sensor.frequency_response

指定应用于sensor_data的频域高斯滤波器的中心频率和百分比带宽的二元数组

sensor.directivity_angle

sensor.mask 中定义的每个传感器元件的方向角矩阵(最大响应方向)。角度以弧度指定,其中 0 对应于 x 方向的最大灵敏度,pi/2 或 -pi/2 对应于 y 方向的最大灵敏度

sensor.directivity_size

等效单元尺寸 [m](单元尺寸越大,响应的方向性越强)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1 2/3维图像分割工具箱 2 PSORT粒子群优化工具箱 3 matlab计量工具箱Lesage 4 MatCont7p1 5 matlab模糊逻辑工具箱函数 6 医学图像处理工具箱 7 人工蜂群工具箱 8 MPT3安装包 9 drEEM toolbox 10 DOMFluor Toolbox v1.7 11 Matlab数学建模工具箱 12 马尔可夫决策过程(MDP)工具箱MDPtoolbox 13 国立SVM工具箱 14 模式识别与机器学习工具箱 15 ttsbox1.1语音合成工具箱 16 分数阶傅里叶变换的程序FRFT 17 魔方模拟器与规划求解 18 隐马尔可夫模型工具箱 HMM 19 图理论工具箱GrTheory 20 自由曲线拟合工具箱ezyfit 21 分形维数计算工具箱FracLab 2.2 22 For-Each 23 PlotPub 24 Sheffield大学最新遗传算法工具箱 25 Camera Calibration 像机标定工具箱 26 Qhull(二维三维三角分解、泰森图)凸包工具箱 2019版 27 jplv7 28 MatlabFns 29 张量工具箱Tensor Toolbox 30 海洋要素计算工具箱seawater 31 地图工具箱m_map 32 othercolor配色工具包 33 Matlab数学建模工具箱 34 元胞自动机 35 量子波函数演示工具箱 36 图像局域特征匹配工具箱 37 图像分割graphcut工具箱 38 NSGA-II工具箱 39 chinamap中国地图数据工具箱(大陆地区) 40 2D GaussFit高斯拟合工具箱 41 dijkstra最小成本路径算法 42 多维数据快速矩阵乘法 43 约束粒子群优化算法 44 脑MRI肿瘤的检测与分类 45 Matlab数值分析算法程序 46 matlab车牌识别完整程序 47 机器人工具箱robot-10.3.1 48 cvx凸优化处理工具箱 49 hctsa时间序列分析工具箱 50 神经科学工具箱Psychtoolbox-3-PTB 51 地震数据处理工具CREWES1990版 52 经济最优化工具箱CompEcon 53 基于约束的重构分析工具箱Cobratoolbox 54 Schwarz-Christoffel Toolbox 55 Gibbs-SeaWater (GSW)海洋学工具箱 56 光声仿真工具箱K-Wave-toolbox-1.2.1 57 语音处理工具箱Sap-Voicebox 58 贝叶斯网工具箱Bayes Net Toolbox(BNT) 59 计算机视觉工具箱VFfeat-0.9.21 60 全向相机校准工具箱OCamCalib_v3.0 61 心理物理学数据分析工具箱Palamedes1_10_3 62 生理学研究工具箱EEGLAB 63 磁共振成像处理工具箱CONN 18b 64 matlab 复杂网络工具箱 65 聚类分析工具箱FuzzyClusteringToolbox 66 遗传规划matlab工具箱 67 粒子群优化工具箱 68 数字图像处理工具箱DIPUM Toolbax V1.1.3 69 遗传算法工具箱 70 鱼群算法工具箱OptimizedAFSAr 71 蚁群算法工具箱 72 matlab优化工具箱 73 数据包络分析工具箱 74 图像分割质量评估工具包 75 相关向量机工具箱 76 音频处理工具箱 77 nurbs工具箱 78 Nurbs-surface工具箱 79 grabit数据提取工具箱 80 量子信息工具箱QLib 81 DYNAMO工具箱 82 NEDC循环的整车油耗量 83 PlotHub工具箱 84 MvCAT_Ver02.01 85 Regularization Tools Version 4.1 86 MatrixVB 4.5(含注册) 87 空间几何工具箱 matGeom-1.2.2 88 大数计算工具箱 VariablePrecisionIntegers 89 晶体织构分析工具包 mtex-5.7.0 90 Minimal Paths 2工具箱 91 Matlab数学建模工具箱
### 回答1: "guagle_wave"是一个可能是笔误或者拼写错误的词汇,因为它并没有一个明确的定义或含义。从字面上看,它可能是“Google Wave”的一个拼写错误。 “Google Wave”是谷歌公司于2009年推出的一款协同通信和实时协作工具。它结合了电子邮件、即时通讯、维基、社交网络等功能,旨在改变人们的在线协作方式。用户可以创建“波”(Wave)并邀请其他人参与实时编辑和交流,包括文本、图像、视频等。 然而,“Google Wave”在推出后并未获得广泛的用户认可与采用,最终在2010年Google宣布停止发展该产品,并在2012年正式关闭。尽管如此,“Google Wave”在协同通信和实时协作的领域中仍有一些影响。 如果“guagle_wave”是“Google Wave”的拼写错误,我们可以认为它是提及了谷歌早期推出的这款产品的笔误。在这种情况下,我们可以简单地将其视为对“Google Wave”的错误拼写。 ### 回答2: "guagle_wave"是一个由英文单词"google"和"wave"组合而成的词汇。"google"是一个全球最大的互联网搜索引擎,而"wave"通常指的是波浪。因此,"guagle_wave"可能是指利用谷歌搜索引擎来沟通或交流的一种方式或工具。 在现代社会,人们通过互联网进行信息交流和沟通成为一种普遍的现象。人们可以通过搜索引擎快速获取各种信息,而"guagle_wave"可能是在这个基础上进一步发展的新兴方式。 通过"guagle_wave",用户可以使用谷歌搜索引擎来进行实时沟通和交流。例如,用户可以通过搜索特定的关键词,发现与这些关键词相关的其他用户,然后与他们进行交流。这种方式可能会更加方便和高效,因为搜索引擎可以帮助用户快速找到与自己感兴趣或有共同兴趣的人。 此外,"guagle_wave"也可能指一种特定的应用程序或软件,通过这个应用程序,用户可以在搜索页面上直接与其他用户进行实时聊天或协作工作。这样的应用程序可以提供更加便捷的交流方式,使用户能够更好地共享资源、讨论问题或合作解决某些任务。 总而言之,"guagle_wave"是指利用谷歌搜索引擎进行实时交流和沟通的一种方式,可能是用于快速找到具有共同兴趣的人或在搜索页面上进行实时聊天和协作的特定应用程序。它代表了现代社会信息技术的发展与普及,为人们的交流和合作提供了更加方便和高效的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值