2017-02-14 12 views
2

オーディオ信号からフィーチャを抽出するために、Matlabでスクリプトを作成しています。これはコード:信号からフィーチャを抽出してファイルに保存する

clear;clc; 

folder = dir('sonidos'); 
m = length(folder); 

fileW = fopen('caracteristicas.txt','wt'); 

for i = 3:m 
    file = strcat('sonidos/', folder(i).name); 
    fprintf('Leyendo Archivo: %s \n', file); 
    [y, Fs] = audioread(file); 
    max = max(y); 
    mean = mean(y); 
    min = min(y); 
    median = median(y); 
    peak2peak = peak2peak(y); 
    peak2rms = peak2rms(y); 
    rms = rms(y); 
    rssq = rssq(y); 
    std = std(y); 
    var = var(y); 
    kurtosis = kurtosis(y); 
    power = (norm(y)^2)/length(y); 
    fprintf('Caracteristicas: %f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f \n', ... 
      Fs, max, mean, min, median, peak2peak, peak2rms, rms, rssq, std, var, kurtosis, power); 
    fprintf(fileW,'%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f \n', ... 
        Fs, max, mean, min, median, peak2peak, peak2rms, rms, rssq, std, var, kurtosis, power); 
end 

fclose(fileW); 

オーディオファイルは 'sonidos'というフォルダにあります。私がコードを実行すると、MatLabは言う:

Leyendo Archivo: sonidos/1.wav 
Caracteristicas: 22050.000000,0.352722,-0.000128,-0.435028,-0.000092,0.787750,17.550266,0.024788,6.027810,0.024787,0.000614,47.710490,0.000614 
Leyendo Archivo: sonidos/2.wav 
Subscript indices must either be real positive integers or logicals. 

あなたの助けてくれてありがとう!

+0

通常、このエラーには行番号も含まれています。 "下付き文字インデックスは、正の整数または論理でなければなりません。 テストでエラー(15行目)rms = rms(y);" – Cecilia

+0

いいえ、行番号を指定していません。私は各行にコメントをしてみましたが、行のmax = max(y)をコメントアウトすると、エラーが発生します。したがって、このスクリプトはすべてのファイルを読み取りますが、機能を抽出することはできません。 –

答えて

1

ローカル変数はMatlab関数をオーバーライドします。例えば

min = min(y);は、名前minのローカル変数を作成し、あなたがminを使用するときに、今から、変数ではなくmin機能を使用されています。次

チェック:

clear;clc; 

folder = dir('sonidos'); 
m = length(folder); 

fileW = fopen('caracteristicas.txt','wt'); 

for i = 3:m 
    file = strcat('sonidos/', folder(i).name); 
    fprintf('Leyendo Archivo: %s \n', file); 
    [y, Fs] = audioread(file); 
    max0 = max(y); 
    mean0 = mean(y); 
    min0 = min(y); 
    median0 = median(y); 
    peak2peak0 = peak2peak(y); 
    peak2rms0 = peak2rms(y); 
    rms0 = rms(y); 
    rssq0 = rssq(y); 
    std0 = std(y); 
    var0 = var(y); 
    kurtosis0 = kurtosis(y); 
    power0 = (norm(y)^2)/length(y); 
    fprintf('Caracteristicas: %f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f \n', ... 
     Fs, max0, mean0, min0, median0, peak2peak0, peak2rms0, rms0, rssq0, std0, var0, kurtosis0, power0); 
    fprintf(fileW,'%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f \n', ... 
       Fs, max0, mean0, min0, median0, peak2peak0, peak2rms0, rms0, rssq0, std0, var0, kurtosis0, power0); 

end 

fclose(fileW); 

は、私はあなたのローカル変数名を変更し(ちょうどそれぞれの最後に 0を追加しました)。

+0

ご協力ありがとうございます!できます! –

関連する問題