2017-09-04 101 views
0

我正在使用Matlab來設置實驗的數據採集過程,函數ain.DAQbufferGet是從我們的硬件中讀取數據的函數。它包含一系列數據點,如[-200,-160,10,50,-20,40,170,160,-200... etc]預分配.NET陣列的矩陣

的問題是,DAQbufferGet的輸出是一個1x1 System.Int16[]

這樣的輸出也可以通過使用

`NET.createArray('System.Int16', 50000)` 

這裏50000創建僅僅是一個例子數

我想存儲DAQbufferGet在矩陣中的輸出,而不必將其轉換爲不同的數據類型,並能夠稍後(循環外)繪製它,如下所示:

data = int16(zeros(10, 50000)); 

for k = 1:10 
    data(k,:) = int16(zeros(1,50000)); 
end 

for i = 1:10 
    data(i,:) = int16(ain.DAQbufferGet()); 
end 

我有困難做與1x1 System.Int16[]數據類型

我將如何做到這一點相似的地方?

具體預先分配一個.NET數組的矩陣,它可以稍後在上面描述的for循環中寫入。

+1

您將在哪個環境中使用並在採集後繪製數據?如果它在Matlab中,那麼長時間保持'.net'數據類型幾乎沒有什麼優勢。我將在接收時直接轉換DAQbufferGet的輸出,並將其以Matlab中最便利的數據類型_built-in_的形式存儲在Matlab中。 – Hoki

+0

是的,它將在Matlab中。 理想情況下,我會轉換爲循環之外的另一種數據類型。 循環只需要儘可能快地獲取和存儲數據,轉換隻會讓它太慢 – JCW

+1

您不能以這種方式使用'.net'數組。 Matlab支持的'.net'數組**不支持冒號操作符。它們只支持**標量**索引。這意味着你不能使用這種類型的賦值'data(:,i)= ...'。你必須按照元素,循環,經典的'.net'方式處理它們:'for k = 1:n; data(k,i)= ...; end;'等等...... – Hoki

回答

1

似乎存儲.NET陣列中的電池裝置,可在以後將其解壓縮和索引作爲這樣

for k = 1:10 
data{k} = NET.createArray('System.Int16', 50000); 
end 

for i = 1:10 
data{i} = ain.DAQbufferGet(); 
end 

數據{I}返回.NET陣列可以被轉換成另一種數據類型和繪製