質問

皆さん、

Matlabの2007B(7.5.0)avgpower機能を有しています。 ここに:

"avgpower方法はと一体に矩形近似を使用し に格納されたPSDデータを用いて、信号の平均電力を計算します 対象ます。

"avgpower方法は、信号の平均パワーを返し PSD曲線下面積。」

例呼び出します:

    numSamples = 10000
    frequency = 20
    amplitude = 10
    Fs = 1000
    t = [0:1/numSamples:1];
    sig = amplitude * sin(2*pi*frequency*t);
    h = spectrum.periodogram('rectangular');
    hopts = psdopts(h, signal);
    set(hopts,'Fs',Fs);
    p = psd(h,signal,hopts);
    lower = 12
    upper = 30
    beta_power = p.avgpower([lower upper]);

私はオクターブでこの種の機能を複製するために探しています。ザ・ 機能「pwelchは」可能性のように思えます。ウィットに:

    ...
    sig = amplitude * sin(2*pi*frequency*t);
    pwelch('R12+');
    [spectra, freq]=pwelch(signal, [], [], [], Fs, plot_type='dB');

今、私はのスペクトルは、PSDのyの値を持っていると思うし、FREQは、xを持っています 値。だから、私は「低」の間に入るFREQのサンプルを見つけることができます そして、「上」と..小胞体、スペクトルの対応する値を平均化? 私はこれにかなりあいまいだ。

また、「FREQ」の値は必ずしも一致しない私 上下の希望、そして私はそれについて何をすべきかわかりません。どのような右の広いFREQビンの途中で下または上にある場合?例えば、私は(すなわち、直線補間)半分ビンを取るのですか?

また、FFTの何らかのから単一の値を取得することは可能かもしれません 代わりにpwelchを使用する。

提案?

役に立ちましたか?

解決

どうやら私は自分自身に話しますが、ここではこの方法をさまよう人のためのいくつかの提案オクターブコードですよ。

function[avgp] = oavgpower(signal, sampling_freq, lowfreq, highfreq, window)

[spectra, freq]=pwelch(signal, window, [], [], sampling_freq);

idx1=max(find(freq = highfreq));

% Index and actual frequency of lower and upper bins
%idx1
%freq(idx1)
%idx2
%freq(idx2)

% 0: don't include the last bin
width = [diff(freq); 0];

pvec = width(idx1:idx2).*spectra(idx1:idx2);
avgp = sum(pvec);
scroll top