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 的绘图函数,例如 imagesc
或 plot
:
% 可视化数据集的部分数据
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 三个分量的三维图像
步骤
- 读取数据并处理填充值:如果数据有填充值,可以先将其替换为 NaN。
- 选择一部分数据进行绘制:因为数据量可能很大,可以选择前
n
个时间点进行绘制。 - 使用
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)');