如何在Julia中计算fft
零填充到特定长度?当然,我可以在我的向量中附加零,但这看起来很尴尬。
我在文档中找不到任何相关内容,调用methods(fft)
似乎也没有提出任何相关的方法签名。我找不到与plan_fft
相关的任何内容。
答案 0 :(得分:2)
我不认为有任何关键字参数可以做到这一点或类似的东西,如果这就是你要找的东西?
nextpow2()
和nextprod()
函数可用于获取要输入fft()
的数组的大小。然后,您可以创建一个更有效的零数组,并用数据填充它。或者你可以将理想大小和数组大小之间的差异追加到你的数组中(前者更好,如果你计算了很多fft&s;那么你可以通过重新填充它来重用它时间)。
评论datpad = [dat; zeros(eltype(dat), nextprod(length(dat)) - length(dat)]
http://docs.julialang.org/en/release-0.5/stdlib/math/?highlight=fft#signal-processing如果你还没有检查出来的话!
答案 1 :(得分:0)
如果我没弄错的话,Julia使用FFTW进行FFT。我不记得在FFTW手册中看到有关在不操纵输入数据的情况下自动执行零填充FFT的任何内容。
如果您对速度不感兴趣并且仅使用FFT作为离散傅里叶变换(DFT)的简写,则可以使用任意频率二进制采样的DFT函数进行DFT,或者仅手动运行变换。它将不再是O(N log N)操作,但它确实避免了手动填充原始数据向量,您可以根据需要对变换的采样进行间隔,例如,对您感兴趣的频谱部分进行过采样,或者忽略您不关心的部分。
例如,要使DFT矩阵以频率f
采样:
M = exp( -2im*pi * f/Fs * (0:N-1)' )
其中Fs
是数据向量的采样率,N
是数据向量的长度。 f
也是频率值的向量。应用矩阵乘法:
y = M * x
如果DFT矩阵太大,只需在循环中应用它的每一行。