ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

imc DEVICES raw数组转Matlab mat数据

imc DEVICES raw数组转Matlab mat数据 本来想将imc采集的数据进行拟合拟合出一个大概的传函用于仿真但操作过程发现影响变量太多拟合效果不好查表无法覆盖实践困难。测试功能还可以闭环调试有点困难。新叶儿做的转换软件可以使用将所有数据都打包进了mat文件安装imctermite库需要安装“适用于 C 的 Visual Studio 生成工具”链接地址raw2mat将转换的文件放到当前文件夹下即可# -*- coding: utf-8 -*-importimctermiteimportscipy.ioassioimportnumpyasnpimportosimportsys# 读取 .raw 文件的辅助函数 defread_raw_file(filepath):读取 .raw 文件返回 (time_vector, first_channel_ydata, filename_stem) 或 Nonestemos.path.splitext(os.path.basename(filepath))[0]try:imcimctermite.imctermite(filepath.encode(utf-8))exceptRuntimeErrorase:returnNone,f解析失败:{e}channels_with_dataimc.get_channels(True)ifnotchannels_with_data:returnNone,没有找到任何通道数据# 取出时间向量取第一个通道的 xdatatime_vectorNoneforchinchannels_with_data:xch.get(xdata)ifxisnotNoneandlen(x)0:time_vectornp.asarray(x,dtypenp.float64)breakiftime_vectorisNone:ydata_firstchannels_with_data[0].get(ydata)ifydata_firstisNoneorlen(ydata_first)0:returnNone,没有可用的时间数据nlen(ydata_first)dtchannels_with_data[0].get(dt,1.0)time_vectornp.arange(n,dtypenp.float64)*dt first_chchannels_with_data[0]ydatafirst_ch.get(ydata)ifydataisNoneorlen(ydata)0:returnNone,第一个通道没有 ydataydatanp.asarray(ydata,dtypenp.float64)iflen(ydata)!len(time_vector):returnNone,fydata 长度 ({len(ydata)}) 与时间向量长度 ({len(time_vector)}) 不一致return(time_vector,ydata,stem),None# 核心处理函数 defprocess_raw_files(directory,output_matcombined.mat): 处理指定目录下的所有 .raw 文件合并为一个 .mat 文件。 返回: dict 包含 success/total/skipped/message 等字段 output_pathos.path.join(directory,output_mat)raw_filessorted([fforfinos.listdir(directory)iff.lower().endswith(.raw)])ifnotraw_files:return{success:False,output_path:output_path,total_files:0,success_files:[],skipped_files:[],data_shape:(0,0),column_names:[],message:错误目录下没有找到任何 .raw 文件}ref_pathos.path.join(directory,raw_files[0])ref_result,ref_errread_raw_file(ref_path)ifref_resultisNone:return{success:False,output_path:output_path,total_files:len(raw_files),success_files:[],skipped_files:[{file:raw_files[0],reason:ref_err}],data_shape:(0,0),column_names:[],message:f错误无法从参考文件{raw_files[0]}中读取有效数据:{ref_err}}ref_time,ref_ydata,ref_stemref_result data_cols[ref_time,ref_ydata]column_names[time,ref_stem]success_files[raw_files[0]]skipped_files[]forraw_fileinraw_files[1:]:file_pathos.path.join(directory,raw_file)result,errread_raw_file(file_path)ifresultisNone:skipped_files.append({file:raw_file,reason:err})continuefile_time,file_ydata,stemresultiflen(file_time)!len(ref_time):skipped_files.append({file:raw_file,reason:f时间向量长度 ({len(file_time)}) ≠ 参考 ({len(ref_time)})})continueiflen(file_ydata)!len(ref_time):skipped_files.append({file:raw_file,reason:fydata 长度 ({len(file_ydata)}) ≠ 参考时间长度 ({len(ref_time)})})continueifnotnp.allclose(file_time,ref_time,rtol1e-10,atol1e-12):skipped_files.append({file:raw_file,reason:时间向量与参考不匹配})continuedata_cols.append(file_ydata)column_names.append(stem)success_files.append(raw_file)iflen(data_cols)1:return{success:False,output_path:output_path,total_files:len(raw_files),success_files:success_files[1:],skipped_files:skipped_files,data_shape:(0,0),column_names:column_names,message:错误除了时间列外没有有效的通道数据}data_matrixnp.column_stack(data_cols)mat_dict{data:data_matrix,column_names:column_names,source_files:[fforfinraw_filesiffinsuccess_files]}sio.savemat(output_path,mat_dict,oned_ascolumn)msgf转换完成成功合并{len(data_cols)-1}个文件矩阵形状{data_matrix.shape}ifskipped_files:msgf跳过{len(skipped_files)}个文件return{success:True,output_path:output_path,total_files:len(raw_files),success_files:success_files,skipped_files:skipped_files,data_shape:data_matrix.shape,column_names:column_names,message:msg}# 命令行入口 if__name____main__:resultprocess_raw_files(.,combined.mat)print(f\n{*50})print(result[message])print(f输出文件:{result[output_path]})ifresult[success_files]:print(f成功 ({len(result[success_files])}):)forfinresult[success_files]:print(f ✓{f})ifresult[skipped_files]:print(f跳过 ({len(result[skipped_files])}):)foreinresult[skipped_files]:print(f ✗{e[file]}—{e[reason]})或者使用官方的imc Format Converter软件去官网下载imc_STUDIO安装选择该软件即可。我从STUDIO软件中提取出了Format Converter有需要的可以私聊我
返回列表