1

皆さん、

Matlab 2007b (7.5.0) には avgpower 関数があります。ここを参照してください:

avgpower メソッドは、オブジェクトに格納された PSD データを使用して信号の平均電力を計算するために、積分に対する四角形近似を使用します。

「avgpower メソッドは、PSD 曲線の下の領域である信号の平均パワーを返します。」

呼び出しの例:

    サンプル数 = 10000
    頻度 = 20
    振幅 = 10
    Fs = 1000
    t = [0:1/サンプル数:1];
    sig = 振幅 * sin(2*pi*周波数*t);
    h = スペクトル.ピリオドグラム('長方形');
    hopts = psdopts(h, シグナル);
    セット (hopts、'Fs'、Fs);
    p = psd(h、信号、ホップ);
    下=12
    上=30
    beta_power = p.avgpower([下限上限]);

この種の機能を Octave で複製しようとしています。関数「pwelch」は可能性のようです。ウィット:

    ...
    sig = 振幅 * sin(2*pi*周波数*t);
    pwelch('R12+');
    [スペクトル、周波数]=pwelch(信号、[]、[]、[]、Fs、plot_type='dB');

ここで、スペクトルには PSD の y 値があり、freq には x 値があると思います。それで、「より低い」と「より高い」の間にある周波数のサンプルを見つけることができました..ええと、スペクトルの対応する値を平均しますか?私はこれについてかなり曖昧です。

さらに、「freq」の値は、希望する上限と下限に必ずしも一致するとは限らず、どうすればよいかわかりません。下部または上部が広い周波数ビンの真ん中にある場合はどうなりますか? たとえば、ビンの半分を取得しますか (つまり、線形補間しますか?)。

pwelch を使用する代わりに、ある種の FFT から単一の値を取得することも可能です。

提案?

4

1 に答える 1

2

どうやら私は独り言を言っているようですが、この道をさまよう人のために、いくつかの Octave コードを提案します。

function[avgp] = oavgpower(信号、サンプリング周波数、低周波数、高周波数、ウィンドウ)

[スペクトル、周波数]=pwelch(信号、ウィンドウ、[]、[]、sampling_freq);

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

下位ビンと上位ビンの % インデックスと実際の頻度
%idx1
%freq(idx1)
%idx2
%freq(idx2)

% 0: 最後のビンを含めない
幅 = [diff(周波数); 0];

pvec = 幅 (idx1:idx2).*スペクトル (idx1:idx2);
avgp = 合計 (pvec);
于 2009-03-20T14:05:39.353 に答える