计算特定频率范围的功率谱下面积

Posted

技术标签:

【中文标题】计算特定频率范围的功率谱下面积【英文标题】:Calculate area under power spectrum for certain frequency range 【发布时间】:2013-02-07 17:14:18 【问题描述】:

下面我将介绍我的代码如何计算信号的功率谱:

Fs=100;
n = length(x) (in my example always n=160);

whann = window(@hann,n).';
x = whann.*x';

xdft = fft(x);
xdft = (2/length(x))*xdft(1:length(x)/2+1);
xdft = abs(xdft);
xdft=xdft.^2;
freq = 0:Fs/length(x):Fs/2;

现在,我想计算功率谱下的面积,但仅适用于 4-6 Hz 的频率范围。 vector freq 的前 32 个元素如下所示:

freq = [0,00    0,28    0,56    0,83    1,11    1,39    1,67    1,94    2,22    2,50    2,78    3,06    3,33    3,61    3,89    4,17    4,44    4,72    5,00    5,28    5,56    5,83    6,11    6,39    6,67    6,94    7,22    7,50    7,78    8,06    8,33]

所以,我只能找到 4,17 Hz- 6,11 Hz 之间的区域。

您能否建议我,如何计算特定频率范围的频谱面积(如我上面提到的,例如 4-6 Hz)?

提前感谢您的帮助

【问题讨论】:

【参考方案1】:

我会按照以下方式进行:

idx = find(freq>=4 & freq<=6);

trapz(freq(idx),spectrum(idx))

如果我对您的问题的理解正确,那么上述内容应该会引导您得出您想要估计的结果。

编辑

由于您没有 freq=4Hzfreq=6Hz 的频谱值,我建议像这样插入值:

int_spec = exp(interp1(log(freq),log(spec),log(4:.1:6),'linear','extrap'))

然后调用

trapz(4:.1:6,int_spec)

【讨论】:

感谢您的回答,但我想知道的是如何计算 4-6 Hz 而不是 4,17 Hz-6,11 Hz 的频谱面积。我的问题是如何计算恰好在 4 到 6 Hz 之间的幅度,然后为此计算面积。 你可以尝试在感兴趣的范围内插入数据,然后像我上面那样调用trapz 不幸的是,它不是......当我试图在功率谱上标记计算区域时,它彼此相距甚远。我对傅里叶变换不是很熟悉,但是没有办法直接计算指定频率的功率吗? 你能改写最后一句话吗?没能理解你的意思,抱歉。要获得更好的解释,请考虑编辑您的问题。 我只对频率限制 4 和 6(不是所有范围 4:.1:6)进行功率插值,然后将其放入我的频率向量中,并将结果插入功率向量。现在,一切都按我的意愿进行。非常感谢您的帮助!

以上是关于计算特定频率范围的功率谱下面积的主要内容,如果未能解决你的问题,请参考以下文章

如何获得声音文件特定频率的功率?

高分!急!用matlab分析功率谱密度,采样频率的设定.高手进!

限制 scipy.signal.spectrogram 仅计算特定频率

Python - 删除范围之间的特定频率

如何由fft运算结果得出组成原始信号的各分量的频率及功率

信号频率估计经典功率谱估计及其MATLAB仿真