2010-09-28 22 views
4

我已經構建了一個Matlab/Simulink模型,我正在使用它來模擬使用聲學功能進行各種關鍵導航和定位功能的水下機器人車輛的性能。由於海洋的特徵隨着季節和地理位置的變化而變化,我希望這個數據是從一個ASCII數據文件(以行和列組織的空間分隔數據)動態加載到模型中的從文件加載Simulink查找表的數據

Simulink有許多查找表模塊集,但它們都沒有直接提供「從文件讀取」選項。不得不使用表編輯器會使模型朝錯誤的方向發展。

有沒有另一種方法,也許使用Matlab,從文件加載數據到塊集?

對於1-d表,我正在尋找的Matlab的一個類似於命令

A = load(filename) 
A(:,1) % for the index 
A(:,2) % for the table values 

AKE

回答

1

如果我理解正確,這聽起來像你想要一個Lookup Table block與索引和表值,可以在模擬過程中動態更新。我相信你可以使用From File blockDemux blockLookup Table Dynamic block這樣做。比方說,你有一個包含以下形式的數組.MAT文件:

[ time_1 time_2 time_3 ...; %# Time stamps 
index1_1 index1_2 index1_3 ...; %# Index 1 for all time stamps 
index2_1 index2_2 index2_3 ...; %# Index 2 for all time stamps 
... 
indexN_1 indexN_2 indexN_3 ...; %# Index N for all time stamps 
value1_1 value1_2 value1_3 ...; %# Table value 1 for all time stamps 
value2_1 value2_2 value2_3 ...; %# Table value 2 for all time stamps 
... 
valueN_1 valueN_2 valueN_3 ...] %# Table value N for all time stamps 

對於每一列,有一個時間戳,N元素查找表的索引,並且爲表值N元素。一旦使用From File block加載,長度爲2*N的輸出可以使用Demux block分成長度爲N(即指數和表值)的兩個輸出。然後這兩個數組可以用於輸入和ydatLookup Table Dynamic block,從而創建一個查找表,其索引和表值可以在模擬運行時從文件更新。

響應來自AKE評論...

時間戳存在上述陣列中的,因爲我是,你想改變查找表數據的模擬時間的函數的印象(如使用一組索引和表值0到10秒,然後使用不同的組10到20秒)。如果你想這樣做,它會要求一些規格的數據將被更改的時間。

但是,如果你只是想在模擬開始從文件加載一個一套表中的數據,那麼你的.MAT文件應該只需要爲0的時間戳一列。在A您的樣本數據可以相應輕易修改:

A = load(yourDataFile); %# Load your data 
A = [0; A(:)];   %# Convert it to a column vector and add a time stamp 
save(yourMatFile,'A'); %# Save A to a .mat file for the From File block 

關於您對Demux block關心,你居然不應該需要指定N。你只需要指定它將有2個輸出,它將把輸入分成兩半。例如,如果輸入是一個10個元素的向量,並且您爲該塊指定了兩個輸出,則會得到兩個5元素向量作爲輸出。

+0

謝謝gnovice。是的,這是方向,但我認爲這裏有兩個問題。第一個問題是From File塊似乎要求* .mat數據是以時間序列的形式存在的 - 在我使用的數據表中沒有時間概念,所以這將是一個人工添加,它需要額外的「膠水腳本」。我相信第二個問題是Demux塊需要知道靜態N值,並且無法發現它(正確?)。目標是能夠使N是動態的 - 在模擬運行時發現。 – 2010-09-29 08:43:36

+1

@AKE:我更新了我的答案以解決上述問題。 – gnovice 2010-09-29 14:53:22

+0

不錯,簡單!這兩個問題都解決了 - 這很好。事實上,我認爲時間索引也應該解決基於時間的動態更新問題。 (我想到了另一種方法,因此在上述闡述之前就錯過了你的意思。)謝謝;) – 2010-09-29 16:14:22

0

表數據可以在MATLAB工作空間的變量,並且可以填充該工作區通過在運行模擬之前加載任何您想要的文件。所以在你的例子中,變量A可以用作表數據。

在運行模擬之前編寫一個啓動腳本來填充您的工作區,在該腳本中您可以從任何您想要的mat文件加載數據。

+0

感謝MikeT - 這適用於靜態表格,但不適用於動態表格。我想避免使用啓動腳本或工作區變量,因爲這意味着必須將數據保持在仿真外。理想的解決方案可以在模擬運行期間以某種方式從文件加載表格數據。例如,這將允許環境參數(表格數據)在模擬運行時及時緩慢演變。 – 2010-09-29 08:48:28

+1

我誤解了你的問題,我完全同意gnovice的建議,這是正確的做法。 – MikeT 2010-10-01 01:07:31