这个例子展示了如何使用深度学习过程对声音进行分类。
产生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 =分类粉红色的
audioFeatureExtractor
|audioDataAugmenter
|audioDatastore
|音频贴标签机