0

我编写了一些将音频信号(当前为正弦波)作为输入的代码,并执行以下操作:

  1. n取(1024) 个样本的帧
  2. 应用 FFT
  3. 应用 iFFT
  4. 播放输出

通过这个过程,输出信号与输入信号基本相同。

现在,在第二次尝试中,我做了:

  1. 从输入中获取重叠帧
  2. 应用窗口函数
  3. 快速傅里叶变换
  4. 快速傅里叶变换
  5. 重叠输出帧

在步骤 1 中,如果我使用 2 的幂(4、8、256...)的跳跃大小(跳到下一帧的样本数)来获取重叠帧,则输出声音很平滑并且类似于原始输入声音,但是对于任何其他的跃点大小,声音开始减弱。这发生在输入信号的任何频率上。问题 1. 为什么只有 hop size 为 2^n 时声音才流畅?.

目前我使用汉宁窗。当跳数较大(例如 512)时,输出声音的音量低于跳数较小(例如 64)时的音量。这似乎是一种预期行为,因为小跳数意味着用更多帧重构样本,因此添加了更多信号。问题 2. 有没有办法正确缩放输出信号,使音量类似于原始信号?

谢谢!

4

2 回答 2

2

这不应该发生,重叠添加方法可以重建您的信号而没有描述的问题,我们不知道您在做什么,我前一段时间做过,它适用于任何跳数和窗口大小,一个小秘密是适用的信号前后置零以确保信号连续,如果您冷静地观察,您会意识到您的窗口功能就像淡入/淡出一样,如果您只是连接帧,您会注意到一些点击或输出信号看起来像一个颤音,很难说出你的问题实际在哪里!

只是为了调试,跳过 FFT 和 iFFT 步骤,看看你的信号是否正确构造,如果是,你的重叠添加过程有效,你的问题可能出在你的 FFT/iFFT ...

于 2014-03-05T21:56:55.073 回答
1

重叠相加通常在不使用非矩形窗口函数的情况下完成。取而代之的是零填充。

如果您确实使用了窗口函数,那么您必须确保所有偏移窗口函数总和到一个恒定水平,对于 Von Hann 窗口,这发生在某些偏移量(除了在序列和的最开始或结束时)。作为

2 - (cos(x)+cos(x+Pi)) == 2

在没有任何缩放的情况下将更多的窗口求和成一个结果,当然求和的级别会增加。

于 2014-03-05T22:16:32.457 回答