从脉冲响应计算混响时间 (RT60)

信息处理 冲动反应 语音处理 声学
2021-12-31 18:07:14

我对混响时间(RT60)有些困惑。我需要根据给定的功率包络计算混响时间。

这就是我得到的。正如您可能看到的那样,这条线弯曲到接近于零(在左上角),然后变成直线。t-intercept 是否等于 RT60,还是我需要在顶部延伸直线然后向左移动,以便从左上角得到一条直线,然后看到 t-intercept?任何帮助,将不胜感激。提前致谢!

在此处输入图像描述

2个回答

在 Hilmar 的鼓励下,我决定使用从头计算混响时间所需的所有步骤来更新答案。据推测,它对其他对该领域感兴趣的人会很有用。显然,这是最简单的方法,因为更高级的方法肯定超出了范围。

一开始,您必须获得一个房间的脉冲响应。它可以通过多种方式完成:

  • 发射发令枪弹出气球等 - 基本上记录任何具有广泛频率内容和全向特性的脉冲信号。这是获得脉冲响应的最简单方法。
  • 使用线性或指数扫描进行正弦扫描测量。这种方法是我最喜欢的,因为它允许您同时提取系统的许多不同参数。
  • MLS(Maximum Length Sequence)测量这种噪声并使用Hadamard变换获得脉冲响应。可以在这里找到与扫描正弦技术的一些比较。

在获得声学空间的脉冲响应$h(t)$后,您可以计算混响时间和其他语音相关参数,例如$C_{80}$$STI$$D_{50}$(清晰度,语音传输指数、定义)等。

第一步是在适当的频带中过滤您的脉冲响应。这是因为混响时间是房间位置和频率的函数。显然,我们假设声场是扩散的,并且在房间的每个位置衰减率是相同的。因此,我们仍然必须考虑对频带的依赖性。我们使用 1/1 倍频程或 1/3 倍频程滤波器。其所需参数由EN 61260标准定义,最好您总是希望使用 0 类滤波器。在大多数情况下,巴特沃斯三阶滤波器就足够了(尽管对于低于 125 Hz 的频率,您可能会遇到一些特性不满足的问题规格)。我自己完成了整个实现,只做了一些调整,但对于广泛使用的常用应用程序MATLAB 实现已经足够好了。

过滤$h(t)$并获得$h_f(t)$之后的下一步是在转换为对数刻度之前使响应尽可能平滑。为此,希尔伯特变换是一种广泛使用的工具。目标是创建分析信号:

$$h_A(t)=h(t)+j\波浪号{h}(t) $$

其中$\tilde{h}(t) $是过滤后的脉冲响应的 HT,$j$是一个复数单位。现在,知道您的分析信号很复杂,它的表示有两件事:

$$h_A(t)=A(t)e^{j \psi (t)} $$

其中$A(t)$是信号的包络,$\psi (t)$是瞬时相位。显然,我们主要对包络(分析信号的幅度)感兴趣。您可以在下面看到叠加的过滤响应及其包络:

在此处输入图像描述

说 MATLAB'ish 的人的一条线索。hilbert函数返回解析信号,因此无需乘以$j$并添加原始$h(t)$只是abs(hilbert(h))用来拿信封。

现在我们有了脉冲响应的平滑版本,但它必须进一步平滑。它是可选的,人们可能会认为它是不必要的。它基于适当长度的移动平均过滤器$M$每个人都知道移动平均滤波器,它基本上是一个低通 FIR 滤波器,其频率响应为:

$$H(f)=\frac{\sin (\pi f M)}{M\sin (\pi f)} $$

不同长度$M$的图如下所示:

在此处输入图像描述

在下图中,您可以观察到先前计算的能量曲线的平滑效果(对数刻度中的$A(t)$变为$E(t)$)对于两个不同的$M$值。对于$48\mathtt{kHz}$的采样频率,我使用了 $M=5001$

在此处输入图像描述

所以现在我们有了能量曲线(不是幂),它只是对数尺度的平滑希尔伯特包络。转换为分贝刻度由以下等式完成:

$$E(t) = 20\log_{10} \frac{A(t)}{\max A(t)} $$

曲线$A(t)$可以通过使用包络的施罗德积分法(也称为反时积分法)进一步平滑计算。这种方法为您提供了最平坦的衰减曲线,并且非常容易实现。

$$L(t)=10 \log_{10} \left[ \dfrac{\int_t^{\infty}h^2(\tau )d\tau}{\int_0^{\infty}h^2(\ tau )d\tau} \right] $$

再次为 MATLAB 人员:

L(td:-1:1)=10*log10(cumsum(hA(td:-1:1).^2)/sum(hA(1:td).^2));

请注意,积分极限 ( td) 等于$\infty$当我们没有任何环境噪音时,这是真的。否则,您会看到衰减的声音“潜入噪音水平”。如下图所示。红色曲线基于正确的限制,衰减穿过本底噪声。如果您选择积分限制太短,那么如绿色曲线所示,估计值不够长,因此在进行线性插值时会被低估。相反,橙色曲线的积分限制太大,您会被高估。你总是想找到正确的极限。如果您没有以这种方式获得曲线,那么请这样做。

在此处输入图像描述

在 Schroeder 积分中有许多不同的积分极限估计方法,我认为最容易实现的是Lundeby 等人提出的方法。

关于 RT 本身的计算。必须通过使用线性函数对衰减曲线(或者我应该说施罗德曲线)执行线性插值来完成:$L=A\cdot t+B$在正确的范围内(如下所述)。完成后,您可以根据方程式计算混响时间。你可以看到截点并不重要(本身),你关心你的线的梯度。

$$RT = \dfrac{-60}{A} $$

其中$A$是插值线的斜率系数(以 dB/s 为单位)。虽然你有这个,你还可以计算你的线性拟合(或 r 值)的相关系数,这告诉你拟合有多好。

最后 - 限制。您无法真正计算$T_{60}$具有$60 \mathtt{dB}$的动态范围 - 您总是需要更多(除非您真的知道自己在做什么)。因此,您在以下动态范围内对衰减曲线进行线性拟合,并且根据ISO 3382-2对结果进行外推:

  • $EDT$(早期衰减时间):上限为$0 \mathtt{dB}$,下限为$-10 \mathtt{dB}$该参数与感知的混响时间密切相关。在实践中,虽然一开始是为了算法,但人们使用的是$-1 \mathtt{dB}$$-10 \mathtt{dB}$的区间(即在 Norsonic 分析仪中)。

  • $T_{10}$:上限必须从$-5 \mathtt{dB}$开始以消除任何波动,然后将下限设为$-15 \mathtt{dB}$,但必须始终至少$10 \mathtt{dB}$高于本底噪声。所以实际上你至少需要$25 \mathtt{dB}$的动态范围(或 INR)才能计算$T_{10}$ ( $5+10+10$ )。

  • $T_{20}$:上限$-5 \mathtt{dB}$,下限$-25 \mathtt{dB}$所需的最小动态范围为$35\mathtt{dB}$

  • $T_{30}$:上限为$-5 \mathtt{dB}$,下限为$-35 \mathtt{dB}$,最小动态范围为 $45 \mathtt{dB}$

人们为什么要使用这些价值观?好吧,因为你很少有$75 \mathtt{dB}$的动态范围来估计$T_{60}$对于非常平滑的衰减,这些值应该相等。可以在本出版物中找到一些更详细的效果分析:

测量房间脉冲响应:衰减范围对衍生房间声学参数的影响

如果您不执行 Schroeder 积分,那么它们很可能会出现很大差异。对于非常讨厌的房间,你可以得到类似的东西:

在此处输入图像描述

理论上:$EDT$ = $T_{10}$ = $T_{20}$ = $T_{30}$虽然他们不一定会。例如,如果您的小房间与大房间相结合(让我们认为小教堂与小门口的大教堂相结合),那么曲线开始处较小的房间会出现非常急剧的衰减,而曲线的尾部会很长。结尾:

在此处输入图像描述

结束。根据标准,您应该始终$-5 \mathtt{dB}$$(-5-N) \ \mathtt{dB}$估算混响时间$T_{N} $ 。此外,请确保您至少比本底噪声高出$10 \mathtt{dB}$ 。如果不是,那么您必须使用另一个估计值。在您的情况下,我建议使用$T_{30}$

下面是一个麻烦的脉冲响应的$T_{20}$估计示例。$E(t)$是对脉冲响应希尔伯特包络取对数得到的能量衰减曲线。$L(t)$是施罗德积分。在这种情况下,线性拟合和$E(t)$在给定范围 ( $-5 \mathtt{dB}$ - $-25 \mathtt{dB}$ ) 之间的相关系数为:$cc=-0.9987$计算出的 RT 为$T_{20}=1.15 \mathtt{s}$

在此处输入图像描述

我认为应该这样做。如果有人会遵循这些步骤,那么他应该得到$0.1 \mathtt{s} $对广泛使用的Dirac的准确度。无论如何,必须记住,即使是不同的软件也往往会给出不同的结果(即 EASERA 和 Dirac),所以你应该完全没问题。对于在脉冲响应结束时带有伪影的更复杂的脉冲响应,可能会获得更差的性能,但无论如何,这样的测量是不可靠的,并且反映了错误地进行了实验。

很好的答案:我唯一要补充的是,混响时间通常严重依赖于频率。因此,定义和计算仅在给定频带内有意义,并且测量的脉冲响应应在处理之前进行带通滤波。这也使得衰减曲线看起来比宽带脉冲响应的曲线更直。