首页 > 解决方案 > 如何重新采样不适合 MATLAB 内存的信号数据数组?

问题描述

我有一组大小为 200,000,000x3 的加速度计数据,我需要在 matlab 中重新采样。使用此数据调用 resample 函数后,我收到“内存不足”错误。(我的电脑有 8 GB 的 RAM)

我尝试了什么:我将加速度计数据(x,y,z)加载为一个数组,将时间数据加载为另一个数组。我为每个创建了一个 tall 数组,然后尝试再次调用 resample 函数。

我这次收到的错误是:“第一个参数必须是一个高列向量。”

请帮助我了解完成此任务的正确方法。谢谢!

标签: matlabout-of-memory

解决方案


默认情况下,Matlab 将所有内容都放在一个 64 位数字中。如果您的 acc 数据限制为 8 位或 16 位或 32 位值,则可以使用这些数字类型节省一些空间。但是,这可能会出现问题,具体取决于您想要做什么,因为并非 matlab 中的所有函数都可以使用非 64 位数字。

数组需要一块连续的内存,所以一个 3xn 的数组需要 3 n 8 字节的内存 + 更多的开销。我认为如果你做 3 个 1xn 数组,你可能会消耗更多的内存,但它不必是一个块。

您可以尝试关闭所有内容,以便您的机器也有大量可用内存。

根据数据,我可能会编写一个快速的 awk 脚本来提取每个第 n 个点并将其放入一个较小的文件中,甚至在将数据放入 matlab 之前就可以读取该文件。

听起来您可以加载数据,但是您的重采样功能是什么?您是在减少数据还是尝试将其插入到更精细的时间向量中?

您可以加载数据,删除部分数据,将其保存到 mat 文件,然后重复。然后对你的各种mat文件进行操作。


推荐阅读