【问题标题】:Overlap add for signal synthesis用于信号合成的重叠添加
【发布时间】:2014-03-02 00:01:23
【问题描述】:

如果这个问题非常基本,我深表歉意。

我正在使用 FFT 将音频信号(目前是纯正弦波)从时域转换到频域,然后返回时域以比较与原始信号的差异。

目前我这样做:
- 采用不重叠的帧(例如每帧 1024 个样本)。
- FFT 该帧
- iFFT 频域信息
- 将输出发送到扬声器

编辑(1):
这似乎现在可以工作(参见没有和有窗口的图像,其中输入=棕色,输出=蓝色)。


结束编辑 (1)

现在我想执行overlapp-add方法:
- 拍摄重叠率为 50% 的帧(样本 0-1023、512-1535、1024-2047...)
- 将汉宁窗应用于 ecah 框架
- FFT
- iFFT
- ???这是我的问题!!

所以在我的 iFFT 结束时,我有一个 1024 个样本的输出帧。这是否意味着我需要将前 512 个样本发送到扬声器,而其他 512 个样本(512-1023)应该保存在缓冲区中,以便添加到下一帧的前 512 个样本中?就这么简单还是我误会了什么?

谢谢!

【问题讨论】:

  • 为什么你会期望输出是原始正弦波的低质量副本(除了你没有加窗的事实)?
  • @jaket 我附上了一张图片。输入听起来是连续的,而输出听起来像短脉冲。据我所知,由于频谱泄漏,输出不同,输入频率与任何 FFT 频率箱都不完全匹配。
  • 您的代码中有错误。未修改的复数 FFT 结果的 IFFT 应返回准确的原始数据(减去微小的数字舍入问题)。所以在某个地方你正在破坏你的数据。例如:丢弃相位信息会极大地扭曲您的结果。
  • 至于最后一个问题:是的,将后半部分保留在缓冲区中,并添加到下一帧的前半部分。可以肯定的是,检查连续帧的窗口函数在重叠区域中加到 1。
  • @hotpaw2 你对这个错误的看法是对的,正如你所看到的,我更正了它。欢迎发表您的建议作为答案,这样我至少可以投票。

标签: signal-processing fft ifft vdsp


【解决方案1】:

通常,当您进行重叠相加时,您会在 FFT 之前对数据进行零填充,并保存剩余的尾部以供稍后添加到处理的下一帧的结果中。

您最初的“质量差”问题可能是由于某些错误导致您没有保留 FFT 和 IFFT 之间的确切相位信息(完整的复杂 FFT 结果)。无论您是否进行重叠添加或重叠保存快速卷积或其他处理,您都必须解决此问题。

【讨论】:

  • 您(和其他用户)对这个错误的看法是正确的。谢谢!零填充我不明白,如果我取 1024 个样本,有什么要填充的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 2018-07-08
  • 2020-02-02
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
相关资源
最近更新 更多