アプリ版:「スタンプのみでお礼する」機能のリリースについて

matlabを用いて時系列データのパワースペクトルを計算、対数表示でグラフにプロットしています。
matlabのfft関数のヘルプに記載されていた例を参考に、以下のような自作の関数を組んで計算しているのですが、2つ質問があります。

1. この場合、パワースペクトルの0dBは、時系列の値ではいくつになるのでしょうか?
0dB = 1でしょうか?

2. 関数の中において、power_fftをN_fft(高速フーリエ変換時のデータ長さ)で割っている事の理由がわからなかったのですが、なぜ行っているのでしょうか?

------------------------------------------------
以下、自作のパワースペクトル表示関数を示します

function Power_db(Data_xx)
fs = 1000; % サンプリング周波数 [Hz]
N_fft = 2^12; % 4096個
xx_fft = fft(Data_xx,N_fft);
power_xx = xx_fft.* conj(xx_fft) / N_fft;
frequency = fs*(0:2047)/N_fft; % (0:2047)で500Hzまで
plot(frequency,20*log10(power_xx(1:2048)))
xlabel('Frequency [Hz]');
ylabel('Power Spectrum [dB]');
grid on;

---------------------------------------------------------

以上です。
何か足らない情報などがありましたらお申し付けください。

よろしくお願い致します。

A 回答 (1件)

dB値は相対的なものですから、基準となる信号の時系列データを作って、それを同じプログラムで処理したときのパワースペクトルの電力のd

B値を差引いてやれば、基準となる信号を基準としたパワースペクトルのdB値が得られるかと思いますが如何でしょうか?
    • good
    • 0
この回答へのお礼

info22様

回答して頂きありがとうございます。
基準信号として片側振幅1のcos波を作成して上のプログラムを実行したところ、約60dBの値になりました。

これを基準値として考えていきたいと思います。
どうもありがとうございました。

お礼日時:2008/11/20 18:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!