如何写"大数据"到使用Matlab的文本文件

时间:2016-01-29 14:03:54

标签: matlab arduino text-files serial-communication read-write

我从连接到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天。

2 个答案:

答案 0 :(得分:2)

  1. 不要使用文本文件,请使用二进制文件。 42718123229.123123是ASCII中的18个字节,二进制文件中的4个字节。不要浪费不必要的空间。如果您的数据稍后将在MATLAB中使用,那么我建议您保存在.mat个文件中

  2. 不要使用单个文件!选择合理的文件大小(例如100Mb)并确保当您获得大量数据时切换到另一个文件。你可以这样做,例如每小时保存一个文件。这样,您可以最大限度地减少软件在完成前2分钟崩溃时可能发生的错误。

答案 1 :(得分:1)

现在知道你的问题的真实尺寸,写一个文本文件是完全没问题的,处理这样的小数据没什么特别的。但是你的代码存在问题。您正在编写一个随时间增加的变量vid。这可能会导致性能不佳,因为您没有使用预分配,并且可能会占用大量内存。我强烈建议不要保留这个变量,如果你需要dater,请事后阅读。

您应该考虑的另一件事是验证您的数据。如果您收到的样品少于预期,您会怎么做?包括时间戳!请注意,这些时间戳不准确,因为您之后添加它们,但它允许您识别是否只丢失了一些随机样本(可能会在之后进行插值),或者可能缺少一些连续的100个样本序列。