使用matlab处理INCF采集数据,mdf(.dat)格式文件,并将将其写入excel文件
最近在做某汽车公司关于汽车标定的数据。数据通过INCA采集,保存为.dat格式。数据可以通过measure data analyzer图形化显示,并导出为其他格式,但是软件下载麻烦。使用matlab处理也很方便。
数据处理步骤
1.读取文件
// 添加项目路径到matlab中
folder ='要操作的文件路径'; % 要操作的文件夹
addpath( genpath(folder) );
2.使用mdf函数访问.dat文件
filename = '想要读取的文件名.dat';
mdfobj = mdf(filename);
读取过后即可在matlab的Workspace区域查看到mdfobj变量的内容,如下
其中ChannelNames中即为数据的特征名,但是由于数据采样时频率不同,导致数据被分成8个cell,每个cell中采样频率相同的特征。
3.接下去是如何读取每个cell中特征名下的值,由于数据格式和命名风格不同,使用一段函数读取数据
%该函数用于查找mdf文件中的变量,并输出数据和对应的时间
function[data,time] = data_time_output(Variable,mdfobj)
i=1;
ChannelLength=length(mdfobj.ChannelNames);
for i=1:ChannelLength
PositionVariableLogic=strcmp(mdfobj.ChannelNames{
i},Variable);
%在频道i中查找对应的Variable,并输出该频道中的每个cell是否含有该Variable对应的逻辑值,如果这个频道中有该Variable,则输出1,如没有则输出0
PositionVariable=find(PositionVariableLogic);
%FINDposition,找到对应的位置
if PositionVariable>0
[data, time] = read(mdfobj, i, Variable, 1, 1000000000, 'OutputFormat', 'vector');
else
continue
end
end
end
4.调用函数,读取数据
//Variable是想要读取的特征
Variable = 'C_3_0_217\CAN-Monitoring: 1';
[data,time] = data_time_output(Variable, mdfobj);
varNames = {
Variable};
5.将读取到的数据写入excel中
//table函数将特征名和数值组合成同一列
T = table(data,'VariableNames',varNames);
writetable(T, '2021-11-18_09.31.59_k1_valve_dither_test_20.0bar_100Hz_250mA.csv','WriteRowNames',true)
6.一般一个cell中有多个特征,此时需要一个循环一次读出cell中全部数据
//程序中数字1为第一个cell
for i=1:length(mdfobj.ChannelNames{
1})
Variable = mdfobj.ChannelNames{
1}{
i};
[data,time] = data_time_output(Variable, mdfobj);
` varNames = {
Variable};
T = table(data,'VariableNames',varNames);
H(:,i)=T; //这个地方如果不用H只能将cell中最后一列写入表中,暂时没有好的办法,如果有人知道请留言,谢谢
end
writetable(H, '想要写入的表名.xlsx','WriteMode','Append','WriteRowNames',true)
更多关于table和writetable函数的用法可自行查阅matlab帮助文档