Julia 中的零填充 FFT

Zero-padded FFT in Julia

如何计算 Julia 中特定长度的 fft 零填充?当然,我可以将零附加到我的矢量,但这看起来很尴尬。

我在文档中找不到任何相关信息,调用 methods(fft) 似乎也没有显示任何相关的方法签名。我也找不到与 plan_fft 相关的内容。

我不认为有任何关键字参数可以做这个或类似的事情,如果那是你要找的东西?

nextpow2()nextprod() 函数对于获取要输入到 fft() 的数组的大小很有用。然后您可以创建一个更有效大小的零数组并用您的数据填充它。或者你可以将理想大小和你的数组大小之间的差异附加到你的数组中(如果你正在计算大量的 fft,前者更好,因为你可以通过每次重新填充来重用输入数组)。

来自评论的一行datpad = [dat; zeros(eltype(dat), nextprod(length(dat)) - length(dat)]

http://docs.julialang.org/en/release-0.5/stdlib/math/?highlight=fft#signal-processing 如果您还没有检查过!

如果我没记错的话,Julia 使用的是 FFTW 来进行 FFT。我不记得在 FFTW 手册中看到过任何关于在不处理输入数据的情况下自动执行零填充 FFT 的内容。

如果您对速度不感兴趣并且仅将 FFT 用作离散傅里叶变换 (DFT) 的 shorthand,您可以使用任意频率仓采样的 DFT 函数或只是 运行手动变换。它将不再是 O( N log N ) 操作,但它确实避免了手动填充原始数据向量,并且您可以 space 根据需要对转换进行采样,例如对您感兴趣的频谱部分进行过采样或忽略您不关心的部分。

例如,制作以f频率采样的DFT矩阵:

M = exp( -2im*pi * f/Fs * (0:N-1)' )

其中Fs是数据向量的采样率,N是数据向量的长度。 f 也是频率值的向量。应用矩阵乘法:

y = M * x

如果 DFT 矩阵变得太大,只需循环应用它的每一行。