如何更快地嵌套while循环

时间:2016-04-04 23:08:05

标签: matlab while-loop serial-port instruments

我正在运行一个正在循环扫描串口的数据。这个while循环位于一个较大的while循环内,它不断从仪器(光谱仪)获取数据。

扫描端口的较小while循环连续写入文件,直到while条件变为False。我注意到这个while循环需要花费很多时间才能干扰光谱仪的数据采集。我使用命令fread(s)从串口对象s读取和fwrite写入文件。这两个过程似乎都非常缓慢并且会影响数据采集。

有没有办法加快速度?有什么我可以使用比fread更快的东西吗?我应该写一个数组而不是一个文件吗?如果是这样,我如何在while循环中写入数组,我不确定该数组预先有多大...

1 个答案:

答案 0 :(得分:0)

示例代码可能会有所帮助。

否则,要写入未知大小的数组,我首先要预先分配数组,用n表示n足够大,如果需要,你可以简单地把它做大。

像这样的东西。假设您每次都要写入条目。

n = (big number) ;
A = zeros(n, d) ;
i = 1 ;
while(...)
    % do stuff
    A(i,:) = values ; % values = length-d vector
    i = i + 1 ; 
    if i > size(A, 1)
        A = [A ; zeros(n, d)] ;
    end
    i = i + 1 ;
end

这可能并不完美,但应该足以满足您的申请。

作为旁注,请注意允许写入“超出数组范围”的内容。所以这是有效的

A = zeros(2, 5) ;
A(3,:) = [1 2 3 4 5] ;

但是在循环中完成效率非常低。