문제

여러분,

Matlab2007b(7.5.0)는 avgpower 기능입니다.보 :

"The avgpower 방법을 사용하여 직사각형 근사 통합 계산 신호의 평균 전력을 사용하여 PSD 에 저장된 데이터 체입니다.

"The 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');

지금 생각 스펙트럼에는 y 값의 PSD 및 주파수 x 값이 있습니다.그래서 찾을 수 있는 샘플에서 주파수 떨어지는 사이에"아래" 그리고"위쪽"그리고..er,평균 해당하는 값에서는 스펙트럼?나는 퍼지이다.

또한,값에"freq"지 않는 반드시 일치하 나 원하는 상부 및 하부,그리고 나는 무엇을 할지 확실하지 않습니다.어떤 경우 낮은 또는 상위 폭포에서 오른쪽의 넓은 주파수 bin?예를 들어,내가 반 bin(i.e선형 보간)?

그것은 수도에서 얻을 수 있는 단일 값이 어떤 종류에서의 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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top