希尔伯特变换来计算信号包络?


27

我听说希尔伯特变换可用于计算信号的包络。这是如何运作的?与仅通过整流信号得到的“希尔伯特信封”有何不同?

我特别感兴趣的是寻找一种方法来计算用于动态范围压缩(即自动“降低音量”音频信号大声部分的音量)的包络线。


您现在有一些有效的代码吗?使用希尔伯特变换还是其他方法?
巴斯基(Basj)

Answers:


18

希尔伯特变换用于计算“解析”信号。参见例如http://en.wikipedia.org/wiki/Analytic_signal。如果您的信号是正弦波或已调制的正弦波,则分析信号的幅度确实看起来像包络。但是,希尔伯特变换的计算并非易事。从技术上讲,它需要相当长的非因果FIR滤波器,因此将需要相当数量的MIPS,内存和延迟。

对于宽带信号,实际上取决于您如何为特定应用定义“包络”。对于动态范围压缩的应用,您需要一个与响度随时间变化的感知紧密相关的指标。希尔伯特变换不是正确的工具。

更好的选择是应用A加权滤波器(http://en.wikipedia.org/wiki/A-weighting),然后进行有损峰值或有损RMS检测器。随着时间的流逝,这将与感知到的响度很好地关联,并且这样做相对便宜。


两者都是无因果关系的,但是FFT方法(丢弃频谱和IFFT的一半)通常比FIR滤波器快吗?
endlith 2011年

另外,用于计算希尔伯特变换的FFT方法如何要求无因果关系?一个人可能只需要一个相当大的窗口即可获得有用的信封形状。
mavavilj

4

您可以按以下方式使用希尔伯特变换来计算包络。(我将其编写为MATLAB代码):

envelope = abs(hilbert(yourTimeDomainSignal));

我现在没有时间写出数学公式(我将在以后再尝试),但是很简单,说您的信号是一个正弦波。正弦的希尔伯特变换是-余弦。(换句话说,希尔伯特变换将始终使您的信号移相-90度,即正交。)

如果将信号(正弦波)加到j希尔伯特信号(-余弦波)上,则得到:

sin(wt) - j.*cos(wt)

这也恰好是e ^(j *(wt-pi / 2))。

因此,当您取其绝对值时,您得到1,这是您的信封。(对于这种情况)。


糟糕!忘了负号-感谢Dilip,现在修复。
Spacey

2

我知道至少有两种方法可以从信号中检索幅度包络。

关键公式是:

E(t)^2 = S(t)^2 + Q(S(t))^2

Where Q represents a π/2 phase shift (also known as quadrature signal).

我知道的最简单的方法是获得Q,即使用FFT将S(t)分解为一堆正弦分量,将每个分量逆时针旋转四分之一圈(请记住,每个分量将是一个复数,因此特定分量x + iy-> -y + ix),然后重新组合。

尽管需要一些调整,但这种方法效果很好(我对数学的理解还不够好,无法以任何更好的方式进行解释)

这里有两个关键术语,即“希尔伯特变换”和“分析信号”

我避免使用这些术语,因为我敢肯定我已经目睹了它们在使用上的歧义。

一个文档将原始实信号f(t)的(复杂)分析信号描述为:

Analytic(f(t)) = f(t) + i.H(f(t))

where H(f(t)) represents the 'π/2 phase shift' of f(t)

在这种情况下,幅度包络只是| Analytic(f(t))|,这使我们回到了原始的勾股方程

注意:我最近遇到了一种更高级的技术,涉及移频和低通数字滤波器。从理论上讲,我们可以通过不同的方式构造分析信号。我们将f(t)分解为正和负正弦频率分量,然后简单地去除负分量并使正分量加倍。并且可以通过频移和低通滤波的组合来执行“负频率分量去除”。使用数字滤波器可以非常快速地完成此操作。我尚未探索这种方法,所以目前我可以说的很多。


1
这些都是计算同一事物的不同方法(通过希尔伯特变换来分析信号的幅度)。“高级”技术是简单地执行FFT,将负频率清零,然后执行逆FFT。实部是原始信号,虚部是其希尔伯特变换。细节在于框架,开窗,重叠和线性与圆形处理之类的细节。
希尔马

2
令人沮丧的是,看到有些人认为自己可以通过投反对票来奖励我给这个社区的时间和精力(通过上面的帖子)。包含良好可靠信息的帖子将使某人受益。

2
@Hilmar,为了实现希尔伯特变换,有一种更好的“去除负频率”的方法。就像我说的,不涉及FFT的方法。鉴于上述情况,我现在并不特别热衷于详细说明它。

感谢您对希尔伯特变换的详细回答;希望确保这一点很受欢迎,因此不要灰心。请忽略任何人的不赞成。

0

因此,您基本上是在寻找自动增益控制(AGC)。不确定是否必须通过数字处理来做到这一点,但是那里有很好的集成电路可以很好地执行该任务,通常AGC集成了许多其他功能,但是可以用JFET晶体管创建一些电路和一些二极管。

但是,使用数字处理实现此目的的一种非常容易理解的方法是设计一种自适应方差估计器,例如采用足够多的样本的时间窗来表示5或10毫秒,并应用遗忘因子alpha ^ n(alpha <1),因此与过去的样本相比,对每个新样本的考虑都更多。然后根据此差异估计,根据您的需求进行设计,该函数会将差异映射到您应用于每个音频样本的增益。这可能是一个硬性决定的边界,而如果方差超过某个阈值,则会使增益降低某种程度。

或者可能是更软决策的边界,您可以在其中创建从方差到增益的非线性变换,然后根据最后的方差估计将变换应用于每个样本。

这是更多的启发式方法,但至少它使您摆脱了繁重的数学工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.