伙计们,
Matlab 2007b (7.5.0) 有一个 avgpower 函数。见这里:
“avgpower 方法使用积分的矩形近似值,使用存储在对象中的 PSD 数据计算信号的平均功率。
“avgpower 方法返回信号的平均功率,即 PSD 曲线下的面积。”
示例调用:
    numSamples = 10000
    频率 = 20
    幅度 = 10
    Fs = 1000
    t = [0:1/numSamples:1];
    sig = 幅度 * sin(2*pi*频率*t);
    h = 光谱.周期图('矩形');
    hopts = psdopts(h, 信号);
    设置(跳跃,'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值,而频率具有x值。所以,我可以在频率中找到介于“下”和“上”之间的样本,并且......呃,平均光谱中的相应值?我对此很模糊。
此外,“频率”中的值不一定对应于我想要的上限和下限,我不知道该怎么做。如果下部或上部正好位于宽频率箱的中间怎么办?例如,我是否需要半个 bin(即线性插值)?
也有可能从某种 FFT 中获取单个值,而不是使用 pwelch。
建议?