Matlab将存储在单元阵列中的TDMS中的mat文件序列保存为mat文件序列

Matlab将存储在单元阵列中的TDMS中的mat文件序列保存为mat文件序列,matlab,load,save,Matlab,Load,Save,我有以.tdms格式存储的数据,收集了许多传感器的数据,每天每秒测量一次。每天创建一个新的tdms文件,每月存储在一个文件夹中。使用,我已将这些tdms文件转换为mat文件 由于某些测量中存在一些错误(例如,物理上不可能出现的负值),我通过一次加载一个mat文件来执行一些更正,进行计算,然后将数据保存到原始的.mat文件中 但是,当我尝试在循环中执行上述操作时(因此:在文件夹中加载.mat,在一个mat文件(或其中的通道)上进行计算,保存mat文件,重复操作,直到文件夹中的所有文件都完成),我最

我有以.tdms格式存储的数据,收集了许多传感器的数据,每天每秒测量一次。每天创建一个新的tdms文件,每月存储在一个文件夹中。使用,我已将这些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
让我来写:

w{k,1}.(x).(y).(z)(1,len).(y)
使用点符号

我的目标/问题:我想将存储在.mat文件中的值从循环中的原始.tdms文件加载到单元格数组(或者如果我比单元格数组做得更好:请告诉我),进行必要的计算,然后使用原始名称保存每个“更正的”.mat文件

到目前为止,我在尝试各种解决方案时,从“GetFieldName”到尝试传递(动态变化的)变量的名称,等等,都遇到了很多错误

帮助我走上正确方向的类似问题包括,和,但结果是,在这种情况下,我与体力劳动的距离仍然很近


任何帮助都将不胜感激。

如果我正确理解了你的最终目标,我想你差不多做到了。我认为您正在尝试处理.mat文件,将所有文件加载到单元格数组不是一项要求,只是解决方案的一部分?假设是这种情况,您可以从一个文件加载数据,处理它,保存它,然后重复。这样,您一次只能加载一个文件,不应达到任何限制

编辑


您当然可以从代码中生成一个函数,然后在循环中调用它,传入要修改的文件名。就我个人而言,我可能会这样做,因为我认为这是一个更整洁的解决方案。如果您不想这样做,您可以用
w
替换
w{k,1}
,然后每次加载文件时
w
都会被覆盖。如果要显式清除变量,可以使用带有空格分隔的变量列表的
clear
命令,例如
clear w len pos
,但我认为没有必要这样做。

谢谢,是的。我的问题是,当我运行load convert save m-file for 1 file时,我不能在for循环中使用此解决方案。在独立的m文件中,我可以清除所有临时工作空间变量,以便最终保存mat文件的(现在已修改)内容。然而,这在循环中不是那么容易完成的,因为我不知道是否可以重新初始化循环中的所有内容。利用我的独立m文件创建函数会有帮助吗(这样我就可以循环使用)?
w{k,1}.(x).(y).(z)(1,len).(y)