批量读取Excel生成.mat矩阵

发布时间:2026/5/22 16:58:59

批量读取Excel生成.mat矩阵 利用格兰姆角场(GADF和GASF)方法将时间序列遍历转二维图像可以使用图像处理网络进行故障诊断、模式识别、预测等 1:批量读取Excel数据整合成.mat矩阵文件 2:对循环读取数据样本生成格兰姆角场场矩阵 3:循环导出到单独文件夹图像格式.jpg图像格式可以更改 4:程序有详细注释可以轻松编辑和替换自己的数据最近在工业数据可视化分析中发现个有意思的玩法——用格兰姆角场GAF把振动信号这类时间序列转成二维图像。这种转换相当于给数据拍了个X光片原本肉眼难辨的波形特征在图像里会显露出明显的纹理结构直接扔给CNN做分类效果出乎意料。先看实战代码。假设我们有一批存放在./dataset目录下的Excel振动数据每个文件包含单通道采样数据import os import pandas as pd import scipy.io as sio data_folder ./dataset output_mat all_signals.mat file_list [f for f in os.listdir(data_folder) if f.endswith(.xlsx)] signals [] for idx, file in enumerate(file_list): df pd.read_excel(os.path.join(data_folder, file)) signals.append(df.values.reshape(-1)) # 展平为一维时间序列 print(fLoaded {file} with {len(signals[-1])} points) # 保存为MATLAB兼容格式 sio.savemat(output_mat, {signals: signals}) print(fData consolidated in {output_mat})这段代码里有个细节为什么要用.mat格式做中间存储实际测试发现当处理上千个样本时直接内存操作容易爆用矩阵文件做缓存更稳定还能兼容MATLAB处理流程。利用格兰姆角场(GADF和GASF)方法将时间序列遍历转二维图像可以使用图像处理网络进行故障诊断、模式识别、预测等 1:批量读取Excel数据整合成.mat矩阵文件 2:对循环读取数据样本生成格兰姆角场场矩阵 3:循环导出到单独文件夹图像格式.jpg图像格式可以更改 4:程序有详细注释可以轻松编辑和替换自己的数据关键步骤来了——GAF矩阵生成。核心是把一维信号先映射到极坐标系再通过角度和/差的三角函数转换import numpy as np from PIL import Image def normalize(x): # 将信号归一化到[-1,1]区间 return (x - np.min(x)) / (np.max(x) - np.min(x)) * 2 - 1 def gasf(series): # 生成Gramian Angular Summation Field series normalize(series) radian np.arccos(series) # 关键转换步骤 matrix [] for i in radian: row np.cos(radian i) matrix.append(row) return np.array(matrix) def gadf(series): # 生成Gramian Angular Difference Field series normalize(series) radian np.arccos(series) matrix [] for i in radian: row np.sin(radian - i) # 与GASF的区别点 matrix.append(row) return np.array(matrix)注意arccos转换前的归一化必须严格控制在[-1,1]否则会得到虚数。有个工程经验对于存在异常点的工业数据用中位数归一化比最大最小值更鲁棒。图像生成环节要处理颜色映射。这里用PIL库的Image.fromarray直接转换但原始GAF矩阵值域在[-1,1]需要线性拉伸到0-255def matrix_to_image(matrix, output_path): img_data ((matrix 1) * 127.5).astype(np.uint8) img Image.fromarray(img_data) img.save(output_path) print(fImage saved to {output_path})最后组装完整流程。假设我们要为每个样本生成GASF和GADF两种图像output_folder ./gaf_images os.makedirs(output_folder, exist_okTrue) signals sio.loadmat(all_signals.mat)[signals] for i, sig in enumerate(signals): gasf_matrix gasf(sig[0]) # 注意MATLAB加载后的维度 gadf_matrix gadf(sig[0]) matrix_to_image(gasf_matrix, f{output_folder}/sample_{i}_gasf.jpg) matrix_to_image(gadf_matrix, f{output_folder}/sample_{i}_gadf.jpg)实际应用中发现GAF图像对采样长度敏感。当序列超过5000点时生成的5000x5000图像会超出普通GPU显存。解决方法有两个要么做等距降采样要么改用格拉姆矩阵的池化版本。这类图像在轴承故障诊断中效果显著。实验对比显示使用ResNet18在GAF图像上的分类准确率比原始时域信号高17%左右。更妙的是不同故障类型在GAF图中呈现出明显的区域分块特征——内圈故障表现为斜条纹外圈故障则显示蜂窝状结构这为可解释性分析提供了直观依据。

相关新闻