纯正弦波的 DFT

信息处理 傅里叶变换 声音的 自由度 数学 海浪
2022-02-05 07:58:08

我正在编写一个程序,您可以在其中通过添加到声音的傅立叶变换来合成波,然后对变换进行逆变换以获得修改后的声音。为了做到这一点,我需要知道在 DFT 中添加什么来合成纯波。我试图从许多来源了解傅里叶合成,但他们都在谈论傅里叶级数而不是傅里叶变换,他们都说对于纯波,你所需要的只是该波频率系数中的一个值,和 0 其他地方。但是傅里叶变换是一个连续函数。您可以在这里看到纯 12KHz 正弦波的傅里叶变换是什么样子(在对数刻度上)。如您所见,它不仅仅是一个瞬时峰值,其他任何地方都为 0。

所以我试着自己做数学。正式地说,假设我们有一个采样信号St=Acos(2πkNt+ϕ), 在哪里 ,N是我们信号中的样本数,0t<N,A是一个幅度 0k<N2确定波的频率,并且ϕ是波的相位。该信号的 DFT 将是一个序列F0,...,FN1在哪里:

Fr=t=0N1Ste2πitrN

我的希望是,由于我们的信号是纯波,所以会有一个直接的计算公式Fr这可以比直接进行上面的数学计算快得多,并且该公式将是我链接的图像中那个尖峰的形状,因为这是我真正感兴趣的。为了简单起见,我假设ϕ=0,因为一旦我弄清楚如何解决这种情况,我可能就能概括它。我不会让你厌烦所有的数学,因为它并不重要,你可能已经知道答案了。我最后得到的是Fk=FNk=NA2, 对于所有其他0r<N,Fr=0.

令人震惊。所以最后我发现它确实等于 0 除了波的频率。但是我不明白我链接的图表中的尖峰形状来自哪里。不过,我仍然在追求它,因为仅添加一个与我感兴趣的频率相对应的样本对我不起作用(我已经尝试过)。

所以我想我的问题是:为什么绘制纯波的傅里叶变换实际上不会在所有样本中产生零,除了对应于该波频率的样本,以及你看到的那个尖峰的公式是什么。

2个回答

首先,欢迎来到 DSP SE。

您在链接的图像中看到的称为(光谱)泄漏当您处理傅立叶级数时,您会处理一个周期性连续函数,该函数被“分解”为(可能)无限和(级数)。然后,当您进行傅立叶变换时,您有一个非周期性函数(例如,如果它在 x 轴上开始和结束,您可能会假定它在某个间隔内是周期性的),它被分解为无限光谱分量的总和(光谱上每个点都有能量)。

在继续之前,请注意这是一个关于傅立叶级数和傅立叶变换的非常简短的解释,省略了很多细节,并且这里的数学解释更方便,而不是绝对正确。有关该主题的更多信息,我强烈建议工程师和科学家的教科书数学方法 3 - 傅立叶分析,偏微分方程和变分方法由 Kwong-Tin Tang 博士(本书的第一部分与此处相关)。

现在,如果您从连续域转到离散域(我们将在这里处理自由变量的离散化,即时间而不是幅度,就像您处理数字信号时的实际情况一样),您将从傅立叶变换离散傅里叶变换 (DFT)。再次省略“技术”细节,在 DFT 中,当信号包含的频率(频谱)分量在要分析的信号持续时间内不构成整数个完整周期时,最终会出现称为泄漏的现象(见上面的链接)。这是由于变换的“性质”,其中假设信号是周期性的。因此,当您的频谱分量在信号持续时间内未完成整数个周期时,您最终会在信号的结尾或开头得到一个非零的幅度(对于这个组件)。如果您尝试在原始信号之前和之后“复制和粘贴”信号(为了使其周期性以进行转换),您将意识到您最终会在原始信号和“复制粘贴”信号开始。为了重建这种不连续性,您必须引入无限量的频谱分量,这些频谱分量显示为主要频谱分量周围频率的能量(在这种情况下,您只有“纯”(余)正弦波)。您可以在下图中看到单个频率的示例。原始信号之前和之后的信号(为了使其具有周期性以进行变换),您会意识到在原始信号和“复制粘贴”信号开始的点处会出现一些不连续性。为了重建这种不连续性,您必须引入无限量的频谱分量,这些频谱分量显示为主要频谱分量周围频率的能量(在这种情况下,您只有“纯”(余)正弦波)。您可以在下图中看到单个频率的示例。原始信号之前和之后的信号(为了使其具有周期性以进行变换),您会意识到在原始信号和“复制粘贴”信号开始的点处会出现一些不连续性。为了重建这种不连续性,您必须引入无限量的频谱分量,这些频谱分量显示为主要频谱分量周围频率的能量(在这种情况下,您只有“纯”(余)正弦波)。您可以在下图中看到单个频率的示例。您必须引入无限量的频谱分量,这些频谱分量显示为主要频谱分量周围频率的能量(在这种情况下,您只有“纯”(余)正弦波)。您可以在下图中看到单个频率的示例。您必须引入无限量的频谱分量,这些频谱分量显示为主要频谱分量周围频率的能量(在这种情况下,您只有“纯”(余)正弦波)。您可以在下图中看到单个频率的示例。

在此处输入图像描述

现在,在处理 DFT 时,您很可能会经常遇到的另一个概念(如果不是总是!)是术语window在简单的情况下,您没有对信号应用窗口函数(请多解释一点)就像应用一个“矩形”窗口,在其中将信号的所有值乘以一个,因此,实际上什么都不做给他们。

如果将窗口函数应用于信号,则可以有效地抑制信号边缘处的信号,以避免出现不连续性,例如上图右侧第二个图中可见的不连续性。因此,您以某种方式抑制了泄漏效应。请记住,应用窗口函数的最简单方法是将信号样本与时域中的窗口函数逐元素相乘。

应用汉恩窗后,上图右侧的信号如下图所示

在此处输入图像描述

对于加窗前后的频谱“更清晰”的表示,您可以看到此图像

在此处输入图像描述

您可以看到峰值的局部化不是很好,但泄漏已被限制在比以前更小的“邻域”。有关窗口和窗口函数的更多信息,您可以查看 Wikipedia 页面(上面“窗口”一词的链接)和任何基本的数字信号处理教科书,例如Proakis 和 Manolakis的数字信号处理原理算法和应用Orfanidis的 Signal Processing 简介(免费分发)。

纯单频正弦曲线的持续时间是无限的。一旦你把它剪短以适应 DFT(和真实的宇宙),有限长度切割会为无限长度正弦曲线的完美频谱添加窗口伪影。

对于零噪声的纯正弦曲线,您只需要 3 或 4 个非混叠点即可求解 ia 纯正弦波指定方程中的 3 个未知数。添加噪声,现在您需要所有点来估计噪声中隐藏的内容。