2013-10-04 76 views
3

我有問題。如何在Simulink模型中獲得信號尺寸

模擬simulink模型後,我需要使用MATLAB命令獲取每一行的信號尺寸。

我得到線處理由以下

line_h = find_system(gcs, 'FindAll', 'on','SearchDepth', 1, 'Type', 'Line') 

那麼怎樣才能得到信號的尺寸從線處理

**當在格式菜單中檢查「的信號維度」 - >端口/信號顯示 後模擬信號尺寸的型號將顯示在非標量線上。 我需要使用MATLAB命令來獲取它。

對不起,我的英語水平

謝謝

回答

2

如果您的find_system命令中有一組線處理,則可以使用以下命令獲取連接到該信號的塊。

hblkSrc = get_param(h(k),'SrcBlockHandle'); 

然後可以使用get_param(hblkSrc,'CompiledPortDimensions')通過am304的建議得到了尺寸。

2

你可以解決它下面的方式。

  1. 啓用所需信號(屬性)的信號記錄。對於 示例將名稱設置爲自定義,並且signalone
  2. 如果實際上不想記錄信號,請將Limit data points to last設置爲1,這樣可以避免存儲未使用的數據。
  3. 轉到Simulink的喜好和使能信號記錄,默認的輸出名稱爲logsout
  4. 模擬之後,你會在工作區中得到的數據集logsout

現在如下評估該數據集:

% returns data, if data limit is set to 1 it's a coloumn 
% vector with just the last value 
data = logsout.get('signalone').Values.Data 

你現在可以使用這個矢量的大小,你知道信號的尺寸

[~,dim]=size(data) 

或一條線:

[~,dim]=size(logsout.get('signalone').Values.Data) 

如果你有一大把的信號,要立即對其進行評估,給你的信號,方便輸出名稱和使用循環通過與所有的字符串向量迭代你的信號名稱。

正如你所說你想要「所有」(你確定嗎?)信號的尺寸,我認爲在每個信號屬性中選擇「啓用信號記錄」更方便,並在Simulink偏好設置中進行所有進一步定義你有一個列表來管理所有的信號。

3

或者,你可以找到他們每次發源於塊的信號尺寸和寬度信號,使用:

get_param(<block_path>,'CompiledPortDimensions') 
get_param(<block_path>,'CompiledPortWidths') 

對感興趣每個塊的適當塊路徑更換<block_path>。在運行這些命令之前,必須編譯模型,但是由於您在運行模型之後指出了這一點,這應該不成問題。