日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab-基于短时神经网络的声音分类

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 whitebNoiseTest = filter(1,[1,-0.999],wNoiseTest);bNoiseTest= bNoiseTest./max(abs(bNoiseTest),[],'all');classify(net,extract(aFE,bNoiseTest)')ans = categorical brownpNoiseTest = pinknoise(N);classify(net,extract(aFE,pNoiseTest)')ans = categorical pink

?

總結

以上是生活随笔為你收集整理的Matlab-基于短时神经网络的声音分类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。