我正在运行一个正在循环扫描串口的数据。这个while循环位于一个较大的while循环内,它不断从仪器(光谱仪)获取数据。
扫描端口的较小while循环连续写入文件,直到while条件变为False。我注意到这个while循环需要花费很多时间才能干扰光谱仪的数据采集。我使用命令fread(s)从串口对象s读取和fwrite写入文件。这两个过程似乎都非常缓慢并且会影响数据采集。
有没有办法加快速度?有什么我可以使用比fread更快的东西吗?我应该写一个数组而不是一个文件吗?如果是这样,我如何在while循环中写入数组,我不确定该数组预先有多大...
答案 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] ;
但是在循环中完成效率非常低。