Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
民间,
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 = spectrum.periodogram('rectangular'); Hopts = psdopts(h,signal); set(hopts,'Fs',Fs); p = psd(h,signal,hopts); 较低= 12 上限= 30 beta_power = p.avgpower([lower upper]);我希望在Octave中复制这种功能。函数“ pwelch”似乎是可能的。以机智: ... sig =振幅* sin(2 * pi *频率* t); pwelch('R12 +'); [spectra,freq] = pwelch(signal,[],[],[],Fs,plot_type ='dB');现在,我认为频谱具有PSD的y值,而频率具有x的值。因此,我可以找到频率在“较低”和“较高”之间的样品,然后,.er,对光谱中的相应值求平均值?我对此很模糊。 此外,“ freq”中的值不一定与我想要的上限和下限相对应,我不确定该怎么做。如果下部或上部恰好位于宽频率仓的中间怎么办?例如,是否要取半个仓(即线性插值)? 也有可能从某种FFT中获得单个值,而不是使用pwelch。 有什么建议吗? 回答: 显然我是在自言自语,但这是为那些以这种方式徘徊的人建议的Octave代码。 函数[avgp] = oavgpower(信号,sample_freq,lowfreq,highfreq,窗口)[spectra,freq] = pwelch(signal,window,[],[],sample_freq);idx1 = max(find(freq = highfreq));上下料仓的百分比指数和实际频率%idx1%freq(idx1)%idx2%freq(idx2)%0:不包括最后一个垃圾箱宽度= [diff(freq); 0];pvec =宽度(idx1:idx2)。* spectra(idx1:idx2);avgp = sum(pvec); 更多&回答... |
![]() |
![]() |