使用 KissFFT 创建 tflite-micro 音频分类的特征

问题描述 投票:0回答:1

我正在尝试在 ESP32 上使用 tflite-micro 运行音频分类,并进行定点计算。

模型是使用keras创建的,然后转换为tflite并量化为uint8。 keras 模型和 tflite 之间的交叉验证在 python 上产生了良好的结果。

我的代码结构是音频捕获(int16)-->使用stft创建频谱图(int16->uint16)-->执行量化(uint16->uint8)-->进行推理。

stft 是使用 KissFFT 在 esp32 上创建的,使用 16 位 int 作为输入。

我的问题是,我找不到如何对定点进行缩放和量化以匹配在 python 中为同一音频文件输入模型的值。

窗口的 fft 看起来很合适(参见附图)。

我尝试了不同的公式来调整 KissFFT 的输出值,使其与 Octave / Python 的输出值处于相同的范围内,但找不到任何使推理输出等效的公式。

关于如何缩放数据有什么想法吗?

tensorflow tflite kissfft
1个回答
0
投票

首先确保使用相同长度的 FFT。值的形状看起来非常相似。因此,正如您所怀疑的那样,这可能只是一个比例因子,这看起来是合理的。取一个频谱并除以另一个频谱。这将为您提供缩放因子的候选值。检查它们的分布,并选择最接近的值。

对于定点,有时会使用缩放来适应所选的数字表示形式。所以有很多可能的选择。

对于 FFT,将输出除以 FFT 长度是相当常见的。因此,您的一个实现可能会执行此操作,而另一个则不会。

© www.soinside.com 2019 - 2024. All rights reserved.