如何使用 Matlab 将 "Big Data" 写入文本文件

How to write "Big Data" to a text file using Matlab

我正在从连接到 Arduino 的加速度计上获取一些读数,Arduino 又通过串行通信连接到 MATLAB。我想将读数写入文本文件。 10 秒读取将写入大约 1000 个条目,使文本文件大小约为 1 KB。

我将使用以下代码:

%%%%%// 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 天。

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

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

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

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