大型数据集的离散傅里叶变换

10视图(30天)
百度器皿的matlab脚本执行DFT在一个大型的数据集,从文件中读取。我的数据包含大量文件(部分)的一个信号,我需要获得整个序列的傅里叶频谱。整个信号的文件太大被安装到内存。有一个算法执行FFT的片段和建构整个信号的频谱的部分光谱?
很多谢谢!

接受的答案

伊凡van der克朗
伊凡van der克朗 2011年6月1日
结果的大小是一个问题吗?否则你可以添加0段执行转换,最后以笔为傅里叶变换是线性的。例如,如果S段的数量,年代指数、N分段的数量,N的指数,其傅里叶变换你的信号和f
F = 0 (S * N, 1);
s = 1: s
f =负载(段数字年代”);%这里我假设您加载当前段
F = F + fft ([0 (N * (s - 1), 1);f;0 (N * (s), 1)]);
结束
如果这是一个问题,我会首先考虑如果它是值得的。如果你有这么多的数据点,你会有一个非常大的光谱分辨率。这是真正需要的吗?我的意思是,如果是大负荷,你是永远不会画出频谱即使你设法完成fft。所以,如果没有,就加载所有段跳过固定数量的点,如每10项。然后将这个“减少”信号的变换。或者你可以把这十个点的均值作为这一价值。
最后,您可以实现自己的版本的Cooley-Turkey算法。我想这是唯一的办法来完成整个工作。你必须加载数据相同的方式我之前的建议(每n ^ th条目),执行fft,但是转移保存和加载数据。直到你已经通过了所有的条目。然后执行加权求和所有保存的傅里叶变换,与所谓的抚弄因素重量。从这个数组,fft,这是你最后的一部分向量(它是在相同的“跳过”形式)。保存这一个过程,做了不同的捻因素,直到最后的fft的所有条目。然后你必须重新加载所有连接正确的条目再次得到相同的部分结构。
在我看来,这最后一个选项是不可行,因为它是许多工作要一个unhandlable回答,因为你将无法有这样的大阵在工作区中。
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2011年6月1日
听起来很像“快得电脑有更多的记忆”是最简单的解决方案;-)

登录置评。

更多的答案(0)

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!