1

以下に、信号のパワースペクトルを計算する方法をコードで示します。

Fs=100;
n = length(x) (in my example always n=160);

whann = window(@hann,n).';
x = whann.*x';

xdft = fft(x);
xdft = (2/length(x))*xdft(1:length(x)/2+1);
xdft = abs(xdft);
xdft=xdft.^2;
freq = 0:Fs/length(x):Fs/2;

ここで、パワースペクトルの下の面積を計算したいと思いますが、周波数範囲は4〜6Hzのみです。ベクトル周波数の最初の32個の要素は次のようになります。

freq = [0,00    0,28    0,56    0,83    1,11    1,39    1,67    1,94    2,22    2,50    2,78    3,06    3,33    3,61    3,89    4,17    4,44    4,72    5,00    5,28    5,56    5,83    6,11    6,39    6,67    6,94    7,22    7,50    7,78    8,06    8,33]

したがって、4,17 Hz〜6,11Hzの領域しか見つかりません。

特定の周波数範囲(たとえば4〜6 Hz)のスペクトル下の面積を計算する方法を教えてください。

助けてくれてありがとう

4

1 に答える 1

2

私は次のように進めます:

idx = find(freq>=4 & freq<=6);

trapz(freq(idx),spectrum(idx))

私があなたの質問を正しく理解したならば、上記のことはあなたが推定したい結果にあなたを導くはずです。

編集

とのスペクトル値がないためfreq=4Hzfreq=6Hz次のように値を補間することをお勧めします。

int_spec = exp(interp1(log(freq),log(spec),log(4:.1:6),'linear','extrap'))

その後、電話します

trapz(4:.1:6,int_spec)
于 2013-02-07T17:36:48.500 に答える