主要内容

使用深度学习分类声音

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

创建数据集

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

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”,真正的);

调用提取,从音频训练数据中提取特征。

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”“最后一次”) fulllyconnectedlayer (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 =分类粉红色的

另请参阅

|||

相关的话题