オクターブでのMATLABのavgpowerの実装?
-
20-08-2019 - |
質問
皆さん、
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);
所属していません StackOverflow