我可以使用fft来获取加载的1秒音频文件的人,说“ahhhh”并重新创建它,频率,相位和幅度。 我现在要做的是找出每个频率的开始位置以及它们在1秒音频文件中的结束位置并将数据放入数组中
示例:100hz从.23秒开始到.34秒, 104.34hz从.35seconds开始,到.37seconds结束。
fft可以这样做还是我需要将整个程序转移到使用小波?还有八度音阶中的小波示例,说明如何做我想要完成的事情吗?
我正在使用来自repo的Ubuntu Linux 12.04和Octave 3.2.4
由于 瑞克
答案 0 :(得分:5)
FFT作为估算离散傅里叶变换(DFT)的算法,提供音频信号的频率内容(如您所述的幅度和相位)。这将为您提供每个离散频率仓的一组幅度/相位值,您可以将其映射到连续频率值(基于bin索引或离散频率,FFT点的数量和信号的采样频率)。 / p>
DFT虽然(通过FFT)是一种全局变换,即自从你移动到频域以来,你将失去时间概念。你需要的是短时傅里叶变换(STFT),即。在信号的短时间帧(窗口)上进行FFT。这将为您提供一个时频表示,您可以在其中指定每个分析窗口的频率内容,从而为每个短时间实例指定频率内容。
逼近草图:定义时间窗口长度和窗口偏移(基于所需的时间分辨率或线性采样的时间实例),运行STFT,然后使用峰值拾取或局部最大值估计的方法每个窗口的傅里叶幅度。这将为您提供可以跨时间跟踪的主要频率位置(起始等)
在MATLAB中检查spectrogram以获得STFT的实现以帮助您入门。