Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在Octave中实现Matlab的avgpower?

民间,

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);

更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:50


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.