0

我正在使用 std.numeric 中的 fft 函数

Complex!double[] resultfft = fft(timeDomainAmplitudeVal);

参数 timeDomainAmplitudeVal 是音频幅度数据。采样率 44100 hz,有 131072(2^16) 个样本

我看到 resultfft 与 timeDomainAmplitudeVal(131072) 的大小相同,这不适合我的项目(也没有意义)。我需要能够将 FFT 划分为 N 个等间隔的频率。我需要这个 N 由我来定义。

反正有没有用 std.numeric.fft 实现这个,或者你对 fft 库有什么建议吗?

Ps:我很高兴听到是否也存在一些 DSP 库

4

3 回答 3

1

这就是傅里叶变换在实际数字运算世界中的工作方式。给 S 个信号样本,得到 S 个幅度。(忽略复数和对称性的问题。)

如果您想要 N 个幅度,则必须对从 FFT 获得的 S 点幅度进行插值。您最大的决定是在线性、立方、截断 sinc 等之间进行选择。

替代方案:对原始音频信号进行重新采样,以在相同的总时间间隔内获得所需的 N 个样本。然后对其进行 FFT。

于 2013-09-17T00:54:35.620 回答
1

看看 pfft,一个用 D 语言编写的快速 FFT。

http://jerro.github.io/pfft/doc/pfft.pfft.html

或 numpy & Pyd

http://docs.scipy.org/doc/numpy/reference/routines.fft.html

http://pyd.dsource.org/

高温高压

于 2013-09-17T02:58:34.323 回答
0

FFT 给出相同的数据长度是绝对正常的。

这里有一些 C++ 代码来执行具有重叠和可选“零相位”排序的 windows FFT 分析。http://pastebin.com/4YKgbed1


FFT 系数是什么意思?

问题: “好的,我已经完成了 FFT,据说我可以恢复原始信号。现在,这些系数是多少。

答案: “您可以将系数 i 视为表示从 SR*i/(2*N) 到 SR*(i+1)/(2*N) 的频率的相位和幅度。这是一个有用的比喻。但是更准确的观点是系数 i 是频率正弦 SR*i/(2*N) 在原始输入块的重建中的贡献。”

于 2013-09-29T08:44:03.243 回答