2

如何fft在 Julia 中计算零填充到特定长度?当然,我可以将零添加到我的向量中,但这似乎很尴尬。

我在文档中找不到任何关于此的内容,调用methods(fft)似乎也没有提出任何相关的方法签名。我找不到任何相关的东西plan_fft

4

2 回答 2

2

我认为没有任何关键字参数可以执行此操作或类似的操作,如果那是您要查找的内容?

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

于 2016-09-27T10:43:04.017 回答
1

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

如果您对速度不感兴趣并且仅使用 FFT 作为离散傅立叶变换 (DFT) 的简写,则可以使用任意频率 bin 采样的 DFT 函数进行 DFT,或者仅手动运行变换。它不再是 O( N log N ) 操作,但它确实避免了手动填充原始数据向量,并且您可以根据需要对变换的采样进行间隔,例如对您感兴趣或离开的频谱部分进行过采样去掉你不关心的部分。

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

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

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

y = M * x

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

于 2016-10-09T21:06:50.000 回答