【发布时间】:2014-10-13 05:35:56
【问题描述】:
我有以 .tdms 格式存储的数据,收集了许多传感器的数据,每天每秒测量一次。每天都会创建一个新的 tdms 文件,并每月存储在一个文件夹中。使用the convertTDMS function,我已将这些 tdms 文件转换为 mat 文件。
由于某些测量中存在一些错误(例如,物理上不会出现的负值),我通过一次加载一个 mat 文件进行了一些更正,进行计算,然后将数据保存到原始文件中。 mat 文件。
但是,当我尝试在循环中执行上述操作时(因此:在文件夹中加载 .mat,对一个 mat 文件(或其中的通道)进行计算,保存 mat 文件,重复直到文件夹中的所有文件都有已经完成),我最终遇到了保存功能的限制:到目前为止,当使用下面的代码时,我将所有变量(或无法保存)保存在工作区中。
for k = 1:nFiles
w{k,1} = load(wMAT{k,1});
len = length(w{k,1}.(x).(y).(z));
pos = find(w{k,1}.(x).(y).(z)(1,len).(y)<0); %Wind speed must be >0 m/s
for n = 1:length(pos)
w{k,1}.(x).(y).(z)(1,len).(y)(pos(n)) = mean([w{k,1}.(x).(y).(z)(1,len).(y)(pos(n)+1),...
w{k,1}.(x).(y).(z)(1,len).(y)(pos(n)-1)],2);
end
save( name{k,1});
%save(wMAT{k,1},w{k,1}.(x),w{k,1}.ConvertVer,w{k,1}.ChanNames);
end
一些背景信息:文件名存储在文件夹中长度为 nFiles 的元胞数组 wMAT 中。元胞数组 wMAT 中的每个元胞都存储了 mat 文件的完整文件路径。 文件的数据被加载并保存到元胞数组 w 中,长度也为 nFiles。 “w”中的每个单元格都存储了从 tdms 到 mat 转换的所有数据,格式在 convertTDMS 描述中描述。 这意味着:要获取实际数据,我需要从
- 元胞数组 w{k,1} 中的元胞(我的补充)
- 到 struct 数组“ConvertedData”(所有数据对象的结构 - convertTDMS 的一部分)
- 到下面称为“数据”的结构数组(convertTDMS)
- 到下面称为“MeasuredData”(convertTDMS)的结构数组 -> 在这个级别,我可以访问存储数据的通道。
- 要最终访问/操作存储的值,我必须选择一个通道,例如(1,len) 和 then 通过结构数组获取实际值 (="Data")。 (转换TDMS) 在 Matlab 格式中,这看起来像 "w{1, 1}.ConvertedData.Data.MeasuredData(1, len).Data(1:end)" 或 "w{1, 1}.ConvertedData.Data.MeasuredData(1, len).Data"。
为了让打字更容易,我采取了
x = 'ConvertedData';
y = 'Data';
z = 'MeasuredData';
允许我改写:
w{k,1}.(x).(y).(z)(1,len).(y)
使用点符号。
我的目标/问题:我想将存储在 .mat 文件中的值从循环中的原始 .tdms 文件加载到单元格数组(或者如果我可以做得比单元格更好)数组:请告诉我),进行必要的计算,然后使用原始名称保存每个“更正”的 .mat 文件。
到目前为止,我从尝试各种解决方案(从“getfieldnames”开始,尝试传递(动态变化的)变量的名称等)中遇到了许多错误。
帮助我找到正确方向的类似问题包括Saving matlab files with a name having a variable input、Dynamically Assign Variables in Matlab 和http://www.mathworks.com/matlabcentral/answers/4042-load-files-containing-part-of-a-string-in-the-file-name-and-the-load-that-file,但结果是在这种情况下我仍然没有比做体力活更近。
任何帮助将不胜感激。
【问题讨论】: