我正在寻找一种从 WAV 文件中提取数据的方法,这对我尝试实现的 FFT 算法很有用。到目前为止,我拥有的是左右声道的一堆十六进制值,但我对如何将其转换为 FFT 的时域和频域有些迷茫。
例如,这是我需要的:
3.6 2.6
2.9 6.3
5.6 4.0
4.8 9.1
3.3 0.4
5.9 4.8
5.0 2.6
4.3 4.1
这是接收 FFT 数据的函数原型(prototype):
void fft(int N, double (*x)[2], double (*y)[2])
其中 N 是 FFT 的点数,x 是指向时域样本的指针,y 是指向频域样本的指针。
谢谢!
出于测试目的,您不需要从 WAV 文件中提取波形数据。您可以只在内存中生成一些信号(例如 0、非零常数、正弦波、2 个叠加的正弦波、白噪声),然后在它们上测试您的 FFT 函数,看看您是否得到了您应该得到的信号(0 表示0,非零常数信号在零频率处出现峰值,每个正弦波有 2 个峰值,白噪声在所有频率上均匀非零幅值)。
如果你真的想解析 WAV 文件,请参阅 Wikipedia关于格式(点击链接)。使用原始 PCM 编码或 A/µ-law PCM 编码(又名 G.711)。
FFT 通常使用就地算法实现,这意味着输出替换输入。如果你这样做,你真的不需要第二个指针。
我是一名优秀的程序员,十分优秀!