如何在C语言中使用FFTW从PortAudio样本中提取频率信息
我想制作一个程序,使用PortAudio记录音频数据(我已经完成了这一部分),然后显示所记录音频的频率信息(现在,我想显示每组样本的平均频率) 根据我做的一些研究,我知道我需要做一个FFT。所以我在谷歌上搜索了一个用C语言编写的库,找到了FFTW 然而,现在我有点迷路了。我到底应该如何处理我记录的样本,从中提取一些频率信息?我应该使用哪种FFT(我想我需要一个真正的数据1D?) 一旦我做了FFT,我如何从它给我的数据中得到频率信息 编辑:我现在还找到了自相关算法。更好吗?更简单如何在C语言中使用FFTW从PortAudio样本中提取频率信息,c,audio,fft,fftw,portaudio,C,Audio,Fft,Fftw,Portaudio,我想制作一个程序,使用PortAudio记录音频数据(我已经完成了这一部分),然后显示所记录音频的频率信息(现在,我想显示每组样本的平均频率) 根据我做的一些研究,我知道我需要做一个FFT。所以我在谷歌上搜索了一个用C语言编写的库,找到了FFTW 然而,现在我有点迷路了。我到底应该如何处理我记录的样本,从中提取一些频率信息?我应该使用哪种FFT(我想我需要一个真正的数据1D?) 一旦我做了FFT,我如何从它给我的数据中得到频率信息 编辑:我现在还找到了自相关算法。更好吗?更简单 事先非常感谢,很
事先非常感谢,很抱歉,我完全没有这方面的经验。我希望它至少有一点意义。要将音频样本转换为功率谱:
- 如果音频数据是整数数据,则将其转换为浮点
- 选择FFT大小(例如N=1024)
- 将数据的a到N个样本应用(例如)
- 使用大小为N的实到复FFT生成频域数据
- 计算复频域数据的幅值(
)幅值=sqrt(re^2+im^2)
- 可选地将幅值转换为对数刻度(dB)(
)幅值\u dB=20*log10(幅值)