音频分析合成中的重叠添加
Posted
技术标签:
【中文标题】音频分析合成中的重叠添加【英文标题】:Overlap add in audio analysis-synthesis 【发布时间】:2014-03-05 19:22:07 【问题描述】:我编写了一些将音频信号(当前为正弦波)作为输入的代码,并执行以下操作:
-
获取
n
(1024) 个样本的帧
应用 FFT
应用 iFFT
播放输出
通过这个过程,输出信号与输入信号基本相同。
现在,我第二次尝试:
-
从输入中获取重叠帧
应用窗口函数
FFT
iFFT
重叠输出帧
在第 1 步中,如果我使用 2 的幂(4、8、256...)的跳跃大小(跳到下一帧的样本数)来获取重叠帧,则输出声音很平滑,类似于原始输入声音,但使用任何其他跳跃大小,声音开始崩溃。这发生在输入信号的任何频率上。 问题1.为什么只有跳数为2^n时声音才流畅?。
目前我使用的是汉宁窗。当跳数较大(例如 512)时,输出声音的音量低于跳数较小(例如 64)时的音量。这似乎是一种预期行为,因为小跳数意味着用更多帧重构样本,因此添加了更多信号。 问题 2。有没有办法正确缩放输出信号,使音量与原始信号相似?
谢谢!
【问题讨论】:
【参考方案1】:这不应该发生,重叠添加方法可以重建您的信号而没有描述的问题,我们不知道您在做什么,我前段时间做过,它适用于任何跳数和窗口大小,小秘密是在您的信号前后应用零以确保信号连续,如果您冷静地观察,您会发现您的 窗口功能 的工作方式类似于淡入/淡出,如果您只是连接帧,您将请注意一些咔嗒声或输出信号看起来像颤音,这有点难以判断您的问题实际出在哪里!
仅用于调试,跳过 FFT 和 iFFT 步骤,看看您的信号是否正确构造,如果是,您的重叠添加过程有效,您的问题可能出在您的 FFT/iFFT ...
【讨论】:
你是对的。我正在跳过窗口功能(因此缺少淡入淡出效果)。【参考方案2】:重叠相加通常不使用非矩形窗口函数。取而代之的是零填充。
如果您确实使用了窗口函数,那么您必须确保所有偏移窗口函数的总和达到一个恒定水平,对于 Von Hann 窗口而言,这会发生某些偏移(除了在系列的开头或结尾和)。作为
2 - (cos(x)+cos(x+Pi)) == 2
在没有任何缩放的情况下将更多窗口相加成一个结果,当然总和的级别会增加。
【讨论】:
以上是关于音频分析合成中的重叠添加的主要内容,如果未能解决你的问题,请参考以下文章