理解离散傅立叶变换(四)
------复数形式离散傅立叶变换
复数形式的离散傅立叶变换非常巧妙地运用了复数的方法,使得傅立叶变换变换更加自然和简洁,它并不是只是简单地运用替换的方法来运用复数,而是完全从复数的角度来分析问题,这一点跟实数
DFT
是完全不一样的。
一、
把正余弦函数表示成复数的形式
通过欧拉等式可以把正余弦函数表示成复数的形式:
cos( x ) = 1/2 e j(-x) + 1/2 ejx
sin( x ) = j (1/2 e j(-x) - 1/2 ejx)
从这个等式可以看出,如果把正余弦函数表示成复数后,它们变成了由正负频率组成的正余弦波,相反地,一个由正负频率组成的正余弦波,可以通过复数的形式来表示。
我们知道,在实数傅立叶变换中,它的频谱是
0 ~
π(
0 ~ N/2)
,但无法表示-π
~ 0
的频谱,可以预见,如果把正余弦表示成复数形式,则能够把负频率包含进来。
二、
把变换前后的变量都看成复数的形式
复数形式傅立叶变换把原始信号
x[n]
当成是一个用复数来表示的信号,其中实数部分表示原始信号值,虚数部分为
0
,变换结果
X[k]
也是个复数的形式,但这里的虚数部分是有值的。在这里要用复数的观点来看原始信号,是理解复数形式傅立叶变换的关键(如果有学过复变函数则可能更好理解,即把
x[n]
看成是一个复数变量,然后象对待实数那样对这个复数变量进行相同的变换)。
三、
对复数进行相关性算法(正向傅立叶变换)
从实数傅立叶变换中可以知道,我们可以通过原始信号乘以一个正交函数形式的信号,然后进行求总和,最后就能得到这个原始信号所包含的正交函数信号的分量。现在我们的原始信号变成了复数,我们要得到的当然是复数的信号分量,我们是不是可以把它乘以一个复数形式的正交函数呢?答案是肯定的,正余弦函数都是正交函数,变成如下形式的复数后,仍旧还是正交函数(这个从正交函数的定义可以很容易得到证明):
cos x + j sin x, cos x – j sin x
,
……
这里我们采用上面的第二个式子进行相关性求和,为什么用第二个式子呢?,我们在后面会知道,正弦函数在虚数中变换后得到的是负的正弦函数,这里我们再加上一个负号,使得最后的得到的是正的正弦波,根据这个于是我们很容易就可以得到了复数形式的
DFT
正向变换等式:
这个式子很容易可以得到欧拉变换式子:
其实我们是为了表达上的方便才用到欧拉变换式,在解决问题时我们还是较多地用到正余弦表达式。
对于上面的等式,我们要清楚如下几个方面(也是区别于实数
DFT
的地方):
1、
X[k]
、
x[n]
都是复数,但
x[n]
的虚数部分都是由
0
组成的,实数部分表示原始信号;
2、
k
的取值范围是
0 ~ N-1 (
也可以表达成
0 ~ 2
π)
,其中
0 ~ N/2
(或
0 ~
π)
是正频部分,
N/2 ~ N-1
(
π
~ 2
π)
是负频部分,由于正余弦函数的对称性,所以我们把
–
π
~ 0
表示成
π
~ 2
π,这是出于计算上方便的考虑。
3、
其中的j是一个不可分离的组成部分,就象一个等式中的变量一样,不能随便去掉,去掉之后意义就完全不一样了,但我们知道在实数DFT中,j只是个符号而已,把j去掉,整个等式的意义不变;
4、
下图是个连续信号的频谱,但离散频谱也是与此类似的,所以不影响我们对问题的分析:
上面的频谱图把负频率放到了左边,是为了迎合我们的思维习惯,但在实际实现中我们一般是把它移到正的频谱后面的。
从上图可以看出,时域中的正余弦波(用来组成原始信号的正余弦波)在复数DFT的频谱中被分成了正、负频率的两个组成部分,基于此等式中前面的比例系数是1/N(或1/
2
π),而不是2/N,这是因为现在把频谱延伸到了
2
π,但把正负两个频率相加即又得到了2/N,又还原到了实数DFT的形式,这个在后面的描述中可以更清楚地看到。由于复数DFT生成的是一个完整的频谱,原始信号中的每一个点都是由正、负两个频率组合而成的,所以频谱中每一个点的带宽是一样的,都是1/N,相对实数DFT,两端带宽比其它点的带宽少了一半;
复数DFT的频谱特征具有周期性:-N/2
~ 0
与
N/2 ~ N-1
是一样的,实域频谱呈偶对称性(表示余弦波频谱),虚域频谱呈奇对称性(表示正弦波频谱)。
四、
逆向傅立叶变换
假设我们已经得到了复数形式的频谱
X[k]
,现在要把它还原到复数形式的原始信号
x[n]
,当然应该是把
X[k]
乘以一个复数,然后再进行求和,最后得到原始信号
x[n]
,这个跟
X[k]
相乘的复数首先让我们想到的应该是上面进行相关性计算的复数:
cos
(2πkn/N) – j sin(2πkn/N),但其中的负号其实是为了使得进行逆向傅立叶变换时把正弦函数变为正的符号,因为虚数j的运算特殊性,使得原来应该是正的正弦函数变为了负的正弦函数(我们从后面的推导会看到这一点),所以这里的负号只是为了纠正符号的作用,在进行逆向DFT时,我们可以把负号去掉,于是我们便得到了这样的逆向DFT变换等式:
x[n] = X[k] (cos(2πkn/N) + j sin(2πkn/N))
我们现在来分析这个式子,会发现这个式其实跟实数傅立叶变换是可以得到一样结果的。我们先把X[k]变换一下:
X[k] = Re X[k] + j Im X[k]
这样我们就可以对x[n]再次进行变换,如:
x[n] = (Re X[k] + j Im X[k]) (cos(2πkn/N) + j sin(2πkn/N))
= ( Re X[k] cos(2πkn/N) + j Im X[k] cos(2πkn/N) +
j Re X[k] sin(2πkn/N) - Im X[k] sin(2πkn/N) )
= ( Re X[k] (cos(2πkn/N) + j sin(2πkn/N)) + ---------------------(1)
Im X[k]
(
-
sin
(
2πkn/N) +
j
cos
(
2πkn/N)
)
) ---------------
(2)
这时我们就把原来的等式分成了两个部分,第一个部分是跟实域中的频谱相乘,第二个部分是跟虚域中的频谱相乘,根据频谱图我们可以知道,
Re X[k]
是个偶对称的变量,
Im X[k]
是个奇对称的变量,即
Re X[k] = Re X[- k]
Im X[k] = - Im X[-k]
但
k
的范围是
0 ~ N-1
,
0~N/2
表示正频率,
N/2~N-1
表示负频率,为了表达方便我们把
N/2~N-1
用
-k
来表示,这样在从
0
到
N-1
的求和过程中对于
(1)
和
(2)
式分别有
N/2
对的
k
和
-k
的和,对于(
1
)式有:
Re X[k]
(cos(
2πkn/N) + j sin(
2πkn/N)
) + Re X[- k]
(cos( -
2πkn/N) + j sin( -
2πkn/N)
)
根据偶对称性和三角函数的性质,把上式化简得到:
Re X[k]
(cos(
2πkn/N) + j sin(
2πkn/N)
) + Re X[ k]
(cos(
2πkn/N) - j sin(
2πkn/N)
)
这个式子最后的结果是:
2 Re X[ k] cos(
2πkn/N)
再考虑到求Re X[ k]等式中有个比例系数1/N,把1/N乘以2,这样的结果不就是跟实数DFT中的式子一样了吗?
对于
(2)
式,用同样的方法,我们也可以得到这样的结果:
-2 Im X[k] sin(
2πkn/N
注意上式前面多了个负符号,这是由于虚数变换的特殊性造成的,当然我们肯定不能把负符号的正弦函数跟余弦来相加,还好,我们前面是用
cos(2πkn/N) – j sin(2πkn/N)
进行相关性计算,得到的
Im X[k]
中有个负的符号,这样最后的结果中正弦函数就没有负的符号了,这就是为什么在进行相关性计算时虚数部分要用到负符号的原因(我觉得这也许是复数形式
DFT
美中不足的地方,让人有一种拼凑的感觉)。
从上面的分析中可以看出,实数傅立叶变换跟复数傅立叶变换,在进行逆变换时得到的结果是一样的,只不过是殊途同归吧。
附: WORD文档下载地址:http://download.csdn.net/source/444234