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

Tensorflow 如何使用FFT和神经网络对声音进行分类?我应该使用CNN还是RNN?,tensorflow,keras,neural-network,Tensorflow,Keras,Neural Network,我正在做一个个人项目的教育目的,学习Keras和机器学习。首先,我想对声音是拍手还是跺脚进行分类 我正在使用一个声音触发的微控制器,并在20usec下对声音进行采样。微控制器将把这些原始ADC数据发送到PC机进行Python处理。我现在取1000个点,用numpy得到FFT(用rfft得到它的绝对值) 现在,我想把捕获到的FFT信号作为训练数据输入clap或stomp,以便使用神经网络对其进行分类。我已经为此研究了一整天,有些文章说应该使用卷积神经网络,有些文章说应该使用递归神经网络 我研究了卷

我正在做一个个人项目的教育目的,学习Keras和机器学习。首先,我想对声音是拍手还是跺脚进行分类

我正在使用一个声音触发的微控制器,并在20usec下对声音进行采样。微控制器将把这些原始ADC数据发送到PC机进行Python处理。我现在取1000个点,用numpy得到FFT(用rfft得到它的绝对值)

现在,我想把捕获到的FFT信号作为训练数据输入clap或stomp,以便使用神经网络对其进行分类。我已经为此研究了一整天,有些文章说应该使用卷积神经网络,有些文章说应该使用递归神经网络


我研究了卷积神经网络,它提出了另一个问题,如果我应该使用Keras'1-D还是2-D Conv.

你需要处理FFT信号来分类声音是拍打还是跺脚

对于卷积神经网络(CNN):

CNN可以从固定长度的输入中提取特征。具有最大池的1D CNN在信号数据方面工作得最好(我个人使用过它们而不是加速度计数据)

如果您的输入是固定长度且具有重要功能,则可以使用它们

对于递归神经网络:

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

时间特征(例如)可以用这种方式来识别clap。拍手的声音立即升高,然后是柔和的声音(拍手结束时)。RNN将按顺序学习这两个特性(如上所述)。拍手也是一个连续的动作(它由不同的活动顺序组成)

如果RNN和LSTM具有出色的功能,则它们可能是最佳选择

一款混合动力轿车:

该神经网络是CNN和LSTMs(RNN)的混合体。他们使用CNN进行特征提取,然后LSTM学习该序列。CNN提取的特征还包含时间特征

如果您使用Keras,这可能会非常简单

提示:

在进行音频分类时,我还建议使用MFCC来提取特征

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


希望能有所帮助。

由于在这种情况下,列车/测试系统不是嵌入式系统,请务必查看VGGish(也指包含拍手的论文和数据集),它使用以下内容计算一组功能:

VGISH接受了如下计算的音频特征训练:

  • 所有音频重新采样为16 kHz单声道
  • 使用短时傅里叶变换的幅度计算谱图,窗口大小为25ms,窗口跳变为10ms,周期性Hann窗口
  • 通过将光谱图映射到64个mel箱来计算mel光谱图 覆盖范围为125-7500 Hz
  • 给出了稳定的对数mel谱图 通过应用对数(mel光谱+0.01)计算,其中偏移为 用于避免取零的对数
  • 然后,这些功能将被删除 框架成0.96秒的非重叠示例,其中 示例包括64个mel波段和96帧,每个10毫秒

注意-鼓掌已经包括在内()

谢谢你的回答。在我的例子中,我有一个固定的FFT数据。我还读到了MFCC,它非常有趣。我会按照你的建议去做。非常感谢。顺便说一下,我正在考虑你提到的时间特征。是的,正确。拍手声立即升高,然后随着声音的结束,声音会衰减。然而,这可能很容易在时域上可视化。这是否意味着我需要向神经网络提供时域和fft信号?这只是对“时间特征”含义的解释。:-)谢谢你的信息!我将对此进行调查:)