我从连接到Arduino的加速度计上读取了一些读数,而Arduino又通过串行通信连接到MATLAB。我想把读数写入文本文件。 10秒读数将写入大约1000个条目,使文本文件大小约为1千字节。
我将使用以下代码:
%%%%%// Communication %%%%%
arduino=serial('COM6','BaudRate',9600);
fopen(arduino);
fileID = fopen('Readings.txt','w');
%%%%%// Reading from Serial %%%%%
for i=1:Samples
scan = fscanf(arduino,'%f');
if isfloat(scan),
vib = [vib;scan];
fprintf(fileID,'%0.3f\r\n',scan);
end
end
有关改进此代码的任何建议吗?这会有时间或大小限制吗?此代码将运行3天。
答案 0 :(得分:2)
不要使用文本文件,请使用二进制文件。 42718123229.123123
是ASCII中的18个字节,二进制文件中的4个字节。不要浪费不必要的空间。如果您的数据稍后将在MATLAB中使用,那么我建议您保存在.mat
个文件中
不要使用单个文件!选择合理的文件大小(例如100Mb)并确保当您获得大量数据时切换到另一个文件。你可以这样做,例如每小时保存一个文件。这样,您可以最大限度地减少软件在完成前2分钟崩溃时可能发生的错误。
答案 1 :(得分:1)
现在知道你的问题的真实尺寸,写一个文本文件是完全没问题的,处理这样的小数据没什么特别的。但是你的代码存在问题。您正在编写一个随时间增加的变量vid
。这可能会导致性能不佳,因为您没有使用预分配,并且可能会占用大量内存。我强烈建议不要保留这个变量,如果你需要dater,请事后阅读。
您应该考虑的另一件事是验证您的数据。如果您收到的样品少于预期,您会怎么做?包括时间戳!请注意,这些时间戳不准确,因为您之后添加它们,但它允许您识别是否只丢失了一些随机样本(可能会在之后进行插值),或者可能缺少一些连续的100个样本序列。