【问题标题】:Implementing Matlab's avgpower in Octave?在 Octave 中实现 Matlab 的 avgpower?
【发布时间】:2009-03-19 15:06:59
【问题描述】:

伙计们,

Matlab 2007b (7.5.0) 有一个 avgpower 函数。见here

"avgpower 方法使用矩形近似积分来 使用存储在 对象。

"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 价值观。所以,我可以找到频率介于“较低”之间的样本 和“上”和..呃,平均光谱中的相应值? 我对此很模糊。

此外,“freq”中的值不一定对应于我的 想要的上下,我不知道该怎么做。如果下部或上部正好位于宽频率箱的中间怎么办?例如,我要取半个 bin(即线性插值)吗?

也有可能从某种 FFT 中获得单个值 而不是使用 pwelch。

建议?

【问题讨论】:

    标签: matlab signal-processing octave spectral-density


    【解决方案1】:

    显然我是在自言自语,但这里有一些建议的 Octave 代码供那些走这条路的人使用。

    函数[avgp] = oavgpower(信号,采样频率,低频率,高频率,窗口) [光谱,频率]=pwelch(信号,窗口,[],[],采样频率); idx1=max(find(freq = highfreq)); % 索引和下层和上层的实际频率 %idx1 %频率(idx1) %idx2 %频率(idx2) % 0: 不包括最后一个 bin 宽度 = [差异(频率); 0]; pvec = 宽度(idx1:idx2).*光谱(idx1:idx2); avgp = sum(pvec);

    【讨论】:

      猜你喜欢
      • 2011-03-31
      • 2016-05-07
      • 2021-04-05
      • 2018-03-26
      • 1970-01-01
      • 2018-09-16
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多