Matlab 读取 gprmax 的 out 文件详细解释

Matlab 读取 gprmax 的 out 文件规律详细解释。

out 文件是hdf5格式的文件,普通软件无法读取。out 文件有一定的规律,在matlab平台上简单操作一下,就可以深刻理解 out 文件含义了

文章目录

  • Matlab 读取 gprmax 的 out 文件规律详细解释。
    • 一、常用函数简介
      • 1、hdf5read
      • 2、h5read
      • 3、h5info
      • 4、h5disp
    • 二、读取out文件
    • 三、out文件数据格式

一、常用函数简介

1、hdf5read

我用的 matlab 版本为2020a,帮助文档提示不推荐使用hdf5read,建议使用h5read函数,但是我感觉hdf5read函数比较实用一些。
Matlab 读取 gprmax 的 out 文件详细解释_第1张图片

2、h5read

新版的matlab使用这个函数
Matlab 读取 gprmax 的 out 文件详细解释_第2张图片

3、h5info

这个函数可以查看h5文件中有哪些信息,也可以用来读取一些值
Matlab 读取 gprmax 的 out 文件详细解释_第3张图片

4、h5disp

这个函数查看h5文件中的信息,比h5info显示的多一些,不能用来读取数据
Matlab 读取 gprmax 的 out 文件详细解释_第4张图片

二、读取out文件

我的经验就是一个将函数一个一个的尝试,试多了就懂了如何读取out文件了。

close all
clear
clc

% 选择out文件
[FileName,PathName] = uigetfile('*.out',...
    '选择gprMax模拟的out文件',...
    'MultiSelect','on');


inFileName = strcat(PathName,FileName);

% 显示hdf5数据文件格式
h5disp(inFileName);

% 用h5disp显示数据文件,在命令行窗口出现一大推数据,影响直观显示
% 这里用h5info重新显示一下,较简洁,而且可以读取标题等内容

info=h5info(inFileName);

% 文件的绝对路径
file_road = info.Filename;

% HDF5文件包含的groups信息
file_groups = info.Groups;
% DHF5文件中包含的attributes信息
file_attibutes = info.Attributes;
% Attributes中包含 Name datatype dataspace value等信息
% 可以读取结构体中的数据,类似于python中的字典
% info.Atttibutes.Name
% info.Atttibutes.Datatype
% info.Atttibutes.Dataspace
% info.Atttibutes.Value

% 如果我们要获取第二排信息
% info.Attributes(2).Name
% 第二排信息的值
% info.Attributes(2).Value

% 读取采样时间
dt = info.Attributes(6).Value;


% 读取接收器的编号
rx_number = {info.Groups(1).Groups.Name};
% 注意接收器的编号不是从小到大排列的
% 编号是按照个位数与两位数的十位数排列的
% 如1 11 12 ... 2 21 21... 3 31 31... 4 5 6 

% 读取源的编号
src_number = {info.Groups(2).Groups.Name};

for i = 1:30
    % 读取Ez分量
    a = h5read(file_road,strcat(rx_number{i}, '/Ez'));
    b(i,:) = a;
    % imagesc(a);
    % pcolor(a);
    plot(a)
    set(gca,'ydir','reverse');

    % 读取位置信息
    position = info.Groups(1).Groups(i).Attributes(2).Value;
    p(i,:) = position;
end

% 注意H5文件中文件的排序问题
% 如果有out文件里面的接收排列编号有两位数
% 那么编号按照两位数的十位数排列
% 所以读取的文件顺序是不对的。

三、out文件数据格式

out文件是一个group,这个group里面包含Attributes和两个子group。

Attributes里面包含了正演模拟的基本信息:gprmax版本、文件名、迭代次数、网格数、网格步长、采样时间间隔、发射点个数、接收点个数、移动步长等,Attributes里面的信息用h5read不能直接读出来,而用hdf5read可以读取,也可以用h5info读取,但是h5info读取容易读错,需要对out文件格式非常熟练。

两个子group里面包含了源的信息和接收点的信息,主要有:场强数据、位置信息、规模等,同样里面包含的Attributes无法用h5read无法读取,需要用hdf5read读取。
Matlab 读取 gprmax 的 out 文件详细解释_第5张图片
Matlab 读取 gprmax 的 out 文件详细解释_第6张图片

你可能感兴趣的:(Gprmax,matlab,gprmax,hdf5)