6

それで、私は楽しみのために、サウンドファイル用の小さなビジュアライザーに取り組んできました。基本的には、Windows Media Player の「Scope」と「Ocean Mist」のビジュアライザーを真似したかったのです。Scope は簡単でしたが、Ocean Mist に問題があります。ある種の周波数スペクトルであると確信していますが、波形データに FFT を実行すると、Ocean Mist が表示するものに対応するデータが得られません。スペクトルは実際には正しいように見えるので、FFT に問題がないことがわかりました。ビジュアライザーがある種のフィルターを介してスペクトルを実行すると仮定していますが、それが何であるかはわかりません。何か案は?

EDIT2: ここにコードの編集版を投稿しました (編集者注: リンクはもう機能しません)。編集とは、すべての実験的なコメントをすべて削除し、アクティブなコードのみを残したということです。説明的なコメントもいくつか追加しました。ビジュアライザーは次のようになります

編集:ここに画像があります。1 つ目は私のビジュアライザーで、2 つ目は Ocean Mist です。

私のビジュアライザー

海霧

4

4 に答える 4

6

これは、何が起こるべきかを示す Octave コードです。構文が自明であることを願っています。

%# First generate some test data
%# make a time domain waveform of sin + low level noise
N = 1024;
x = sin(2*pi*200.5*((0:1:(N-1))')/N) + 0.01*randn(N,1);

%# Now do the processing the way the visualizer should
%# first apply Hann window = 0.5*(1+cos)
xw = x.*hann(N, 'periodic');
%# Calculate FFT.  Octave returns double sided spectrum
Sw = fft(xw);
%# Calculate the magnitude of the first half of the spectrum
Sw = abs(Sw(1:(1+N/2))); %# abs is sqrt(real^2 + imag^2)

%# For comparison, also calculate the unwindowed spectrum
Sx = fft(x)
Sx = abs(Sx(1:(1+N/2)));

subplot(2,1,1);
plot([Sx Sw]); %# linear axes, blue is unwindowed version
subplot(2,1,2);
loglog([Sx Sw]); %# both axes logarithmic

これにより、次のグラフが得られます: 上: 通常のスペクトル プロット、下: loglog スペクトル プロット (青はウィンドウなし) http://img710.imageshack.us/img710/3994/spectralplots.png

Octave に線形から対数の x 軸と y 軸へのスケーリングを処理させています。正弦波のような単純な波形でも同様の結果が得られますか?

古い答え

あなたが言及したビジュアライザーには慣れていませんが、一般的には:

  • スペクトルは、多くの場合、対数 y 軸 (またはスペクトログラムのカラーマップ) を使用して表示されます。
  • あなたのFFTは両側スペクトルを返しているかもしれませんが、おそらく前半だけを使いたいでしょう(すでにやっているようです)。
  • 時間データにウィンドウ関数を適用すると、漏れが減り、スペクトル ピークが狭くなります (これも行っているようです)。
  • 絶対的な大きさに関心がある場合は、変換ブロックサイズで割る必要があるかもしれません(あなたの場合は重要ではないと思います)。
  • Ocean Mist ビジュアライザーも対数 x 軸を使用しているようです。また、セットなどで隣接する周波数ビンを平滑化することもできます。
于 2010-03-17T22:02:55.353 に答える
3

通常、この種の場合、FFT 出力をパワー スペクトルに変換する必要があります。通常は、特定の出力ビンに対して、通常はログ (dB) 振幅スケールを使用します。

p = 10.0 * log10 (re * re + im * im);

于 2010-03-17T22:03:09.393 に答える
1

海霧の Y 軸が対数であるように見えます。

于 2010-03-17T22:19:23.497 に答える
1

y 軸だけでなく、x 軸も対数になっているようです。ピーク間の距離は、周波数が高いほど短くなるようです。

于 2010-03-17T22:44:36.753 に答える