在FFT程序中如何表示使用声波(正弦波,1000Hz,3sec,-3dBFS,44.1kHz)?该程序的输入是振幅和采样率列表。
我的意思是如何将声音文件(例如XYZ.wav文件)转换为FFT的输入,其中输入参数之一需要采用由幅度组成的.dat文件,而其他输入参数则需要采用采样率,如果任何必要。
答案 0 :(得分:0)
通常,当您执行fft调用时,会提供一维数组来表示时域中的曲线,通常这是您的音频曲线,但是fft会变换任何时间序列曲线...当您从音频文件开始时,假设是wav文件,则必须将二进制数据转换为此浮点1D数组...如果是wav,则文件将以44字节的标头开头,该标头详细说明了诸如采样率,位深度和字节序等基本属性...其余wav文件的一部分是有效负载...根据位深度,您将需要解析一组字节,然后将数据从通常的16位转换为数据,这将通过进行一些移位将两个字节转换为整数...您需要了解字节序(大字节序或小字节序)的概念,以及处理像立体声这样的多通道信号的交织...一旦生成了浮点数组表示,就将其馈送到fft调用中。 ..对于初学者,请忽略使用wav文件, d只需合成您自己的正弦曲线并将其输入到fft调用中,只是为了确认已知的频率将导致以其频域表示的该频率从fft调用中消失
从fft调用(或DFT)返回的响应将是一维复数数组...有一个简单的公式可以计算此fft结果集中每个频率的幅度和相位...请注意奈奎斯特极限是什么,以及如何仅将频域域数组折叠到自身顶部以使幅度加倍,而仅使用该频域域数组的一半元素...此频域域数组的元素0是您的DC偏移量,以及每个后续值元素称为频点,频点通过恒定的频率增量彼此分隔开,频率增量也由一个简单的公式计算得出...如果对这些公式感兴趣,请回返
现在,您可以欣赏在整个api生涯中全力以赴地开展工作的人们,这些api调用...一起砍掉30行api调用来执行以上所有操作的方法可能很实用,但是到目前为止更加荣幸地编写代码以手工完成自己之上的一切,因为我知道这将为您开辟新的视野,使您能够解决更细微的问题
通过进行fft调用将时域曲线转换为频域曲线的一个非常有趣的方面是,您保留了源信号的所有信息...为证明这一点,我强烈建议您接受下一步并通过将fft调用的输出转换回时域来执行对称操作
时域中的音频曲线-> fft->频率域表示->逆fft->返回时域中的原始音频曲线
此转换周期非常强大,因为它是一种很好的方法,可让您确认音频曲线到频率域是否正常工作