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_steps
    spectrum(:, 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: -99999
       Filters: []
    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.0030
    0.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.0018
    0.0014   -0.0033    0.0001    0.0032    0.0049   -0.0019    0.0071   -0.0015   -0.0006    0.0019
    0.0012   -0.0013   -0.0001   -0.0018    0.0031   -0.0045    0.0044   -0.0021   -0.0021    0.0036
    0.0012   -0.0019   -0.0002   -0.0054    0.0035   -0.0033    0.0015    0.0001   -0.0017    0.0011
    0.0013   -0.0040   -0.0002   -0.0051    0.0016    0.0010    0.0039    0.0002   -0.0021    0.0061
    0.0001   -0.0037   -0.0002   -0.0012   -0.0006    0.0020    0.0012    0.0004   -0.0074    0.0032
    0.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.0009
    0.0072    0.0028   -0.0018    0.0069    0.0000
    0.0044    0.0040    0.0003    0.0028   -0.0008
    0.0053    0.0054    0.0000   -0.0001    0.0026
    0.0034    0.0001    0.0000   -0.0017    0.0004

    0.0016    0.0139    0.0019    0.0081   -0.0061
    0.0043    0.0106    0.0011    0.0097   -0.0032
    0.0027    0.0127    0.0004    0.0104   -0.0003
    0.0027    0.0099    0.0008    0.0147    0.0018
    0.0037    0.0096    0.0009    0.0156    0.0032

   -0.0026   -0.0061   -0.0012    0.0008    0.0041
    0.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.0021
    0.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)');

输出

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

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

相关文章

Ps:首选项 - 性能

Ps菜单:编辑/首选项 Edit/Preferences 快捷键:Ctrl K Photoshop 首选项中的“性能” Performance选项卡允许用户通过调整内存使用、GPU 设置、高速缓存设置以及多线程处理等选项,来优化 Photoshop 的性能。这对于处理大文件、复杂图像或需要…

【NOI-题解】1137 - 纯粹素数1258 - 求一个三位数1140 - 亲密数对1149 - 回文数个数

文章目录 一、前言二、问题问题:1137 - 纯粹素数问题:1258 - 求一个三位数问题:1140 - 亲密数对问题:1149 - 回文数个数 三、感谢 一、前言 欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 本章节主要…

二进制安装php

下载php二进制包: 官网地址:https://www.php.net/releases/ PHP: Releaseshttps://www.php.net/releases/在里边可以选择自己要下载的包进行下载; 下载完成后进行解压: tar xvzf php-7.3.12.tar.gz 解压后 进入目录进行预编…

学习yolo+Java+opencv简单案例(三)

主要内容:车牌检测识别(什么颜色的车牌,车牌号) 模型作用:车牌检测,车牌识别 文章的最后附上我的源码地址。 学习还可以参考我前两篇博客: 学习yoloJavaopencv简单案例(一&#xff0…

Cobalt Strike 4.8 用户指南-第二节-用户界面

2.1、概述 Cobalt Strike用户界面分为两部分。界面顶部显示会话或目标的可视化。界面底部显示与你交互的每个 Cobalt Strike 功能或会话的选项卡。可以单击这两个部分之间的区域并根据自己的喜好调整它们的大小。 # 2.2、工具栏 顶部的工具栏提供对常见 Cobalt Strike功能的快…

C/C++实现蓝屏2.0

🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 前…

LeetCode合并两个有序链表

题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 [], l2…

chromedriver下载地址大全(包括124.*后)以及替换exe后仍显示版本不匹配的问题

Chrome for Testing availability CNPM Binaries Mirror 若已经更新了系统环境变量里的chromdriver路径下的exe,仍显示版本不匹配: 则在cmd界面输入 chromedriver 会跳出version verison与刚刚下载好的exe不匹配,则再输入: w…

http连接未释放导致生产故障

凌晨4点运维老大收到报警(公司官网页面超时,上次故障因为运维修改nginx导致官网域名下某些接口不可用后,运维在2台nginx服务器上放了检测程序,检测官网页面),运维自己先看了看服务器相关配置,后…

小区物业维修管理系统/小区居民报修系统

摘要 小区物业维修是物业公司的核心,是必不可少的一个部分。在物业公司的整个服务行业中,业主担负着最重要的角色。为满足如今日益复杂的管理需求,各类小区物业维修管理系统也在不断改进。本课题所设计的小区物业维修管理系统,使用…

IPC进程间通信方式及网络通信

一、IPC进程间通信方式 1.共享内存(最高效的进程间通信方式) 其允许两个或多个进程共享一个给定的存储区,这一段存储区可以被两个或以上的进程映射至自己的地址空间中,一个进程写入共享内存的信息,可以被其他使用这个…

“面试宝典:高频算法题目详解与总结”

干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…

每日掌握一个科研插图·2D密度图|24-08-21

小罗碎碎念 在统计学和数据可视化领域,探索两个定量变量之间的关系是一种常见的需求。为了更深入地理解这种关系,我们可以使用多种图形表示方法,这些方法在本质上是对传统图形的扩展和变体。 散点图:这是最基本的图形&#xff0c…

图算法-贪心策略-最小生成树(prim)和最短路径(dijkstra)

参考来源:和感谢 1.代码随想录 (programmercarl.com) 2.【图-最小生成树-Prim(普里姆)算法和Kruskal(克鲁斯卡尔)算法】https://www.bilibili.com/video/BV1wG411z79G?vd_source0ddb24a02523448baa69b0b871ab50f7 3.【图-最短路径-Dijkstra(迪杰斯特拉)算法】ht…

Vue3学习笔记之插槽

目录 前言 一、基础 (一) 默认插槽 (二) 具名插槽 (三) 作用域插槽 (四) 动态插槽 二、实战案例 前言 插槽(Slots)? 插槽可以实现父组件自定义内容传递给子组件展示,相当于一块画板,画板就是我们的子组件&…

RabbitMQ发布订阅模式Publish/Subscribe详解

订阅模式Publish/Subscribe 基于API的方式1.使用AmqpAdmin定制消息发送组件2.消息发送者发送消息3.消息消费者接收消息 基于配置类的方式基于注解的方式总结 SpringBoot整合RabbitMQ中间件实现消息服务,主要围绕3个部分的工作进行展开:定制中间件、消息发…

使用select

客户端 服务端 1 #include<myhead.h>2 3 #define SER_PORT 6666 //服务器端口4 #define SER_IP "127.0.0.1" //服务器ip5 6 7 int main(int argc, const char *argv[])8 {9 //创建套接字10 int sfdsocket(AF_INET,SOCK_STREAM,0);11 if(sfd-1)12 …

开源大模型LLaMA架构介绍

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南&#xff08;附代码和数据&#xff…

思科设备静态路由实验

拓扑及需求 网络拓扑及 IP 编址如图所示&#xff1b;PC1 及 PC2 使用路由器模拟&#xff1b;在 R1、R2、R3 上配置静态路由&#xff0c;保证全网可达&#xff1b;在 R1、R3 上删掉上一步配置的静态路由&#xff0c;改用默认路由&#xff0c;仍然要求全网可达。 各设备具体配置…

前端技巧——复杂表格在html当中的实现

应用场景 有时候我们的表格比较复杂&#xff0c;表头可能到处割裂&#xff0c;我们还需要写代码去完成这个样式&#xff0c;所以学会在原生html处理复杂的表格还是比较重要的。 下面我们来看这一张图&#xff1a; 我们可以看到有些表头项的规格不太一样&#xff0c;有1*1 2*…