2017-01-11 7 views
3

現在、カルディフレームワークにパワースペクトルがどのように格納されているかを理解するのに苦労しています。オーディオファイルのスペクトログラムの値を理解する

私は正常私にthisのようなさまざまなオーディオファイルのためのデータポイントを持つ大規模なファイルを提供します

$cmd JOB=1:$nj $logdir/spect_${name}.JOB.log \ 
    compute-spectrogram-feats --verbose=2 \ 
    scp,p:$logdir/wav_spect_${name}.JOB.scp ark:- \| \ 
    copy-feats --compress=$compress $write_num_frames_opt ark:- \ 
     ark,scp:$specto_dir/raw_spectogram_$name.JOB.ark,$specto_dir/raw_spectogram_$name.JOB.scp 

を使用して、いくつかのデータファイルを作成しているように見えます。

問題は、このデータセットをどのように解釈すべきかわからないということです。この前にfftが実行されていることがわかりました。これは良いことだと思います。

上記の出力例は、1秒間のファイルからのものです。
スペクトラムの計算にはすべての標準が使用されているため、サンプル周波数は16 kHz、フレーム長= 25 ms、オーバーラップ= 10 msにする必要があります。 最初のセットのデータポイントの数は25186です。

これらの情報があれば、何らかの方法で出力を解釈できますか?

通常、周波数ビンサイズはF_s/N=bin_sizeで抽出できます。ここで、F_sはサンプル周波数、NはFFT長です。これは同じですか? 16000/25186 = 0.6 ... Hz/bin?

これを誤って解釈していますか?

答えて

4

一方はFFTを行う場合、通常、周波数ビンのサイズはF_sはサンプル周波数であり、Nは、FFTの長さであるF_s/N=bin_sizeによって抽出することができます。

これも同じですか? 16000/25186 = 0.6 ... Hz/bin?

F_s/Nは確かに周波数ビンのサイズを計算するのに使用します。しかし、Nは、FFTの長さではなく、サンプルの総数です。おおよそ25msのフレーム長と10msのホップサイズと、生成された出力データファイルがおそらく実際の値の入力に対して98行の257の値を持つという事実に基づいて、使用されるFFTの長さは512だったようです。ビンサイズ16000/512 = 31.25Hz /ビン。 (以前Z行列にロードされたデータを使用)、次のMATLABスクリプトを使用して生データをプロットするこのスケーリングに基づいて

、:

fs  = 16000; % 16 kHz sampling rate 
hop_size = 0.010; % 10 millisecond 
[X,Y]=meshgrid([0:size(Z,1)-1]*hop_size, [0:size(Z,2)-1]*fs/512); 
surf(X,Y,transpose(Z),'EdgeColor','None','facecolor','interp'); 
view(2); 
xlabel('Time (seconds)'); 
ylabel('Frequency (Hz)'); 

は、このグラフを与える(暗赤色の領域は最高のエリアです強度): Spectrogram

+0

すごく涼しい!コードを共有することは可能でしょうか? –

+0

は、プロットを作成するためのコードを共有しています。 –

+0

コードを共有してくれてありがとう:) –

関連する問題