卷积两个信号

信息处理 卷积
2022-02-05 01:01:32

我看到一个视频,这个人使用程序对语音信号和锯齿波进行频率分析(我假设这是 FFT)。然后他将这些图保存为图像,并使用 Photoshop 通过乘法将它们逐个像素地组合在一起。然后他把这张图片放回程序中,它做了逆变换,把它变成了声音。他说这是一个声码器的实现,但质量低让我很难判断他是否正确。

如果是这样,那么不能简单地将声码器实现为卷积操作吗?您只需拥有两个信号,然后在相同位置从每个相同宽度的窗口中选择一个窗口,然后在这两个窗口上执行卷积操作(并且可能也使用窗口函数,例如 Hanning)。当然,您必须对每个样本都执行此操作,因此您将执行此操作的次数与轨道中的样本一样多(并且窗口有时会部分位于轨道之外,因此它们必须为零填充)。

这似乎可行,因为卷积定理说时域中的卷积是频域中的逐项乘法,所以如果它没有实现声码器,它至少可以准确地实现视频中的人正在做的事情(更高质量)。而且,我不只是盲目地问这个问题,我真的试过了。我得到了一个非常酷的声音效果,但我不确定它是否与声码器相同。事实上,它听起来一点也不像声码器。如果有好心人能准确地告诉我这里发生了什么,我将不胜感激。

1个回答

根据您的描述,视频中发生的情况如下:

  • 计算信号的短期傅里叶变换(又名频谱图)。该操作的输出是一个复数值矩阵,不能表示为图像。因此,提取幅度或幅度的平方以产生转换为像素强度的单个正实值。
  • 幅值(像素强度)相乘。
  • 乘积的短期傅里叶逆变换是合成的,可能是合成相位(或载波的原始相位)。

这与卷积无关的原因有很多。我相信其他成员会指出更多:

  • 相乘的是大小或其平方;但不是傅里叶分析产生的实际复数值。
  • 即使相乘的量是实际的复数值,请记住,在处理有限长度的离散信号时,离散傅里叶变换乘积的离散傅里叶逆变换是循环卷积,而不是卷积。
  • 仍然......如果你拆分两个信号xy分成长度为 N 的块,并计算这些块的长度为 N 的成对循环卷积,你会得到与xy.

卷积两个音频信号是一个相当无意义的操作。通常将音频信号与系统的脉冲响应进行卷积;当在频域中执行卷积时,细节比 FFT 的成对乘法更棘手(存在一些阻塞问题;+ 必要的重叠添加或保存)。

您所看到的将更准确地描述为光谱交叉合成。这是一个与声码器截然不同的野兽,有一个主要原因。声码器的目标是应用频谱包络调制器到载体上。我强调频谱包络,因为当你使用声码器让一堆锯齿波说“你好”时,你会将原始语音信号的共振峰和整体响度包络应用于锯齿波,但你最不想要的是参与的语音信号的音高信息。声码器的分析滤波器组应设计为提取模块化信号中的各个频谱峰值 - 重要的是粗略的频谱包络 - 凸起(共振峰)的位置。这就是为什么声码器不需要超过 12-30 个通道的原因 - 通道太少,它不会捕获共振峰,通道太多,它开始捕获与音高相关的精细频谱峰值。就像语音识别中使用的功能一样......

让我给你举个例子。假设您有一个 200 Hz f0 的调制器语音信号;以及 1kHz 和 1.5kHz 的共振峰 - 它的频谱是 200Hz、400Hz、600Hz、800Hz、1000Hz、1200Hz、1400Hz、1600Hz、1800Hz 处的一系列窄峰;1000 Hz 和 1400 / 1600 Hz 的峰值被强调(共振峰)。假设您的载波信号是 140 Hz 锯齿波 - 频谱由 140 Hz、280 Hz、420 ​​Hz 的窄峰组成......1/n振幅。如果您使用您在问题中描述的内容(STFT 的产品),您将不会剩下太多,因为这两个光谱几乎没有重叠 - 序列中的第一个公共频率将是 1400 Hz!您想要做的是以某种方式捕获调制器频谱在 1kHz 和 1.5kHz 处有一个凸起,并使用此信息来提升该频率区域中的载波频谱。这就是声码器的工作原理。

为此,如果你真的想走 STFT 路线,一个选择是在进行乘法之前用相当宽的内核平滑调制器频谱 - 这样你真正要做的就是将一个信号的频谱包络应用到另一个。这类似于在 Photoshop 中使用这种愚蠢的图像处理演示在 Y 轴上应用运动模糊......