Matlab-基于短时神经网络的声音分类
这个例子展示了如何使用深度学习过程对声音进行分类。
1、数据集生成
生成1000个白噪声信号、1000个棕色噪声信号和1000个粉色噪声信号。假设采样率为44.1 kHz,每个信号表示0.5秒的持续时间。
fs = 44.1e3;
duration = 0.5;
N = duration*fs;
wNoise = 2*rand([N,1000]) - 1;
wLabels = repelem(categorical("white"),1000,1);
bNoise = filter(1,[1,-0.999],wNoise);
bNoise = bNoise./max(abs(bNoise),[],'all');
bLabels = repelem(categorical("brown"),1000,1);
pNoise = pinknoise([N,1000]);
pLabels = repelem(categorical("pink"),1000,1);
2、数据可视化
听声音信号,并使用melSpectrogram函数将其可视化。
sound(wNoise(:,1),fs)
melSpectrogram(wNoise(:,1),fs)
title('White Noise')
sound(bNoise(:,1),fs)
melSpectrogram(bNoise(:,1),fs)
title('Brown Noise')
sound(pNoise(:,1),fs)
melSpectrogram(pNoise(:,1),fs)
title('Pink Noise')
3、将数据集分为训练集和验证集
创建一个由800个白噪声信号、800个棕色噪声信号和800个粉色噪声信号组成的训练集。
audioTrain = [wNoise(:,1:800),bNoise(:,1:800),pNoise(:,1:800)];
labelsTrain = [wLabels(1:800);bLabels(1:800);pLabels(1:800)];
使用剩余的200个白噪声信号、200个棕色噪声信号和200个粉色噪声信号创建验证集。
audioValidation = [wNoise(:,801:end),bNoise(:,801:end),pNoise(:,801:end)];
labelsValidation = [wLabels(801:end);bLabels(801:end);pLabels(801:end)];
4、信号提取
音频数据是高维的,通常包含冗余信息。通过首先提取特征,然后使用提取的特征训练模型,可以降低维数。创建audioFeatureExtractor对象以提取mel光谱随时间变化的质心和斜率。
aFE = audioFeatureExtractor("SampleRate",fs, ...
"SpectralDescriptorInput","melSpectrum", ...
"spectralCentroid",true, ...
"spectralSlope",true);
调用extract从音频训练数据中提取特征。
featuresTrain = extract(aFE,audioTrain);
[numHopsPerSequence,numFeatures,numSignals] = size(featuresTrain)
5、数据准备
在下一步中,您将把提取的特征视为序列,并使用sequenceInputLayer作为深度学习模型的第一层。当使用SequenceInputLayers作为网络中的第一层时,trainNetwork希望将训练和验证数据格式化为序列的单元数组,其中每个序列随时间由特征向量组成。sequenceInputLayer要求时间维度沿第二维度。
featuresTrain = permute(featuresTrain,[2,1,3]);
featuresTrain = squeeze(num2cell(featuresTrain,[1,2]));
numSignals = numel(featuresTrain)
numSignals = 2400
[numFeatures,numHopsPerSequence] = size(featuresTrain{1})
numFeatures = 2
numHopsPerSequence = 42
提取特征
featuresValidation = extract(aFE,audioValidation);
featuresValidation = permute(featuresValidation,[2,1,3]);
featuresValidation = squeeze(num2cell(featuresValidation,[1,2]));
6、定义和训练网络
定义网络架构。
layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(50,"OutputMode","last")
fullyConnectedLayer(numel(unique(labelsTrain)))
softmaxLayer
classificationLayer];
要定义train选项,请使用option选项(深度学习工具箱)。
options = trainingOptions("adam", ...
"Shuffle","every-epoch", ...
"ValidationData",{featuresValidation,labelsValidation}, ...
"Plots","training-progress", ...
"Verbose",false);
要训练网络,请使用trainNetwork(深度学习工具箱)。
net = trainNetwork(featuresTrain,labelsTrain,layers,options);
7、验证网络
使用经过训练的网络对新的白噪声、棕色噪声和粉色噪声信号进行分类。
wNoiseTest = 2*rand([N,1]) - 1;
classify(net,extract(aFE,wNoiseTest)')
ans = categorical
white
bNoiseTest = filter(1,[1,-0.999],wNoiseTest);
bNoiseTest= bNoiseTest./max(abs(bNoiseTest),[],'all');
classify(net,extract(aFE,bNoiseTest)')
ans = categorical
brown
pNoiseTest = pinknoise(N);
classify(net,extract(aFE,pNoiseTest)')
ans = categorical
pink
Matlab-基于短时神经网络的声音分类相关推荐
- 【树叶分类】基于BP神经网络植物叶片分类Matlab代码
1 简介 本文以树叶为实验对象,针对传统分类问题耗时长,效率低的不足,提出了一个基于BP神经网络植物智能分类系统.这个计算机辅助分类系统不仅能够帮助提高植物分类的准确率同时也能缩减工作人员的工作量. ...
- 基于RBF神经网络的信用分类方法
简要介绍金融数据挖掘,RBF神经网络.提出基于RBF神经网络的信用分类的一种方法.此方法可根据客户提供的烦多而复杂的资料数据来评估客户信用的好坏.发挥RBF神经网络模拟生物体中神经网络的某些结构和功能 ...
- matlab 基于 libsvm工具箱的svm分类遇到的问题与解决
matlab 基于 libsvm工具箱的svm分类遇到的问题与解决 参考文章: (1)matlab 基于 libsvm工具箱的svm分类遇到的问题与解决 (2)https://www.cnblogs. ...
- matlab图像分类器,Matlab 基于svm的图像物体分类
Matlab 基于svm的图像物体分类 发布时间:2018-05-16 20:27, 浏览次数:1623 , 标签: Matlab svm 本周工作日志,老师布置了一个小作业,让我们使用matlab实 ...
- 基于卷积神经网络的句子分类模型【经典卷积分类附源码链接】
https://www.toutiao.com/a6680124799831769603/ 基于卷积神经网络的句子分类模型 题目: Convolutional Neural Networks for ...
- 基于卷积神经网络的高光谱分类 CNN+高光谱+印度松数据集
基于卷积神经网络的高光谱分类 一.研究现状 只考虑到高光谱图像的光谱特征,即: 1.提取特征(小波变换.Gabor纹理分析.形态学剖面) 2.利用分类方法分类(支持向量机.决策树.随机森林.神经网络) ...
- 【图神经网络】图分类学习研究综述[2]:基于图神经网络的图分类
基于GNN的图分类学习研究综述[2]:基于图神经网络的图分类 论文阅读:基于GNN的图分类学习研究综述 3. 基于图神经网络的图分类 3.1 卷积 3.2 池化 论文阅读:基于GNN的图分类学习研究综 ...
- 猿创征文|深度学习基于前馈神经网络完成鸢尾花分类
大家我是猿童学!这次给大家带来的是基于前馈神经网络完成鸢尾花分类! 在本实验中,我们使用的损失函数为交叉熵损失:优化器为随机梯度下降法:评价指标为准确率. 一.小批量梯度下降法 在梯度下降法中,目标函 ...
- MATLAB基于BP神经网络的手势识别
MATLAB基于BP神经网络的手势识别 摘 要:给出了采用MATLAB来识别五个手指和手背的同心圆距离,并通过颜色肤色的方法来提取手势特征量,同时利用BP神经网络算法进行误差分析来实现手势识别的设计方 ...
最新文章
- Linux重启命令reboot
- MSRCR(Multi-Scale Retinex with Color Restore)多尺度Retinex图像增强
- python soup提取叶子标签_python 利用beautifulSoup提取页面多个标签的文本内容
- springboot页面中静态图片路径
- 关于webservlet 请求异步处理,链接未关闭出现的bug
- 花书+吴恩达深度学习(二十)构建模型策略(超参数调试、监督预训练、无监督预训练)
- ArcGIS10.2不能打开10.6版本创建的镶嵌数据集
- 用户收货地址h5页面_如何实现H5可视化编辑器的实时预览和真机扫码预览功能?...
- POI数据获取-Python
- 软考中级网络工程师学习笔记(知识点汇总)简略版
- “人肉搜索”名词解释
- 手动安装K8s第五节:master节点kubectl命令部署
- laravel集合collect中的implode
- ubuntu 16.04 安装nvidia驱动 下载nvidia官方驱动
- 好玩游戏不上学去学计算机,如果你这样学习,不如去玩游戏!
- 计算机储存容量单位的进率,进制、存储与容量
- 福建中医药大学数字化校园应用及数据容灾系统181万
- 数据类型概述(基本数据类型)
- 【傻瓜攻略】深度学习之从入门到放弃
- 笔记连载 | Day6 FPGA三种建模方式区别及Verilog语法基础篇
热门文章
- 大厂实习生面试常问的一道算法题,LeetCode11 题目解析
- 偏差/方差、经验风险最小化、联合界、一致收敛
- hadoop学习-Netflix电影推荐系统
- express ajax分页实例,element+express+mongoose实现分页查询
- 计算机网络及应用 pdf,计算机网络及应用卷.pdf
- python类高级用法_十.python面向对象高级用法
- Python编程基础:第五十七节 reduce函数Reduce
- Python编程基础:第四十六节 super函数Super Function
- [特征工程系列二]显性特征的基本处理方法
- 【LeetCode从零单排】No 114 Flatten Binary Tree to Linked List