1

我有一个文件 filedata.mat,其中包含一个 1x1 结构,其子级别包含来自车辆通道的数据。该文件有近 30 个测量通道。通道名称、通道单位和通道值(针对时间)存储在单独的子级别中。

我想通过列号指定哪些通道(即哪些数据列),并让代码将数据放置在一个矩阵中,其中第 1 行中的通道名称和第 2 行中的通道单元。

我目前拥有的代码如下:

clear all;

channels = [1 4 8];

source = load('filedata.mat');

N = size(channels,2);
I = size(source.Data.DataOut,1) + 2;
data = zeros(I,N);

for i = (1:1:I)
    for n = (1:1:N)
        if i == 1
           data(i,n) = source.Data.ChannelNames{channels(n)};
        elseif i == 2
           data(i,n) = source.Data.ChannelUnits{channels(n)};
        else
           data(i,n) = source.Data.DataOut{i,channels(n)};
        end
    end
end

我的想法是,这会将通道名称放在第 1 行(即当 i = 1 时),将通道单元放在第 2 行(当 i = 2 时),然后将所有剩余的数据行放置到 i = I。

但是,当我运行此代码时,我收到错误“下标分配维度不匹配”。在第 14 行,即:

 data(i,n) = source.Data.ChannelNames{channels(n)};

如果有人可以提出解决方案并且 - 也许更重要的是 - 解释我哪里出错了(所以我可以学到一些东西!)我真的很感激。

提前致谢。

4

1 回答 1

0

我假设你ChannelNames是字符串的单元格数组。因此,该语句source.Data.ChannelNames{channels(n)}返回一个字符串,该字符串不能分配给data.

如果要选择通道名称并将它们保存在变量中,请将此变量设置为元胞数组。然后

data = cell(I,N);
data(1,:) = source.Data.ChannelNames(channels);
data(2,:) = source.Data.ChannelUnits(channels);
data(3:I,:) = num2cell(source.Data.DataOut(:,channels));
于 2012-03-23T15:08:47.083 回答