3

オーディオウェーブとその時間-周波数データ(x軸に時間、y軸に波のエネルギーと周波数データ)を示すグラフを作成する方法を見つけようとしています。私は2つの別々のプロットでそれを行うこのコードを持っています:

[audio, fs] = wavread('audio.wav');

subplot(211)
spectrogram(audio,256,200,256,fs,'yaxis')

subplot(212)
wavEnergy=audio(:,1);
time=(1/fs)*length(wavEnergy);
t=linspace(0,time,length(wavEnergy));
plot(t,wavEnergy);

そして今、私は2つのことについて助けが必要です。

まず、スペクトログラムの時間を秒単位で取得するにはどうすればよいですか?現在、x範囲は0〜340(「時間」のラベルが付いています)でグラフ化されており、クリップの長さは約40秒です(他のプロットはこれを正しく表示しています)。

次に、それらを一緒にプロットするにはどうすればよいですか?スペクトログラムから行列を取得できることは知っていますが、その行列からどの配列を取得し、その時間枠を秒に変換するにはどうすればよいですか?

編集:

最初の問題は解決しましたが、グラフはまだ奇妙なことをしています。どちらも約40のデータを出力しますが、グラフの範囲とデータのオフセットは異なります。スペクトログラムは0〜40秒ですが、最初の.5秒はデータを表示せず、波のプロットは0〜45秒で、最後の5秒はデータを表示しません。範囲とオフセットを同じにするにはどうすればよいですか?

編集2:

axis tight;両方のサブプロットで使用する必要がありました

4

1 に答える 1

3

これらの2つのプロットを同じタイムベースに合わせるには、データのサンプリング頻度を決定する必要があります。スペクトログラムに渡すパラメータに基づいて、サンプリング周波数は1000Hzです。の定義に基づくとtime = (1/8000)*length(wavEnergy)、サンプリング周波数は8000Hzです。これらは一貫していません。wavファイルからオーディオサンプリング周波数を取得するには、を使用できます[audio, fs] = wavread('audio.wav')

于 2012-09-23T13:47:54.643 に答える