matlab - 如何在 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() 相同的输出?
谢谢你的帮助!
解决方案
推荐阅读
- tensorflow - 如何使 yolo v3 中的边界框更紧(更靠近对象)?
- r - GROUP BY ... 在 dbplyr 中有
- java - 我在我的 android 项目中出现错误,并显示其他四个错误?
- laravel - 在laravel中检索日期之间的数据
- python - 如何爬取IMDB?[阅读更多] 按钮未按下
- python - ModuleNotFoundError:没有名为“intersys.pythonbind31”的模块
- kubernetes - 谷歌 Kubernetes 引擎节点空闲超时
- bash - 为什么每次重启都需要更新系统变量?
- .net - 无法创建虚拟目录。找不到 Web 服务器“http://localhost/foo”
- python - 如何在sklearn的isolationforest中使用文档向量