数字信号处理过程中,两大有用的步骤是离散傅里叶变换(DFT)和数字滤波(digital filtering).
DFT是一个数学过程,可以用来确定离散信号序列的频率等。
尽管DFT是计算时域信号的频谱的最直接的数学过程,但是他的效率是非常低的。所以,在1965年,Cooley和Tukey提出了用于快速实现DFT的算法。这个算法即是FFT。FFT并不是近似于DFT,而是等于DFT,就是DFT,是实现DFT的方法。
DFT公式简单理解
DFT的变换公式如下:
其中:
X(m)是DFT输出的第m项,如X(0),X(1),X(2),X(3)等
m是在DFT输出在频域上的序号,m=0,1,2,---N-1;
x(n)是输入样本序列,如x(0),x(1),x(2),x(3)等
n是DFT输入在时域上的序号,n=0,1,2,----N-1;
N是DFT输入时的样本数量以及DFT输出的频率点数量。
N是一个很重要的参数,其决定了:
(1) 需要的输入样本数量;
(2) 频域输出的分辨率;
(3) 计算N-点DFT需要的时间。
DFT的输入和输出的序号,在标准的DFT中,都是从0到N-1。也就是说,如果时域样本数量为N,则DFT则计算出N个等频率间隔上的频率分量。
DFT的确切的输出频率,与采样率fs(将时域连续信号转换成数字信号的采样率)以及N有关。
N点DFT的输出频率为:
取DFT变换式中的m为0,可以得到:
可以看到X(0)是N个x(n)采样点的和,或者说X(0)等于N乘以x(n)的平均值。X(0)代表x(n)的直流分量,如果X(0)为非零值 ,则代表x(n)序列有一个直流分量。
可以看到X(m)中包括j, 所以,DFT同时计算出隐含在输入信号中的各频率分量的幅度与相位。
也就是说,通过DFT计算(或者说是FFT计算),可以得出输入信号中的直流分量、各频率分量的幅度以及相位。
测试ADC各通道之间的同步性能,用的就是这个相位。刚开始测试的时候,还不知道怎么才能测试通道间的同步性能。当时,正好准备学习一下数字信号处理方面的知识,然后在书中看到了,然后就用到工作上了。虽然在学校也有数字信号处理这门课,但是真的是忘干净了。
假设有一连续信号:
即包含频率为1KHz和2KHz的信号,而且2KHz信号的相位与1KHz的相比,有135度的移相。
对其做8点DFT,所以我们需要有8个采样点,假设采样频率为8000/s。则用matlab按照DFT的转换公式进行编程运算。
程序如下:
clc;
clear all;
ts=1/8000;
N=8;
for m=0:1:(N-1)
Xm=0;
for n=0:1:(N-1)
Xm=Xm+(sin(2*pi*1000*n*ts)+0.5*sin(2*pi*2000*n*ts+3*pi/4)).*exp(-j*2*pi*n.*m/N);
Wm(m+1)=Xm;
end
end
m=0:1:(N-1);
subplot(2,1,1)
%画DFT输出的幅度图
stem(m,abs(Wm))
axis([0 7 0 4])
title('Magnitude of X(m)')
xlabel('m')
subplot(2,1,2)
%画DFT输出的相位图
%忽略掉幅度很小的频率分类
tol = 1e-6;
Wm(abs(Wm) < tol) = 0;
%忽略掉幅度很小的频率分类
stem(m,angle(Wm)*180/pi)
set(gca,'xtick',[0:1:7])
set(gca,'ytick',[-90:45:90])
title('phase of X(m)')
xlabel('m')
运算的结果,如下图:
m=1,即代表为mfs/N=1KHz处。
由欧拉公式
可知,
所以,X(m)的相位是基于余弦函数的相位。由上图可知,1KHz处的信号相位为-90度。代表的函数即为cos(2*pi*mfs/N*t-90)=sin(2*pi*mfs/N*t)=sin(2*pi*1000*t),即和输入函数等同。
DFT的对称性
由上图可知,DFT具有明显的对称性。尽管标准的DFT可以接受复数序列,但是实际生活中的大多数输入为实数序列。
当输入序列x(n)为实数序列时,第m个DFT的频率分量的幅度与第(N-m)个DFT的频率分量的幅度相同,相位相反。
即:
也就是说,X(m)和X(N-m)互为复共轭(complex conjugate)。即如果知道X(m),即可知道X(N-m)。
这样的对称关系表明,如果我们对一个实数序列做N点DFT,我们能得到N个复数的DFT输出,但是只有前面的N/2+1个是独立的,后面的数都可以由前面的数计算得到,不提供新的频谱信息。
这就与,厂家的评估软件上,为什么频谱的计算是到fs/2截止 对应上了。
DFT的线性特性
即:
如果DFT没有这个线性特性的话,则DFT只能分析单音信号,这样的话,DFT就没有什么用了。
DFT的幅度
在使用软件或者浮点硬件来计算DFT时,可能不需要太关注DFT的这个幅度特性(DFT的幅度是输入信号幅度的倍数);但是如果用定点硬件来执行DFT的话,则需要注意这点。
有时候看到DFT的表达式为:
这个公式,使得DFT的输出幅度为输入信号幅度的一半,但是增加了一个除以N的除法运算。
在实际的分析中,我们对相对幅度感兴趣,对绝对幅度并没有那么关心。
DFT 的时移特性
书中是这样定义的:
It states that a shift in time of a periodic x(n) input sequence manifests itself as a constant phase shift in the angles associated with the DFT results。
有一周期序列,x(n),假设n=0为第一个采样点,则
假设n=k为第一个采样点,则
即,当n=k为第一个采样点时的DFT与n=0为第一个采样点时的DFT相比,具有rad的相移。
需要注意:
(1) 时移特性,是指把n=k的数据作为第一个采样点,即
2) 证明中用到了
还是比较不容易绕过弯来。
可以这样举个例子: