DSP FFT基频wav文件

Posted

技术标签:

【中文标题】DSP FFT基频wav文件【英文标题】:DSP FFT fundamental frequency wav file 【发布时间】:2013-05-04 22:28:31 【问题描述】:

我在 C# 中有一个 FFT 算法,我在缓冲区中生成频率为 440、FS=1600 和窗口长度为 2048 的正弦波。

在将信号发送到 FFT 之前,我将窗口长度加倍并在缓冲区数据之间放置虚值(0es)。在 FFT 之后,我计算幅度并获取最大幅度的索引并将其乘以 bin 大小。它的工作原理是它返回类似 442 Hz 的东西 :)

现在我用 Matlab 将相同生成的正弦文件放入录制的 .wav 文件中。当我从 C# 运行 FFT 时,它返回 884 Hz 的两倍,正如我预期的那样。为什么?

我用 Audacity 检查了 .wav 文件,他们得到了 440 的正确值。

那么知道为什么我的价值翻倍了吗?

【问题讨论】:

您是在执行单侧 FFT 还是完整 FFT?如果你只做单面版本,那么变换向量中的最后一个元素对应的频率为 FS/2,而不是 FS。 不知道是哪个版本,怎么弄出来?如果这是一方面,为什么我生成的 C# 信号显示正确? 假设您的原始信号是实数且不复数,则两侧傅里叶变换将关于中间元素 (FS/2) 对称。例如,如果您的信号是频率为 f0 的纯音,则会在 f0 和 FS-f0 处出现尖峰。 是的,它是对称的,在我的图中有 2 个尖峰,由于对称冗余,我仅将幅度计算为 FFT 长度/2 【参考方案1】:

我想通了,好像我没有正确读取wav文件。

【讨论】:

以上是关于DSP FFT基频wav文件的主要内容,如果未能解决你的问题,请参考以下文章

您如何分析 PCM 或 WAV 样本的基频? [关闭]

保存在文件中的双样本的 FFTW

没有从 Exocortex FFT 获得预期的输出

WAV 文件的 FFT 和输出以绘制频谱

wav文件和FFT的matlab中的Audioread

FFT 的基频