【问题标题】:fft and waveletsfft 和小波
【发布时间】:2012-08-23 02:26:43
【问题描述】:

我可以使用 fft 来获取加载的 1 秒音频文件的频率、相位和幅度,然后重新创建它。 我现在要做的是找出每个频率在 1 秒音频文件中的开始位置和结束位置,并将数据放入数组中

示例:100hz 从 0.23 秒到 0.34 秒开始, 104.34hz 开始于 0.35 秒,结束于 0.37 秒。

fft 可以做到这一点,还是我需要改变整个程序以使用小波?还有八度音程中的小波示例可以显示如何做我想要完成的事情吗?

我正在使用来自 repo 的 Ubuntu Linux 12.04 和 Octave 3.2.4

谢谢 瑞克

【问题讨论】:

  • 对于人声,FFT 或小波都不适合。改为研究音高检测/估计算法,这与峰值频谱频率测量不同。

标签: matlab fft octave wavelet


【解决方案1】:

FFT 作为一种估计离散傅里叶变换 (DFT) 的算法,提供音频信号的频率内容(您提到的幅度和相位)。这将为您提供每个离散频率区间的一组幅度/相位值,您可以将其映射到连续频率值(基于区间索引或离散频率、FFT 点的数量和信号的采样频率)。

尽管 DFT(通过 FFT)是一种全局变换,也就是说,由于您正在移动到频域,因此您将失去时间的概念。您需要的是短时傅里叶变换 (STFT),即信号的短时间范围(窗口)上的 FFT。这将为您提供时频表示作为输出,您可以在其中指定每个分析窗口的频率内容,从而指定每个短时间实例。

方法草图:定义时间窗口长度和窗口偏移(基于所需的时间分辨率或线性采样时间实例),运行 STFT,然后在每个窗口中的傅立叶幅度。这将为您提供可以跨时间跟踪的主要频率位置(发作等)

在 MATLAB 中检查 spectrogram 以获取 STFT 的实现以帮助您入门。

【讨论】:

  • FFT 不会“估计” DFT,它会精确计算它。如果 FFT 和 DFT 实现给出不同的结果,这仅是由于机器精度(舍入不同的时间,在过程中的不同“位置”)。具有无限精度的机器将通过 FFT 或 DFT 算法计算完全相同的解。
  • @user1207217 你是对的。我只是强调 FFT 是一种实现转换 (DFT) 的算法。不同的 FFT 将以不同的精度“计算”DFT 变换,并在效率和精度之间进行权衡。数值精度(精确计算或近似)取决于 i)您正确指出的有限精度、浮点算术和舍入误差,ii)特定的 FFT 算法(例如“精确”或“近似”、“稀疏”或“完整”),iii)库/实现及其处理错误累积的方式,即重新缩放迭代等。
猜你喜欢
  • 2016-04-06
  • 2010-12-29
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
相关资源
最近更新 更多