我特别感兴趣的是找到一种方法来计算用于动态范围压缩的信封(即,自动“降低音量”音频信号的响亮部分。)
#1 楼
希尔伯特变换用于计算“解析”信号。参见例如http://en.wikipedia.org/wiki/Analytic_signal。如果您的信号是正弦波或调制正弦波,则分析信号的幅度确实看起来像包络。但是,希尔伯特变换的计算并非易事。从技术上讲,它需要相当长的非因果FIR滤波器,因此将需要相当数量的MIPS,内存和延迟。对于宽带信号,它实际上取决于您如何定义“包络”针对您的特定应用。对于动态范围压缩的应用,您需要一个与响度随时间变化的感知紧密相关的度量。希尔伯特变换不是正确的工具。
更好的选择是应用A加权滤波器(http://en.wikipedia.org/wiki/A-weighting),然后进行有损峰值或有损RMS检测器。随着时间的流逝,这将与感知到的响度很好地关联,并且相对便宜。
评论
$ \ begingroup $
两者都是非因果关系的,但是FFT方法(丢弃频谱和IFFT的一半)通常比FIR滤波器快吗?
$ \ endgroup $
– Endolith
11-10-17在16:31
$ \ begingroup $
另外,用于计算希尔伯特变换的FFT方法如何要求无因果关系?一个人可能只需要一个相当大的窗口即可获得有用的信封形状。
$ \ endgroup $
–mavavilj
17年8月1日在17:52
#2 楼
您可以按以下方式使用希尔伯特变换来计算包络。 (我将其编写为MATLAB代码):envelope = abs(hilbert(yourTimeDomainSignal));
我现在没有时间写数学,(我会稍后再试),但是非常简单地说,您的信号是正弦波。正弦的希尔伯特变换是-余弦。 (换句话说,希尔伯特变换将始终使您的信号移相-90度,即正交。)
如果将信号(正弦波)加到希尔伯特信号(余弦波)的
j
上,您将得到:>这也恰好是e ^(j *(wt-pi / 2))。
因此,当您取其绝对值时,您得到1,这是您的信封。 (对于这种情况)。
评论
$ \ begingroup $
糟糕!忘了负号-感谢Dilip,现在修复。
$ \ endgroup $
–太空
2011年10月15日,下午3:57
$ \ begingroup $
8年多以后,您还没有找到“写出数学公式的时间”吗? ;-)
$ \ endgroup $
–哈格
19/12/11在13:11
#3 楼
我知道至少有两种方法可以从信号中检索幅度包络。关键方程式是:
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)
在这种情况下,幅度被包围e只是| Analytic(f(t))|,它使我们回到了原来的毕达哥拉斯方程式。
NB:我最近遇到了一种涉及移频和低通数字滤波器的更先进的技术。从理论上讲,我们可以通过不同的方式来构建分析信号。我们将f(t)分解为正和负正弦频率分量,然后简单地去除负分量并使正分量加倍。并可以通过频移和低通滤波的组合来实现“负频率成分去除”。使用数字滤波器可以非常快速地完成此操作。我尚未探索这种方法,所以目前我可以说的这么多。
评论
$ \ begingroup $
这些都是计算同一事物的不同方法(通过希尔伯特变换来分析信号的幅度)。 “高级”技术是简单地执行FFT,将负频率清零,然后执行逆FFT。实部是原始信号,虚部是其希尔伯特变换。细节在于框架,开窗,重叠和线性与圆形处理之类的细节。
$ \ endgroup $
–希尔马
2012年4月17日在12:53
$ \ begingroup $
令人沮丧的是,看到有些人认为自己可以通过我的不愿投票来奖励我给这个社区的时间和精力(通过上面的帖子)。包含良好可靠信息的帖子将使某人受益。
$ \ endgroup $
– P i
2012年4月17日在19:24
$ \ begingroup $
@Hilmar,为了实现希尔伯特变换,有一种更好的“消除负频率”的方法。正如我所说,不涉及FFT的方法。鉴于上述情况,我现在并不特别热衷于详细说明它。
$ \ endgroup $
– P i
2012年4月17日19:31
$ \ begingroup $
感谢您对希尔伯特变换的详细回答;希望确保这一点很受欢迎,因此不要灰心。请忽略任何人的不赞成。
$ \ endgroup $
–user4285
13年4月5日在10:47
#4 楼
因此,您基本上是在寻找自动增益控制(AGC)。不知道您是否必须通过数字处理来做到这一点,但是那里有很好的集成电路可以很好地执行该任务,通常AGC集成了许多其他功能,但是可以用JFET晶体管创建一些电路和一些二极管。但是使用数字处理实现此目的的一种非常容易理解的方法是设计一种自适应方差估计器,例如采用足够的样本时间窗口来表示5或10毫秒,然后应用一个遗忘因子alpha ^ n(alpha <1),因此每个新样本比以前的样本更多地被考虑。
然后,根据这种方差估计,您可以根据自己的意愿设计此函数,该函数可映射方差
这可能是一个硬性决定的边界,而如果方差超过某个阈值,则您的增益会降低某些因数。
或者可以是更柔和的决策边界,您可以在其中创建非线性从方差到增益的变换,然后根据最后的方差估计将变换应用于每个样本。
评论
您现在有一些有效的代码吗?使用希尔伯特变换还是其他方法?