DFT公式的⼀个简单⽰例
⼀个简单的离散傅⾥叶变换公式如下⾯所⽰
X(k) = ∑<N>x(n)e-j2πkn/N, k = 0,1,2```N-1
傅⾥叶变换⽤于分析时域信号中的频域成分,即从时域信号x(n)得到频域信号X(k)
这⾥的∑<N>表⽰对求和项从n=0加到N-1,为N点傅⾥叶变换,输⼊时域信号为N个,输出频域信号也为N个
看⼀个简单的例⼦
x(t) = sin(2π*1000*t) + 0.5sin(2π*2000*t+3*π/4)
它由⼀个1kHz的信号和⼀个2kHz的信号组成,频率成分⾮常明显,所以我们能⼀眼看出,⽽有些信号则不是那么明显,则可以借助傅⾥叶变换来求出频率成分
此处以该简单例⼦验证,也可以说是做⼀个简单的傅⾥叶变换的演⽰。
为了对该信号进⾏处理,我们需要对它进⾏采样,假设采样频率为f s=8kHz,以n为采样得到的值的索引,
并以此为变量重新表⽰上述信号为x(n) = sin(2π*1000*n/8000) + 0.5sin(2π*2000*n/8000+3*π/4)
并设N=8即做8个点的DFT变换,下⾯我们将借助MATLAB⼯具进⾏计算和演⽰
⾸先我们使⽤MATLAB画出x(t)的波形,如下图
图中x轴的数字为我为了绘制该波形所⽤到的信号的个数,不要与时间单位秒对应,知道这⾥显⽰了两个周期的信号即可
下⾯再给出⼀组8点DFT输⼊信号的图⽰
图中的8个点即我们使⽤8倍于信号周期(8kHz)采样所得到的⼀个周期的样本,利⽤这8个数据,我们便可以利⽤DFT求得其频率成分
在MATLAB中,直接调⽤FFT并将结果⽤图形显⽰如下,FFT为计算DFT的⼀种快速算法,其结果和直接使⽤DFT是⼀样的
如上图,我们可以看到,计算的结果和我们已知吻合。计算得到信号中有1kHz和2kHz的频率成分,且幅值前者为后者两倍
这⾥有个⼩点,上⾯4个图除了其中⼀个都是由FFT的计算结果直接绘制的,由于MATLAB对于0的表⽰,或者说是机器计算原本应该是0的值,它得到了⼀个很⼩的值(这很正常),所以⽤调⽤angle函数求得的相位是不正确的,
我直接根据正确的结果⽽绘制了相位图
关于频域信号的单位,很简单,采样率为f s的信号做N点DFT,所得到的频域信号单位为
f analysis(k) = k*f s/N
对于我们的例⼦,f s为8kHz,N为8,则对应X(k)当k为0时为直流量,k为1时为1kHz频率成分,依此类推
从上图我们还可以看到X(k)信号具有某种对称性,准确的关系为
X(k) = X(k+N/2)*
即X(k)与X(k+N/2)共轭,也就是说,对于N点频域信号,只有N/2个点的信号是独⽴的
所以虽然从图中看出好像是有6kHz和7kHz的信号成分,但实际上是不存在的,这也符合奈奎斯特采样定理,采样频率必须⼤于两倍的信号频率,从侧⾯反应出⽤8kHz去采样最多只能采到4kHz以内的信号
傅里叶变换公式证明所以我们可以看到,采样率和做⼏个点的DFT运算很关键,假设我们让N=4,则就得不到1kHz频率成分的情况
最后再解释频域幅值⼤⼩与时域幅值⼤⼩的关系,这⾥我们的输⼊信号为实数信号,对应频域幅值为时域幅值的N/2倍
写在最后,刚刚接触信号处理,写点东西整理下思路。⽂中的例⼦来⾃Lyons的Understanding Digital Signal Processing,这是⼀本很不错的教材,强烈推荐
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论