1

車両チャネルからのデータを含むサブレベルを持つ 1x1 構造体を含むファイル filedata.mat があります。このファイルには、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

チャネル名を選択して変数に保持する場合は、この変数を cell 配列にします。それで

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 に答える