为什么两个等效信号的 MFCC 完全不同?

信息处理 离散信号 声音的 信号分析 mfcc
2022-01-31 21:11:35

我有一个音频文件,我在 R 中计算了 16 个(实际上是 15 个,因为我省略了第一个)MFCC。当我通过 VLC-Player 和 Icecast2-Server 流式传输此文件时,用 Java 接收它(使用 Javazoom 的播放器- Lib)然后再次将其传递给 R 进行 MFCC 计算我得到完全不同的值?有谁知道为什么会这样?

附加信息:

  • 当我再次将接收到的数据写入文件并在原始文件旁边查看时,它们看起来几乎相同(波形+频谱图)。
  • 该文件长度为 3 秒,包含过往车辆(汽车)的声音。
  • MFCC 是针对居中的 44100 个样本计算的。
  • 我需要有效数据才能使用 SVM 自动对汽车和卡车进行分类。该分类器使用从 150 个音频文件(每个文件包含一辆车)计算得出的特征进行训练。
  • 由于 R 在直接读取和处理 mp3 文件时遇到问题,我首先将 wav 转换为 mp3 并再次转换回来(为了“模拟”由于压缩导致的信息丢失)。

MFCC 值

此外,我会自动检测连续音频流中的车辆,因此(对于上面的特定示例数据)用于计算 MFCC 的波形具有大约 4400 个样本的偏移量。这对 44100 个样本的分析窗口有影响吗?

1个回答

你说:

我通过 VLC-Player 和 Icecast2-Server 流式传输此文件,用 Java 接收它(使用 Javazoom-Lib 的播放器)

当您在 Java 中接收流时,流格式是什么?

您说它是“相同的”,因为波形和/或频谱图看起来很相似,但是如果流格式(采样率、位深度等)不同,MFCC 会出现不同。

你能通过打印流格式来确认吗

  1. 在发送到 Java 之前
  2. 从 Java 收到后?

我建议使用Soxi打印出流格式(如果你不能从 R 或 Java 中转储它)

如果您可以消除流格式问题、mp3<->wav 问题(仅在 wav 中处理),如果您分析的窗口是相同的(如 jojek 所说),那么您的 MFCC 应该是相同的。