主要内容

使用深度学习对声音进行分类

这个例子展示了如何使用深度学习过程对声音进行分类。

创建一个数据集

生成1000个白噪声信号,1000个棕色噪声信号,1000个粉色噪声信号。每个信号代表0.5秒的持续时间,假设44.1 kHz的采样率。

fs = 44.1 e3;时间= 0.5;N = * fs持续时间;wNoise = 2*rand([N,1000]) - 1;wLabels = repelem(分类(“白色”), 1000, (1);bNoise =过滤器(1 [-0.999]wNoise);bNoise = bNoise. / max (abs (bNoise), [],“所有”);bLabels = repelem(分类(“棕色”), 1000, (1);pNoise = pinknoise ([N, 1000]);pLabels = repelem(分类(“粉红色”), 1000, (1);

探索数据集

听一个白噪声信号,并将其可视化使用melSpectrogram函数

声音(wNoise (: 1), fs) melSpectrogram (wNoise (: 1), fs)标题(“白噪音”)

检查一个棕色噪声信号。

声音(bNoise (: 1), fs) melSpectrogram (bNoise (: 1), fs)标题(“布朗噪音”)

检查一个粉色噪声信号。

声音(pNoise (: 1), fs) melSpectrogram (pNoise (: 1), fs)标题(“粉红噪声”)

将数据集分为训练集和验证集

创建一个由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:结束),bNoise(:, 801:结束),pNoise(:, 801:结束)];labelsValidation = [wLabels(801:结束);bLabels(801:结束);pLabels(801:结束)];

提取的特征

音频数据是高度维数的,通常包含冗余信息。你可以通过先提取特征,然后用提取出来的特征训练你的模型来降低维数。创建一个audioFeatureExtractor对象提取MEL谱随时间变化的质心和斜率。

aFE = audioFeatureExtractor (“SampleRate”fs,“SpectralDescriptorInput”,“melSpectrum”,“spectralCentroid”,真的,“spectralSlope”,真正的);

呼叫extract,从音频训练数据中提取特征。

audioTrain featuresTrain =提取(aFE);[numHopsPerSequence, numFeatures numSignals] =大小(featuresTrain)
numHopsPerSequence = 42
numFeatures = 2
numSignals = 2400

在下一步,你将把提取的特征作为序列,并使用sequenceInputLayer作为深度学习模型的第一层。当你使用sequenceInputLayer作为网络的第一层,trainNetwork期望训练和验证数据被格式化为序列的单元格数组,其中每个序列由随时间变化的特征向量组成。sequenceInputLayer要求时间维度沿着二次元。

featuresTrain =排列(featuresTrain (2, 1, 3));featuresTrain =挤压(num2cell (featuresTrain [1, 2]));numSignals =元素个数(featuresTrain)
numSignals = 2400
[numFeatures, numHopsPerSequence] =大小(featuresTrain {1})
numFeatures = 2
numHopsPerSequence = 42

提取验证特征。

audioValidation featuresValidation =提取(aFE);featuresValidation =排列(featuresValidation (2, 1, 3));featuresValidation =挤压(num2cell (featuresValidation [1, 2]));

,定义和训练网络

定义网络架构。看到深度学习层列表(深度学习工具箱)为更多的信息。

层= [sequenceInputLayer numFeatures lstmLayer (50,“OutputMode”,“最后一次”) fullyConnectedLayer(numel(unique(labelsTrain))) softmaxLayer classificationLayer];

要定义培训选项,请使用trainingOptions(深度学习工具箱)

选择= trainingOptions (“亚当”,“洗牌”,“every-epoch”,“ValidationData”{featuresValidation, labelsValidation},“阴谋”,“训练进步”,“详细”、假);

训练网络,使用trainNetwork(深度学习工具箱)

网= trainNetwork (featuresTrain、labelsTrain层,选择);

测试网络

使用训练过的网络对新的白噪声、棕噪声、粉噪声信号进行分类。

wNoiseTest = 2*rand([N,1]) - 1;分类(净,提取(aFE wNoiseTest) ')
ans =分类白色
bNoiseTest =过滤器(1 [-0.999]wNoiseTest);bNoiseTest = bNoiseTest. / max (abs (bNoiseTest), [],“所有”);分类(净,提取(aFE bNoiseTest) ')
ans =分类棕色(的)
pNoiseTest = pinknoise (N);分类(净,提取(aFE pNoiseTest) ')
ans =分类粉红色的

另请参阅

|||

相关的话题

Baidu
map