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

Matlab处理H5文件

1.读取h5文件

filename='xxx.h5'; 
h5disp(filename)

2.h5文件保存为mat文件

读取 HDF5 文件中的数据

% 指定 HDF5 文件的路径
filename = 'xxx.h5';% 读取 HDF5 文件中的各个数据集
A241_P = h5read(filename, '/A241_P');
A241_W = h5read(filename, '/A241_W');
A242_P = h5read(filename, '/A242_P');
A242_W = h5read(filename, '/A242_W');
A243_P = h5read(filename, '/A243_P');
A243_W = h5read(filename, '/A243_W');
ALTITUDE = h5read(filename, '/ALTITUDE');
GEO_LAT = h5read(filename, '/GEO_LAT');
GEO_LON = h5read(filename, '/GEO_LON');
MAG_LAT = h5read(filename, '/MAG_LAT');
MAG_LON = h5read(filename, '/MAG_LON');
PhaseX = h5read(filename, '/PhaseX');
PhaseY = h5read(filename, '/PhaseY');
PhaseZ = h5read(filename, '/PhaseZ');
UTC_TIME = h5read(filename, '/UTC_TIME');
VERSE_TIME = h5read(filename, '/VERSE_TIME');
WORKMODE = h5read(filename, '/WORKMODE');

将数据保存为 MAT 文件 

% 保存为 MAT 文件
save('xxx.mat', ...'A241_P', 'A241_W', 'A242_P', 'A242_W', 'A243_P', 'A243_W', ...'ALTITUDE', 'GEO_LAT', 'GEO_LON', 'MAG_LAT', 'MAG_LON', ...'PhaseX', 'PhaseY', 'PhaseZ', 'UTC_TIME', 'VERSE_TIME', 'WORKMODE');

检查 MAT 文件

% 检查保存的 MAT 文件
data = load('xxx.mat');
disp(data);

3.在 MATLAB 中绘制 H5 文件中的频谱图像 

读取数据

首先,从 H5 文件中读取波形数据。以下是读取 X 方向波形数据的示例代码:

% 指定文件路径
filename = 'xxx.h5';% 读取 X 方向的 ELF 波形数据
A241_W_data = h5read(filename, '/A241_W');

对波形数据进行傅里叶变换

对数据进行傅里叶变换,以获得频谱信息。通常,您会对每个时间段进行傅里叶变换以生成时间-频率图。

% 获取数据的维度
[num_frequencies, num_time_steps] = size(A241_W_data);% 初始化频谱矩阵
spectrum = zeros(num_frequencies, num_time_steps);% 对每一列进行傅里叶变换(时间步)
for i = 1:num_time_stepsspectrum(:, i) = abs(fft(A241_W_data(:, i)));
end% 只取前一半频率成分
spectrum = spectrum(1:num_frequencies/2, :);

绘制频谱图

使用 imagesc 函数绘制频谱图像,其中 X 轴表示时间,Y 轴表示频率,颜色表示频率分量的幅度。

% 绘制频谱图
figure;
imagesc(10*log10(spectrum)); % 使用对数刻度显示频谱
colorbar;
title('X-Direction ELF Whistler Wave Spectrum');
xlabel('Time Index');
ylabel('Frequency Index');

频率轴映射

如果需要将频率轴映射到实际的频率单位(Hz),您需要知道采样率,并在绘图时进行适当的调整。

% 采样率
sample_rate = 10240; % Hz% 频率轴
freq_axis = linspace(0, sample_rate/2, num_frequencies/2);% 绘制频谱图,使用频率轴
figure;
imagesc(1:num_time_steps, freq_axis, 10*log10(spectrum));
colorbar;
title('X-Direction ELF Whistler Wave Spectrum');
xlabel('Time Index');
ylabel('Frequency (Hz)');
axis xy; % 确保频率轴是从下到上增大

进一步分析与处理

这提供了绘制频谱的基础。如果需要进一步分析,可以根据具体需求进行处理,例如滤波、平滑等。

其他方向的频谱

可以使用相同的方法对 Y 方向 (A242_W) 和 Z 方向 (A243_W) 的数据进行处理和绘制频谱。

4.在 MATLAB 中展示 A243_W 数据集的结构

使用 h5info 函数查看数据集信息

使用 h5info 函数获取 A243_W 数据集的详细信息,包括其维度、数据类型、属性等。

filename = 'E:\Wechat-Downloads\WeChat Files\wxid_pc8ffp6vi93o22\FileStorage\File\2024-08\CSES_01_SCM_2_L02_A2_129161_20200531_232442_20200601_000017_000.h5';
info = h5info(filename, '/A243_W');
disp(info);

输出 

这将返回并显示 A243_W 数据集的所有相关信息,包括其大小、数据类型和相关属性。

disp(info);Filename: 'E:\Wechat-Downloads\WeChat Files\wxid_pc8ffp6vi93o22\FileStorage\File\2024-08\CSES_01_SCM_2_L02_A2_129161_20200531_232442_20200601_000017_000.h5'Name: 'A243_W'Datatype: [1×1 struct]Dataspace: [1×1 struct]ChunkSize: []FillValue: -99999Filters: []Attributes: [2×1 struct]

使用 h5read 函数读取数据集

如果想直接读取数据并查看部分数据,可以使用 h5read 函数:

A243_W = h5read(filename, '/A243_W');% 显示数据集的大小
disp(size(A243_W));% 显示数据集的前几行和列
disp(A243_W(1:10, 1:10));  % 显示前10行和前10列的数据

输出

-0.0026   -0.0061   -0.0012    0.0008    0.0041    0.0036    0.0003   -0.0020   -0.0036    0.00300.0006   -0.0009    0.0031    0.0030    0.0024    0.0066    0.0017    0.0005   -0.0021    0.0057-0.0013   -0.0064    0.0001   -0.0009    0.0005    0.0039    0.0044    0.0034    0.0001    0.0015-0.0015   -0.0043    0.0001   -0.0000    0.0021    0.0025    0.0059    0.0013   -0.0010    0.00180.0014   -0.0033    0.0001    0.0032    0.0049   -0.0019    0.0071   -0.0015   -0.0006    0.00190.0012   -0.0013   -0.0001   -0.0018    0.0031   -0.0045    0.0044   -0.0021   -0.0021    0.00360.0012   -0.0019   -0.0002   -0.0054    0.0035   -0.0033    0.0015    0.0001   -0.0017    0.00110.0013   -0.0040   -0.0002   -0.0051    0.0016    0.0010    0.0039    0.0002   -0.0021    0.00610.0001   -0.0037   -0.0002   -0.0012   -0.0006    0.0020    0.0012    0.0004   -0.0074    0.00320.0011   -0.0051   -0.0000   -0.0028    0.0007    0.0014    0.0012    0.0008   -0.0026    0.0004

 查看数据集的属性

如果想查看数据集的属性,可以使用 h5readatt 函数来读取特定属性:

attrs = info.Attributes;
for i = 1:numel(attrs)attr_name = attrs(i).Name;attr_value = h5readatt(filename, '/A243_W', attr_name);disp([attr_name, ': ', num2str(attr_value)]);
end

输出

long_name: Z-Direction of ELF waveform 
Unit: nT 

可视化数据

如果想进一步分析或可视化数据,可以使用 MATLAB 的绘图函数,例如 imagescplot

% 可视化数据集的部分数据
imagesc(A243_W(1:1000, 1:1000));
colorbar;
title('A243_W Data Visualization');

输出

通过以上步骤,可以在 MATLAB 中详细查看和分析 A243_W 数据集的结构及其内容。

5.一个图像上画出 A243_W 数据集的 X, Y, Z 三分量图像

 读取 X, Y, Z 三分量数据

首先,分别读取 A241_W, A242_W, A243_W 三个数据集。

filename = 'E:\Wechat-Downloads\WeChat Files\wxid_pc8ffp6vi93o22\FileStorage\File\2024-08\CSES_01_SCM_2_L02_A2_129161_20200531_232442_20200601_000017_000.h5';A241_W = h5read(filename, '/A241_W');  % X-Direction of ELF waveform
A242_W = h5read(filename, '/A242_W');  % Y-Direction of ELF waveform
A243_W = h5read(filename, '/A243_W');  % Z-Direction of ELF waveform

创建图像并绘制三分量

使用 MATLAB 的 subplot 函数在一个图像上显示三个分量。

% 假设你只绘制前1000个时间点的数据
figure;subplot(3, 1, 1);
plot(A241_W(:, 1:1000)');
title('X-Direction of ELF waveform (A241_W)');
xlabel('Time Index');
ylabel('Amplitude (nT)');subplot(3, 1, 2);
plot(A242_W(:, 1:1000)');
title('Y-Direction of ELF waveform (A242_W)');
xlabel('Time Index');
ylabel('Amplitude (nT)');subplot(3, 1, 3);
plot(A243_W(:, 1:1000)');
title('Z-Direction of ELF waveform (A243_W)');
xlabel('Time Index');
ylabel('Amplitude (nT)');% 设置整体标题
sgtitle('ELF Waveform Components (X, Y, Z)');

输出

x,y,z前5行5列数据结果 

disp(A241_W(1:5, 1:5)); % 检查 A241_W 的前5行5列数据
disp(A242_W(1:5, 1:5)); % 检查 A242_W 的前5行5列数据
disp(A243_W(1:5, 1:5)); % 检查 A243_W 的前5行5列数据

 输出

    0.0104    0.0055   -0.0058    0.0042    0.00090.0072    0.0028   -0.0018    0.0069    0.00000.0044    0.0040    0.0003    0.0028   -0.00080.0053    0.0054    0.0000   -0.0001    0.00260.0034    0.0001    0.0000   -0.0017    0.00040.0016    0.0139    0.0019    0.0081   -0.00610.0043    0.0106    0.0011    0.0097   -0.00320.0027    0.0127    0.0004    0.0104   -0.00030.0027    0.0099    0.0008    0.0147    0.00180.0037    0.0096    0.0009    0.0156    0.0032-0.0026   -0.0061   -0.0012    0.0008    0.00410.0006   -0.0009    0.0031    0.0030    0.0024-0.0013   -0.0064    0.0001   -0.0009    0.0005-0.0015   -0.0043    0.0001   -0.0000    0.00210.0014   -0.0033    0.0001    0.0032    0.0049

 6.在一个图像上绘制 A243_W 的 x、y、z 三个分量的三维图像

步骤

  1. 读取数据并处理填充值:如果数据有填充值,可以先将其替换为 NaN。
  2. 选择一部分数据进行绘制:因为数据量可能很大,可以选择前 n 个时间点进行绘制。
  3. 使用 plot3 绘制三维图像
% 读取数据
A241_W = h5read(filename, '/A241_W');
A242_W = h5read(filename, '/A242_W');
A243_W = h5read(filename, '/A243_W');% 替换填充值为 NaN
A241_W(A241_W == -99999) = NaN;
A242_W(A242_W == -99999) = NaN;
A243_W(A243_W == -99999) = NaN;% 选择前1000个时间点的数据进行绘制
n = 1000;
x = A241_W(:, 1:n);
y = A242_W(:, 1:n);
z = A243_W(:, 1:n);% 绘制三维图像
figure;
plot3(x(:), y(:), z(:));
grid on;
xlabel('X-Direction (nT)');
ylabel('Y-Direction (nT)');
zlabel('Z-Direction (nT)');
title('3D Plot of ELF Waveform Components (X, Y, Z)');

输出

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • golang多版本管理工具g
  • 鸿蒙HarmonyOS开发:如何灵活运用动画效果提升用户体验
  • 使用 Charles 模拟手机弱网测试
  • AppenTalk | 不止于赛场,巴黎奥运会上的中国AI科技
  • APP支付宝授权获取code uniapp
  • 案例 | 生产制造中的直线度测量
  • jmeter中添加集合点
  • 华为od面试经验2024-面经
  • CAD图纸加密软件有哪些?10款超级好用的CAD图纸加密软件推荐
  • 字符串算法
  • wangeditor编辑器自定义按钮和节点,上传word转换html,文本替换
  • 简单封装一个类似菜单栏的树状结构转换
  • VMware-Ubuntu共享文件找不到
  • 深入探索分布式任务调度框架:MySQL实现高效锁机制
  • 误删?损坏?SD卡数据恢复全攻略,让你的数据起死回生!
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Bootstrap JS插件Alert源码分析
  • co模块的前端实现
  • Hibernate【inverse和cascade属性】知识要点
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Mysql数据库的条件查询语句
  • ng6--错误信息小结(持续更新)
  • React16时代,该用什么姿势写 React ?
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 从伪并行的 Python 多线程说起
  • 坑!为什么View.startAnimation不起作用?
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 我的业余项目总结
  • 学习笔记:对象,原型和继承(1)
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #Linux(Source Insight安装及工程建立)
  • #Spring-boot高级
  • #职场发展#其他
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (6)设计一个TimeMap
  • (Python) SOAP Web Service (HTTP POST)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十二)Flink Table API
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)关于pipe()的详细解析
  • (转载)hibernate缓存
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .gitignore文件忽略的内容不生效问题解决
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core 通过 Ef Core 操作 Mysql
  • .Net Memory Profiler的使用举例
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET多线程执行函数
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理