1

SPICEシミュレーションを実行した後、Matlabで解析している.a2dファイルを取得します。ファイルを解析した後、変数の名前を含むセル配列を取得します。例:vars ={'s0';'s1';'s2';'a0';'a1'}および信号遷移を含むデータ行列。各行は各信号のデータを表し、列は時間を表します。すべてのデータはバイナリです。つまり、0または1のみです。

私がやりたいのは、varsに格納されている名前に基づいて「単語」を検出するアルゴリズムを作成することです。たとえば、s0、s1、およびs2は3ビットワード「s」を形成します。a0およびa12ビットワード'a'。最後に、必要なのは、データマトリックスを単語ごとに1つの配列に分割することです(2進数から10進数に変換)。

手作業でやっていますが、スクリプトでやる方法があるか知りたいです。

4

1 に答える 1

0

これが可能な解決策であり、最終的な値を構造体のフィールドに入れます。変数名とシフトの長さを言わなかったので、正規表現を使用して変数名とシフトを抽出しました。

% fake data
vars = {'sums4', 'sums2', 'sums1', 'a0', 'a5'};
data(1,:) = logical([0 0 1 0 0 0 1]);
data(2,:) = logical([0 1 1 1 1 0 0]);
data(3,:) = logical([1 0 1 1 0 0 1]);
data(4,:) = logical([0 0 1 0 1 1 1]);
data(5,:) = logical([0 1 1 1 0 0 0]);

output = struct();
for i = 1:length(vars) 
    matches = regexp(vars{i}, '(\D+)(\d+)', 'tokens');
    var = matches{1}{1};
    shiftsize = str2num(matches{1}{2});

    % initialise if not already present
    if (~isfield(output, var))
        output.(var) = zeros(1, size(data, 2));
    end

    % add apropriate shifted value to current values
    output.(var) = output.(var) + (bitshift(1, shiftsize) * data(i, :));
end

出力は、varsの文字列部分にちなんで名付けられたフィールドで終わります

output = 

    sums: [2 4 22 6 4 0 18]
       a: [0 32 33 32 1 1 1]
于 2012-04-17T05:55:25.447 に答える