我正在寻找使用 FFT 生成 1/3 倍频程频带的频谱。在阅读了本网站以及其他网站上的许多帖子后,我相信下面列出了适当的方法。我已经在 Excel 中进行了计算,结果看起来很合理,但合理不一定正确。
要问一个具体问题,我使用的方法是否有效?特别是,我质疑步骤 2 中应用的方法是否正确。
背景。 我正在对前置放大器输出的电信号进行采样,我的目标是以 dB 为单位的频谱。我的参考(dB 计算中的分母)是任意的,并选择为频谱输出显示设置适当的比例。我没有尝试从输出中进行测量,也不需要根据客观参考对其进行校准。我的项目将用 C++ 实现。
步骤 1. 从 48,000 Hz 的 1024 个样本 FFT(每个 46.9 Hz 的 513 个 bin)开始。结果是 N = 0 – 512 的 DFT,F n 。单位为V。
请注意,通常情况下,我会通过将每个 bin 乘以 2/N 来标准化 FFT 输出(N 是样本数,即 1024)。然而,因为我们最终以 dB 为单位绘制相对于任意幅度的频谱,所以当我以 dB 为单位计算结果时,我在这里所做的任何归一化都会被冲走,所以我不会在我的项目中打扰它。
步骤 2. 将 DFT 转换为 1/3 倍频程。
我从这里获得了以下公式: https ://www.ap.com/technical-library/deriving-fractional-octave-spectra-from-the-fft-with-apx/
每个 1/3 倍频程频带的 V 幅度为:
其中L b是 V 中每个 1/3 倍频程频带的幅度,b = 1 到 32,g n,b是 FFT bin n 和 1/3 倍频程频带b的增益乘数:
其中f n是 bin n的频率,f b是频带b的中心频率。k是倍频程带宽指示符,1 表示全倍频程,3 表示 1/3 倍频程。
结果是L b,b = 1 到 32 in V。
步骤 3. 忽略较低的频段。
在大约 250 Hz 以下,对于长度为 1024 的 FFT,每个频带内没有足够的 FFT bin 来使结果有意义。因此,我们忽略较低的频段,只保留从 b13 = 251 Hz 开始的 1/3 倍频程频段。
步骤 4. 将每个频段的幅度数据转换为 dB。
对于此计算,我正在计算相对于可能出现在任何频带中的近似最大幅度的 dB 值。这将是L ref。
250 Hz 以上每 1/3 倍频程频带的最终 dB 值为:
下面是单个g n,b项的示例(左侧下方为 FFT 箱,顶部为 1/3 倍频程):
协助、输入、更正和评论表示赞赏。谢谢!