2016-12-07 6 views
-1

通常の音のガラスブレークサウンドと50 wavファイルサウンドの50 wavファイルがあります。すべてのサウンドファイルの長さは1秒です。次に、ニューラルネットワークを使って音を分類する必要があります。どのようにしてサウンドファイルを抽出し、どのニューラルネットワークを使用すればよいですか?ここでMatlab:オーディオ抽出機能とニューラルネーワーク

私の友人と私が取り組んできたコードです:XあなたはFFTを使用して抽出しているあなたの機能を含むマトリックスとする

%network input extraction (retrieve trimmed data audio) 

p = which('audio_000.wav'); 
file_list = dir ([fileparts(p) filesep 'audio_***.wav']); 
% file 000-050 is glass break 
% file 051-100 is normal 
file_names = {file_list.name}'; 
n = length(file_names); 
inp = zeros (n,6); 

for k=1:n 
    %read WAV file 
    aud1=audioread(file_names{k}); 
    a=16000; 
    aud2=zeros(a,1); 
    [m,o]=size(aud1); 
    j=1:m; 
    aud2(j)=aud1(j); 

    %Fourrier Transforms 
    %extract feature 

    Fs=1000; 
    nfft=500; 
    X=fftshift(fft(aud2,nfft)); 
    X=X(1:nfft); 
    mx=abs(X); 
    f= -Fs/2:Fs/(nfft-1):Fs/2; 

    %sorting to gets 5 peaks of FFT 
    %retrieve 5 highest value of peaks 

    mx1=mx; 
    f1=f; 
    s=zeros(nfft,2); 
    for i=1:nfft %sort the value of 5 peak amplitude and retrieve 5 highest 
     if f1(i)<=1 
      mx1(i)=0; 
     end 
     s(i,1)=mx(i); 
     s(i,2)=f1(i); 
    end 
    s1=sortrows(s); 
    s2=s1; 
    for i=nfft:-1:2 
     if s1(i,1)>s1(i-1,1) && s1(i,2)>s1(i-1,2) 
      s2(i-1,1)=0; 
     end 
    end 
    s3=sortrows(s2); 
    s4=s3; 

    for i=nfft:-1:2 
    if s3(i,1)>s3(i-1,1) && s3(i,2)-s3(i-1,2)>-1 
    s4(i-1,1)=0; 
     end 
    end 
    s5=sortrows(s4); 

    %get length of WAV files 
    l=m/10e4; 

    % Input Vector for neural network 
    % 5 input from FFT 
    % i input from the length audio 

    inp(k,1:end)=[s3(nfft:-1:nfft-4,2)' l]; 
end 
figure, plot(aud1); 
figure, plot(f,mx); 

% define target 
tar=zeros(2,1); 

%tar(1:50) glass break 
%tar(51:100) normal sound 

tar(1:50,1)=0; 
tar(51:100,1)=1; 

trinput=inp'; 
trtarget=tar'; 

display('press any key to cont'); 

% neural network training 

nnstart; %start neural network tool 
+0

私は、FFTを使用して信号の特徴を抽出しようとしました。 –

+0

これらの機能を使用してNNを訓練することができます。あなたはこのチュートリアルを見てみることができます:https://de.mathworks.com/videos/wine-classification-with-neural-pattern-recognition-tool-68798.html – StefanM

+0

いくつかのコード。 – StefanM

答えて

0

Tはターゲットベクトルです。i番目のサウンドファイルに通常のサウンドが含まれている場合はT(i) = 0、i番目のサウンドファイルにはガラスの音が含まれている場合はT(i) = 1です。

あなたのニューラルネットワークの層のサイズ設定:あなたはtraining-にデータを分割することができ、検証やテストが

net.divideParam.trainRatio = 70/100; 
net.divideParam.valRatio = 15/100; 
net.divideParam.testRatio = 15/100; 
を設定

layerSize = 10; 

をして、ネットワーク

net = patternnet(layerSize); 

を初期化します

今すぐネットワークをトレーニングできます

[net,tr] = train(net,X,T); 

、あなたはMathworks社webpageでより詳細な説明と、このコードを見つけることができますテスト

outputs = net(X); 
errors = gsubtract(T,outputs); 
performance = perform(net,T,outputs); 

し、最終的に

view(net) 

注を行います。

+0

だから。コードの場合、ちょうどあなたが与えたコードでコードを続行する必要がありますか? I –

+0

@BassamAbdulBasir基本的にはyesです。あなたはフィーチャマトリックスとターゲットベクトルを正しく初期化する必要があります。 – StefanM

+0

どういう意味ですか? –