MATLAB - 大量值的自相关

时间:2017-11-11 11:56:09

标签: matlab

我有一个包含大量值的 txt 文件(约4百万个值,上面提到的 txt 文件的每一行一个),我想使用MATLAB函数autocorr来计算上述一系列值的自相关。

我的问题是MATLAB不允许我创建一个具有我需要的元素数量的向量,而是将矢量大小限制为~25000个元素(在64位操作系统上)。

什么是聪明的方法?非常感谢提前!

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是将文件数据分成块,计算每个块的自相关,然后汇总结果。

稍微扩展一下,您也可以使用移动窗口而不是离散块(例如:观察1-30,然后2-31,然后3-32,......)。

但是让我们暂时坚持第一种方法。这是一个允许您指定块长度然后读取文件块的函数:

function res = readFileChunks(file,chunkSize)
    fid = fopen(file,'r');

    if (fid < 0)
        error('Cannot open file "%s".',file);
    end

    res = {};

    while (~feof(fid))
        res{end+1} = fscanf(fid,'%f',[1 chunkSize])';
    end

    fclose(fid);
end

示例:

res = readFileChunks('data.txt',2500);

现在,您所要做的就是清理结果(例如,清空由空文件行引起的空单元格)并将自相关处理为每个向量的循环。

由于Matlab循环非常昂贵,您还可以直接将自相关值计算到读取文件块的循环中。这样您就可以直接收到最终结果。