python - 基于 FFT 的音频分类
问题描述
在 python 中,我只通过检查频率和幅度来执行警报识别。我的代码采用 1s 声音的 FFT,然后将其与预定频率及其幅度进行比较。由于警报包含更高的频率(6k-9kHz 等)和一个长数组(44100 个不同的元素),我可以在没有 ML 的情况下成功。由于高分辨率的 FFT,即使在 7010Hz 和 7016Hz 等近距离频率下,我也可以区分幅度变化,并且由于这些频率在录制环境中没有任何外部噪声,因此我可以猜出正确的警报。但是,我想用 ML 来实现它,因为用很多警报来执行它是很困难的。有很多音频分类源/工作示例等,但我找不到最适合我的。他们通常使用特征提取,MFCC,但我不 我不想通过使用 MFCC 来失去我的分辨率,因为它结合了接近的频率。所以我只想构建一个机器学习算法,它只检查每个类中的两个数组;频率和幅度(都有 44100 个元素)你能推荐任何资源来构建这个算法吗?我检查了下面的源代码,没问题,但我不想使用 MFCC 类型的方法。如果您发表评论,我可以通过示例来提出我的问题。 pyAudioClassification
解决方案
除了具有特定频率之外,警报通常还具有特征性的时间特征。要么是波动的,要么是开/关模式。
要检测这些,您应该将 STFT 转换为对数刻度的 melspectrogram。这可以使用 100-1000 毫秒的分析时间窗口进行分类。卷积神经网络往往做得最好,但你也可以只使用随机森林分类器。
推荐阅读
- caching - Gemfire ClusterConfigurationNotAvailableException:无法从定位器中检索集群配置
- python - Implement a bottle spin
- google-apps-script - 使用 Apps 脚本定义/创建 BigQuery 保存视图的 SQL 查询
- html - 如何关闭 javafx webview 中的自动重新排列?
- node.js - 如何使用 Lambda 启动和停止 EC2 实例
- c# - 此时运行时拒绝评估表达式
- machine-learning - label_binarize 不适合显示错误输入形状的 sklearn 朴素贝叶斯分类器
- linux - 使用互斥锁和 epoll 的 C 应用程序中的 Futex 错误
- linux - 如何使用 sed 或 awk 处理指定列的内容?
- python-3.x - 使用 Matplotlib 创建一个简单的时间表