MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   在Octave中实现Matlab的avgpower? (https://www.labfans.com/bbs/showthread.php?t=22623)

poster 2019-12-10 16:49

在Octave中实现Matlab的avgpower?
 
民间,

Matlab 2007b(7.5.0)具有avgpower功能。看[URL="http://www.mathworks.com/products/signal/demos.html?file=/products/demos/shipping/signal/spectralanalysisobjsdemo.html"]这里[/URL] :

“ 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');现在,我[I]认为[/I]频谱具有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);

[url=https://stackoverflow.com/questions/662548]更多&回答...[/url]


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

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