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

 

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
BP神经网络是一种常用的人工神经网络模型,可以用来进行短时交通流预测。下面是一些基于MATLAB的BP神经网络短时交通流预测的步骤和代码示例。 1. 数据准备 首先需要收集一段时间的交通流量数据作为训练集和测试集。数据可以从交通监控设备、道路监控摄像头等获取。然后将数据进行预处理,包括去除异常值、归一化等。 例如,我们假设我们有一个包含交通流量的数据文件traffic.csv,其中每行包含一个时刻的交通流量数据。我们可以使用MATLAB中的csvread函数来读取数据并进行归一化处理: ```matlab data = csvread('traffic.csv'); data_normalized = normalize(data); ``` 2. 构建BP神经网络模型 接下来,我们需要构建一个BP神经网络模型并对其进行训练。在MATLAB中,可以使用神经网络工具箱来构建和训练神经网络模型。 例如,我们可以使用MATLAB中的feedforwardnet函数来创建一个具有10个隐层神经元的BP神经网络模型: ```matlab net = feedforwardnet(10); ``` 然后,我们可以使用train函数将数据集输入到神经网络中进行训练: ```matlab net = train(net, data_normalized); ``` 3. 进行交通流预测 当我们完成BP神经网络模型的训练后,就可以使用该模型来进行交通流预测。在MATLAB中,我们可以使用sim函数来进行预测。 例如,我们可以使用下面的代码来对未来一个小时的交通流量进行预测: ```matlab future_data = predict(net, data_normalized(end)); ``` 这将返回一个包含未来一个小时的交通流量预测值的向量。 总的来说,基于MATLAB的BP神经网络短时交通流预测的步骤包括数据准备、构建BP神经网络模型和进行交通流预测。通过这些步骤,我们可以使用MATLAB来构建一个简单的交通流预测系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值