频带中的能量分布

信息处理 matlab fft 声音的 频率 音乐
2022-02-23 18:07:52

在我的 wav 文件(音乐)上,我做了一个短时傅里叶变换 (STFT)。我有频谱,范围从我取出了之间的范围,我将其划分为频段。我的 STFT 每执行一次,因此我可以看到随时间的变化。0 Hzfs/211000 Hz350 ms

在这一点上,我不太确定,我是对还是错。获得一次频段的整体性能这意味着,我值,因为我有频带。50 ms350 ms3

我想我需要计算我的频段的 bin 来做到这一点。任何的想法?顺便说一句,我的代码在 MATLAB 中。


我懂了。在我的代码中,我做了一个完整的 stft,为此我定义了一个频率向量。它看起来像这样:

f=0:1:fftlen-1;
f=f/(fftlen-1)*fs;

fftlen 是4096, fs 是44100我已经这样写了,我取出0-1000Hz并将其划分为 3 个频段,例如

lowband=(1:200); 

然后为我的低频段定义一个频率向量,否则它不会起作用。(也许还有另一个更简单的解决方案......)它看起来像这样:

fL = 1:1:200;

我不确定我是否能看到这背后的联系,但fs/fftlen = 10.76660156 ...。这一定意味着第 19 个 bin大约是204.56...,这接近于我的低频段的预定义频率矢量(200Hz)我通过执行200/(44100/4096)得到这个值,即18.5759 ..通过四舍五入,第 19 个 bin。之后我将19 乘以 10.7666...,即204.56..

如果我是对的,那么我将简单地将所有值从第一个 bin 带到第 18 个 bin并对其进行算术平均。那么我的计算是否正确?

3个回答

要查找低于给定频率(在您的情况下为 200Hz)的向量元素的数量,您可以执行以下操作:

想象一下,“f”是你的频率向量,那么值低于 200Hz 的向量的最后一个位置可以计算为:

k = sum(f<200)

为了更好地解释:f<200 将为您提供一个具有 0 和 1 的向量。第一个元素将是 1,因为它们低于 200。如果将所有 1 相加,您将获得标记边界的向量的位置。

的频带的事实来找到与频带相对应的频带是您用于 stft 的 fft 点数。(fs/fftpt)
fftpt

因此,您可以找到与您的要求范围相对应的垃圾箱。

如果我是对的,那么我将简单地将所有值从第一个 bin 带到第 18 个 bin。并对其进行算术平均。那么我的计算是否正确?

要获得某个 RMS 的总体值,您需要再次计算 RMS: RMS1...n=1/n(RMS1²+RMS2²+...+RMSn²)

MATLAB:RMS_L = rms(frequencybins)

但是,如果不满足您所需的 200 Hz 频段,则会出现错误。为了清除这一点,我建议按照arpit jain 的回答中所述进行操作,并使您的垃圾箱适合您的乐队(或乐队的一小部分)。