2012-04-17 89 views
1

運行SPICE仿真後,我得到一個.a2d文件,我正在使用Matlab進行分析。解析完文件後,我得到一個單元陣列,其中包含變量名稱 Ex:vars = {'s0';'s1';'s2';'a0';'a1'} 和一個帶有信號轉換的數據矩陣,每行代表每個信號的數據,列代表時間。所有的數據都是二進制的,即它只有0或1.通過匹配子串對字符串進行分組

我想要做的是創建一個算法,根據存儲在變量中的名字來檢測「單詞」。例如,s0,s1和s2形成一個3位字's'; a0和a1是一個2位字'a'。 最後,我需要將每個單詞的數據矩陣分成一個數組(從二進制轉換爲十進制)。

我是這樣做的,但我想知道是否有任何方法通過腳本來完成。

回答

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 

輸出端了瓦爾

串件
output = 

    sums: [2 4 22 6 4 0 18] 
     a: [0 32 33 32 1 1 1] 
+0

@Alex嗨,thaks的代碼,它的偉大工程的名字命名的領域! 只是一個小修改,也許我沒有說清楚。 如果變量包含某個字段而沒有在數字中完成(對於單位信號通常是這種情況),則該代碼會給出錯誤。 無論如何,我通過添加一個if語句來對代碼進行修改,如果(〜isempty(matches))' 'var = vars {i};'if語句 ' 'shiftsize = 0' 'else' 'var = matches {1} {1}' 'shiftsize = str2num(matches {1} {2});'' '結束' – 2012-04-17 12:39:46

相關問題