2

1) 假设我有使用F = fft(x)和获得的 FFT 和 STFT 系数S = spectrogram(x)。这些系数如何用作音频特征?(这里音频特征用于模式识别)。

2) 以下代码是否给出了信号中的 PSD 和最强大的频率(以 kHz 为单位)?

Hs = spectrogram.periodogram;
p = psd(Hs, x, 'Fs', 22050);
[C, I] = max(p.data);
max_f = p.Frequencies(I);

3) 如果 (2) 没问题,我如何n使用 PSD 找到信号中最强大的频率?

4) 如何使用类似于 PSD 的 FFT 和/或 STFT 找到最强大的频率?

提前致谢。

4

2 回答 2

2

我认为您需要定义“音频功能”的含义。根据您要实现的目标,有许多不同类型的功能(例如,请参阅这些论文中的一些功能)。

当您谈论“最强大的频率”时,我假设您想要进行某种形式的音高检测?如果是这种情况,那么 PSD 的峰值确实会给出最主要的频率,但这不一定是您听到的音高。例如,乐器可能正在演奏 200Hz 的音符,其频谱峰值在 200、400、600、800 等处,而 200Hz 不一定是最高振幅。事实上,您可以应用一个低通滤波器来去除 200Hz 分量,您仍然会认为它是音高(如果您通过电话听到音乐,您会听到这种效果 - 它被称为虚拟音高)。

如果您想检测音高,那么我建议您阅读音高估计算法。

编辑:那里有很多关于音频分类研究的论文,所以请搜索Eric Sc​​heirer、George Tzanetakis 和 Martin McKinney 等人的工作。我还会注册MIR 邮件列表,因为该列表中有很多该领域的核心人员,而且档案中有很多有用的东西。至于你关于“最强频率”的问题,我不太明白你的意思。当聆听不止一种乐器演奏的音乐时,通常没有一个主导频率。通常有一种可感知的旋律,由于混合而通常很突出,但我不确定这是否是你的意思。

于 2013-01-21T09:52:35.650 回答
2

1)S = spectrogram(x)通过将信号 x 细分为多个部分并计算每个部分的 PSD,为您提供作为时间函数的 FFT。fft(X)一次性为您提供整个信号的 fft。前者更有可能跟踪频率内容的变化,而后者更有助于查看整体频率内容。我对音频处理不太熟悉,但即使两个信号具有相同的功率谱,FFT 复杂相位的微小变化也会导致时域中的信号截然不同。

2) 语法似乎与我在 Matlab 中习惯的有点不同,但答案是肯定的。频率的单位取决于您使用的确切语法。

3)您可以使用该sort功能来获得n个最强大的频率箱。例如,[B,IX] = sort(p.data)freq_maxn = p.Frequencies(IX(1:n))

4) PSD = |FFT|^2/N。换句话说,PSD 只是 FFT 平方幅度的缩放版本。然而,对于实值信号,只使用了一半的 FFT,因为另一半只是一个复共轭。一旦你有了这个序列,最大频率和前 n 个频率的计算保持与 (2) 和 (3) 相同。有关详细信息,请参阅 [周期图] (http://www.mathworks.com/help/signal/ref/periodogram.html)。

于 2013-01-21T06:56:49.637 回答