首页 > 解决方案 > 如何在 Matlab 中从频谱图()的 PSD 输出矩阵中获取频带功率?

问题描述

我知道有一个函数叫做bandpower。但是,如果我已经使用频谱图函数对我的信号进行了 STFT,并且我有 PSD 矩阵,我怎样才能在不调用它的情况下获得与 bandpower 相同的输出?

ydata = ... %signal
srate = 250;

shift = ceil(length(ydata)/150);
noverlap = winsize-shift;
nfft = winsize;
[S,F,T,P] = spectrogram(ydata, rectwin(winsize), noverlap, nfft, srate, 'yaxis');

frc = 5; % so we are at the 5th row of spectrogram PSD output matrix

inspectedFreq = [((srate/2)/size(P,1)*(frc-1)) ((srate/2)/size(P,1)*frc)];
test1 = bandpower(ydata, srate, inspectedFreq);
test2 = mean(P(frc,:));

如您所见,我计算了谱图函数 PSD 输出矩阵的第 5 行的平均值,并将结果写入 test2 变量。我估计了频谱图 PSD 输出矩阵的第 5 行的频率范围,这依赖于矩阵的整个高度仅包含 0 到 srate/2 [Hz] 之间的频率这一事实。

但是当我在相同的输入信号上调用 bandpower 函数时,使用这些估计的频率界限,输出(test1 变量)是非常不同的。为什么会这样?

那么如何使用 spectrogram() 函数 PSD 输出矩阵(变量 P)正确计算与 bandpower() 相同的输出?

谢谢你的帮助!

标签: matlabsignal-processingspectrogramspectruminformation-theory

解决方案


推荐阅读