2017-09-04 103 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阵列可以被转换成另一种数据类型和绘制