如何使用FFT和神经网络对声音进行分类?我应该使用CNN还是RNN



我正在做一个个人项目,以学习学习keras和机器学习。首先,我想对声音是鼓掌或踩踏的分类。

我使用的是声音触发的微控制器,样品 @ 20USEC。并且微控制器将将此RAW ADC数据发送到PC进行Python处理。我目前要获得1000分并使用numpy获得FFT(使用RFFT并获得其绝对值(。

现在,我想将捕获的FFT信号喂给拍手或踩踏作为训练数据,以使用神经网络对其进行分类。我整天都在研究这一点,一些文章说应该使用卷积神经网络,有人说应该使用经常性的神经网络。

我研究了卷积神经网络,它提出了另一个问题,如果我应该使用keras的1-d或2-d Conv。

您需要处理FFT信号以分类声音是拍手还是踩踏。

用于卷积神经网络(CNN(:

CNN可以从固定长度输入中提取特征。具有最大功能功能的1D CNN在信号数据上工作最佳(我亲自使用了加速度计数据(。

如果输入是固定的,则可以使用它们。

对于复发性神经网络:

信号具有时间特征时应使用

时间特征(例如(可以以这种方式考虑拍手。拍手立即发出高刺的声音,然后发出柔和的声音(拍手结束时(。RNN将以序列学习这两个功能(如上所述(。拍手也是一个顺序动作(它由序列的各种活动组成(。

rnns和LSTMS如果获得出色的功能,它们可能是最好的选择。

混合Conv LSTM:

此NN是CNN和LSTMS(RNN(的杂种。他们使用CNN进行特征提取,然后LSTMS学习了此序列。CNN提取的功能还包含时间特征。

,如果您使用keras,这可能非常容易。

提示:

在执行音频分类时,我还建议使用MFCC提取功能。

我认为您应该尝试所有3种方法,然后看看哪种方法最适合。RNN和ConvlSTM最有可能适用于您的用例。

希望它有帮助。

由于火车/测试系统在这种情况下不是嵌入式系统,因此请查看Vggish(https://github.com/tensorflow/models/models/models/master/master/master/research/Audioset-还指纸张和数据集,包括拍手(,该纸张使用以下来计算一组功能:

VGGISH经过计算的音频功能的培训:

  • 所有音频被重新采样至16 kHz单声道。
  • 使用短时傅立叶变换的尺寸,窗口大小为25 ms,窗口跳跃10毫秒和周期性的Hann窗口,计算出频谱图。
  • 通过将频谱图映射到64个MEL箱来计算MEL频谱图覆盖125-7500 Hz的范围。
  • 稳定的对数MEL频谱图是通过应用log(mel-spectrum 0.01(计算,其中偏移为用于避免将对数为零。
  • 这些功能是构建为0.96秒的非重叠示例,每个示例示例涵盖了64个MEL频段和96帧10毫秒。

注意 - 拍手已经涵盖(https://research.google.com/audioset/dataset/clapping.html(

最新更新