离散傅里叶变化的直观理解

离散傅里叶变化的直观理解(An Intuitive Discrete Fourier Transform Tutorial)

介绍:

      本文是讲解离散傅立叶变换(DFT:discrete Fourier transform ),试图理解DFT实际是在做什么。现有的文献关于DFT有着很详细的数据公式介绍DFT,但是大多数人并不理解这些数据公式的真正含义。可以有不同的角度理解傅里叶变换(fourier transform),本文将从信号(signal)与各种频率的正弦波(sin)之间的相关性的角度来解释什么是傅里叶变换。

      关于DFT更加严谨的说明,可以阅读以下的两本书:

      Understanding Digital Signal Processing 可读性强,适合初学者。

      Digital Signal Processing - Principles, Algorithms and Applications 较全全面,但是需要较好的数据基础。

     那么什么是DFT呢?DFT是一种获取信号包含有哪些频率的算法。信号表示为一个数字序列,例如下面的包含12个数字的信号,完整的信号here。     

1.00, 0.62, -0.07, -0.87, -1.51, -1.81, -1.70, -1.24, -0.64, -0.15, 0.05, -0.10

x(n)来表示信号,n是索引。例如:x(0)=1.00,x(1)=0.62 等。大多数情况下,信号都是这么来表示的,例如,所有的数字信号都会像这样由一个数字序列来表示。我们考虑使用零均值(zero-mean)信号,零均值信号就是将所有的信号数字相加后的均值是0。本文的最后会解释为什么使用零均值信号。

      当我们试图获取信号的频率的时候,需要首先将复杂的信号分解为各个简单的信号。信号更好的描述的方式是:一个信号是许多单独频率分量信号的组合。离散傅里叶变换就是用来确定一个复杂信号由哪些频率组成的。

相关性

相关性是在信号处理领域被广泛使用的概念,核心是测量两个信号的相似度。如果相关性高,则信号就相似。如果相关性接近于零,则不相似。一般情况下,这样的公式:\sum_{i=0}^{N}x(i)y(i), x 和y是某种信号,用来计算x和y的相关性(相似度)。但是,这个公式如何计算两个信号的相关性的呢?如果信号x和 信号y相似,那么,当x(i)是正数,y(i)也是正数,当x(i)是负数,通常y(i)也是负数。两个正数相乘得到的是正数,两个负数相乘得到的也是正数,将得到的所有正数相加,会得到更大的正数。那么如果两个信号不相似会怎么样呢? 当x(i)是正数,y(i)有时会是负数,有时会是正数,反之亦然。那么,将这些有正数也有负数的结果相加,结果接近于零。这是一种理想的情况,非常相似的信号有很高的相关性,非常不同的型号有非常低的相关性,有一些相似的信号的相关性则介于两者之间。

      另外需要说明的,相关性也有可能是负的。任何时刻,当x(i)是正数,y(i)是负数,这意味结果是负的。一个大的负相关性说明信号也是相似的,只不过一个信号与另外一个信号相反。

Figure 1: Example of correlated and uncorrelated signals

离散傅里叶变换(Discrete Fourier Transform)

相关性怎么帮助我们理解DFT?如下,DFT公式:

X(k)= \sum_{n=0}^{N-1}x(n)e^{-i2\pi kn/N}

k从0到N-1计算所有DFT系数,当我们说’系数’(coefficients),意思指的是X(k),X(0)是第一个系数,X(1)是第二个系数等等。这个公式和之前的相关性公式十分相似,因为它计算的是信号x(n)与函数e^{-i2\pi kn/N}的相关性。但是,一个信号与一个复指数相似意味着什么呢?将复指数分解为正弦和余弦分量,如下:

e^{-i\theta }=cos\theta -isin\theta

如果使得\theta =2\pi kn/N,则新的DFT公式如下:

X(k)=\sum_{n=0}^{N-1}x(n)((cos(2\pi kn/N))-isin(2\pi kn/N)))

可以把它变换为如下表示:

这样看起来清晰,存在2个相关性计算,一个是正弦(sin)曲线,另外一个余弦(cos)曲线。我们首先计算信号与某个特定频率余弦(cos)曲线的相关性,这个是复数X(k)的实部。然后,计算信号与某个特定频率正弦(sin)曲线的相关性,这个复数X(k)的虚部。

余弦曲线相关性

余弦和信号之间的相关性告诉我们什么有用的信息?有100个样本点的信号,如下图:(信号样本

Plot of Signal

Figure 2: plot of example signal

下面步骤计算信号与不同频率的sin、cos曲线的相关性。模拟计算DFT实数部分的计算,首先使用上面的公式计算当k=0结果如下:

上面计算了信号与只包含一个1的信号( cos(0) = 1)的相关性,这等于未修改信号的总和。从上面的图(Figure 2)中我们可以看到它应该接近于零,因为从图中可以看出,大约一半的信号大于0一半的信号小于0。实际计算得到结果是1。

当k=1,得到如下的图Figure 3:

图(a)中x(n)是蓝色的曲线,cos(2\pi 1n/N)是红色曲线,-sin(2\pi 1n/N)是黑色曲线。

图(b)是 x(n)*cos(2\pi 1n/N)

图(c)是 x(n)*-sin(2\pi 1n/N)

Plot of Signals with k = 1

Figure 3: correlation between signal and sinusoids, k=1

图(b)和(c)中的信号看起来大约有一半信号小于于零,一半大于零,当我们将信号相加结果应该接近于0。实际计算结果,

等于1.0,等于0,所以X(1) is 1+i0.

下图(Figure 4)显示的是当k=3的情况,图(a)中是信号x(n), sin,cos曲线。图(b),图(c)分别是信号x(n)与cos,sin相乘的结果。

Plot of Signals with k = 3

Figure 4: correlation between signal and sinusoids, k=3

很明显,图(c)几乎都是正数,只有很少的负数。这说明将这些值相加会得到一个很大的正数值。实际计算信号与cos的相关是0,与sin的相关性值是49。说明,当k=3时DFT的系数是X(3)=0+i49。

对于每个k可以继续这个过程,直到得到完整的DFT。

最终得到的DFT的如下图Figure 5,左侧是实部,右侧是虚部:

real and imaginary components of X(k)

Figure 5: real (left) and imaginary (right) components of X(k)

从图中可以看出实数部分当k=10达到峰值(说明信号和cos相似),虚数部分当k=3时达到峰值(说明信号和sin相似)。总的来讲,我们不关心是正弦还是余弦。我们只想知道是否存在正弦波,与它的相位无关。因此我们们结合了实部和虚部得到了能量谱( power spectrum)。

能量谱P(k)没有虚部,计算X(k)的能量谱,结果如下图Figure 6:

power spectrum of X(k)

Figure 6: Power spectrum of X(k)

从上图中可以很清晰的看出,信号存在2个频率,这即是我们需要得到的。

将k值转换为真实的频率(单位 赫兹),我们需要原始信号的采样率(fs)和以下公式

上面这个公式中fs是采样率,N是信号中sample的个数,在此例子中N是100。

总结

上面的讲解中为了简化讨论,忽略了一些细节,在此需要解释下。我们假定了信号的均值是零,所以当两个信号不相似时值是零。实际上这种假定是不必要的,但是高相关性总是说明信号更相似,而低相关性则不相似。在任何情况下,信号都可以通过减去均值从满足均值为0的假定。

上面的例子中,我们计算DFT 从k=0 到k=20,如果继续计算k更大值的DFT系数,我们就会看到能量谱在N/2附件是对称的。实数部分是k的偶函数,虚数部分是k的奇函数。具体的细节可以参考上面提到的两本书。

(结束)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值