在我看到的大多数示例和FFT代码中,前向DFT操作的输出(频率幅度)按N进行缩放-即,不是给您每个频率仓的幅度,而是给您N倍的幅度。 br />
操作上,这仅仅是因为DFT是通过将信号的内积与每个基本正弦值(即未归一化的相关性)相乘来计算的。但是,这不能回答这样一个哲学问题:为什么我们不返回输出之前就将其除以N?相反,大多数算法在重新合成时都除以N。

这对我来说似乎是违反直觉的,并且(除非我丢失了某些东西)这使DFT的所有解释都非常混乱。不是幅度* N)是我从DFT操作中需要的值,而归一化的幅度是我要输入到IDFT操作中的值。 N,而IDFT定义为归一化正弦波的简单总和?

评论

老实说,我认为这是有史以来最酷的问题之一。

#1 楼

无论您缩放DFT的输出(正向还是反向),都与约定无关或在数学上很方便。它与DFT的输入有关。请允许我显示一些示例,其中正向和逆向变换都需要或不需要缩放。

必须将正向变换比例缩放1 / N。

首先,应该清楚的是,要分析简单的正弦波,变换的长度应为从数学上讲无关紧要。假设N = 1024,Freq = 100且您的信号是:

f(n)= cos(频率* 2 * Pi * n / N)

f(n)的1024点DFT,您会发现bin [100] =512。但这不是有意义的值,除非您将其缩放N。512/1024 = 1/2,当然,其他1 / 2在bin [924]中处于负光谱中。

如果将DFT的长度加倍,即N = 2048,则输出值将是1024点DFT的两倍,这将再次使结果变得毫无意义,除非我们按1 / N进行缩放。 DFT的长度不应成为此类分析的因素。因此,在此示例中,您必须将DFT缩放1 / N。

不要缩放正向变换。

现在假设您具有32抽头的脉冲响应FIR滤波器并想知道其频率响应。为方便起见,我们假设一个增益为1的低通滤波器。我们知道,对于该滤波器,DFT的DC分量必须为1。 DFT,因为DC分量仅仅是输入值的总和(即FIR系数的总和)。

因此,对于此输入,DFT不会按1 / N缩放以获得有意义的答案。这就是为什么您可以在不影响转换结果的情况下将脉冲响应尽可能零填充的原因。
这两个示例之间的根本区别是什么?

答案很简单。在第一种情况下,我们为每个输入样本提供能量。换句话说,所有1024个样本都存在正弦波,因此我们需要将DFT的输出缩放1/1024。

在第二个示例中,根据定义,我们仅为1个样本提供能量(n = 0时的脉冲)。脉冲需要32个采样才能通过32个抽头滤波器工作,但这种延迟是无关紧要的。由于我们为1个样本提供了能量,因此我们将DFT的输出缩放1。如果将脉冲定义为2个能量单位而不是1,则将输出缩放1/2。缩放逆变换。

现在让我们考虑逆DFT。与前向DFT一样,我们必须考虑向其提供能量的样本数量。当然,我们在这里必须更加小心,因为我们必须适当地填充正向和负向频率仓。但是,如果我们将脉冲(即1)放置在两个适当的仓中,那么无论我们在逆DFT中使用多少点,逆DFT的最终输出将是振幅为2的余弦波。

因此,与正向DFT一样,如果输入是脉冲,我们就不缩放逆DFT的输出。

必须缩放逆变换。

现在考虑一下您知道低通滤波器的频率响应并想要进行逆DFT以获得其脉冲响应的情况。在这种情况下,由于我们一直在提供能量,因此必须将DFT的输出缩放1 / N,以获得有意义的答案。这并不是很明显,因为输入值会很复杂,但是如果您通过一个示例进行操作,将会发现这是正确的。如果您不按1 / N进行缩放,则峰值脉冲响应值将达到N的数量级,而增益为1则不可能。

我刚才详述的四种情况是端点示例,在这些示例中,很清楚如何缩放DFT的输出。但是,端点之间有很多灰色区域。因此,让我们考虑另一个简单的示例。

假设我们有以下信号,其中N = 1024,Freq = 100: br />
注意这三个分量的幅度,频率和持续时间差异。不幸的是,即使第二个分量的功率是其他两个分量的1/36,此信号的DFT也会显示所有三个分量处于相同的功率水平。


/>很明显,所有三个组件都提供相同量的能量,这可以解释DFT的结果,但是这里需要指出一个重要点。各种频率分量,然后我们可以相应地缩放各个频率仓。在这种情况下,我们将执行此操作以准确缩放DFT的输出:
bin [100] / = 128; bin [200] / = 768; bin [400] / = 128;

这把我带到了最后一点;通常,我们不知道特定频率分量在DFT的输入端存在多长时间,因此我们无法进行这种缩放。但是,总的来说,我们确实为每个采样点供电,这就是为什么在分析信号时应将正向DFT缩放1 / N。

要使事情复杂化,我们几乎可以肯定地将一个窗口应用于此信号以提高DFT的光谱分辨率。由于第一和第三频率分量分别位于信号的开始和结尾,因此它们被衰减27 dB,而中心分量仅被衰减4 dB(Hanning窗口)。

>
要清楚,DFT的输出可能是输入的相当差的表示,无论缩放与否。

对于逆DFT(通常是纯粹的数学问题),与未知信号的分析相反,DFT的输入已明确定义,因此您知道如何缩放输出。

使用频谱分析仪,模拟或FFT分析信号时,问题相似。您不知道显示信号的功率,除非您也知道其占空比。但是即使那样,开窗,跨度,扫描速率,滤波,检测器类型和其他因素也会影响结果。频域。您提出的有关缩放的问题很重要,因此希望我已明确表示您必须了解DFT的输入才能知道如何缩放输出。如果没有明确定义输入,则无论是否扩展DFT的输出,都必须对其表示怀疑。

评论


$ \ begingroup $
我选择此答案的原因是全面性和大量详细信息,但也可以查看Phonon的出色答案以获取直观的概述。
$ \ endgroup $
– bryhoyt
13年15月15日下午2:35



#2 楼

我可以想到一些涉及计算精度问题的原因,但是这可能无法解决问题,因为在数学上我们无论如何都用相同的方式定义它,而数学也不知道精度问题。

在上面。让我们从概念上考虑DFT在信号处理意义上的意义,而不仅仅是纯粹的变换。在这种情况下,在我看来,将DFT应用于信号和系统使我们希望看到不同的结果。例如,让我们将DFT应用于值为1的恒定信号。还假设该信号的长度是有限的,并且是16个抽头。在这种情况下,我们需要DFT提供什么?显然,我们希望它告诉我们信号的每个频率分量具有什么幅度。显然,我们的信号具有频率0和幅度1的单个分量。但是DFT在bin 0和高度16处给了我们一个峰值!在这种情况下,您对DFT的定义感到沮丧是很合理的。我们应该缩放分析系数,而不是合成系数。

好吧,现在让我们分析相同的数字数组,即我们的16个字符串,但在这种情况下,作为一个系统。从概念上讲,我们希望系统的频率响应是什么意思?大多数人会说这是输出幅度与输入幅度的乘积,即传递函数。在这种情况下,假设我们将单位幅度的DC信号馈入系统,并查看稳态响应的幅度。好吧,将两个恒定的16抽头信号卷积在一起,您会得到一个瞬态斜坡,其后是一个稳态输出,该输出是一个振幅为DC的DC信号(检出!)16!在这种情况下,我们对非标度分析变换的定义比其他情况更有意义。

归根结底,这一切都与您要表示的内容有关。考虑这种以系统为中心的DFT定义的原因很多。

但是,如果我们仅从数学角度看变换,则这两个都不是最有意义的,因为我们可以通过将分析和综合变换按$ \ frac {1} {\ sqrt { (N)}} $。这还将保留时间和频率表示的功效,以使Parseval定理始终成立。

评论


$ \ begingroup $
好答案,谢谢!我选择了user5108_Dan的答案来考虑全面性,但是您的答案肯定有助于提供最佳的直觉。
$ \ endgroup $
– bryhoyt
13年15月15日在2:34

$ \ begingroup $
您的意思是什么?这还将保留时间和频率表示的力量?如果归一化,则频率幅度的新值将为4。我对最后一点不太了解。
$ \ endgroup $
–爱德华多·里斯(Eduardo Reis)
20年6月4日在19:46

#3 楼

实际上,在各种不同的FFT / IFFT实现中,共有三种不同的放置比例因子的方式:1.0正向和1.0 / N向后,1.0 / N正向和1.0向后以及1.0 / sqrt(N)向前和向后。

这3个缩放比例变化都允许将IFFT(FFT(x))往返行程使用通用的未缩放的sin()和cos()三角函数作为旋转因子,以进行身份​​转换。 />
请注意,在正向FFT上保留正弦幅度不会保留总能量(就像在Parseval定理中一样)。选择您喜欢的一个。