数字信号处理实验讲义
X1k=fft(x1n,N); %计算N点DFT[x1(n)] Xk1=fft(x1n,N1); %计算N1点DFT[x1(n)] %产生序列x2(n),计算DFT[x2(n)] x2n=cos(pi*n/8);
X2k=fft(x2n,N); %计算N点DFT[x2(n)] Xk2=fft(x2n,N1); %计算N1点DFT[x1(n)] %产生序列x3(n),计算DFT[x3(n)] x3n=sin(pi*n/8);
X3k=fft(x3n,N); %计算N点DFT[x3(n)] Xk3=fft(x3n,N1); %计算N1点DFT[x1(n)] %绘图
subplot(3,3,1);stem(n,abs(X1k),'.'); title('16点 DFT[x1(n)]'); xlabel('k');ylabel('|X1(k)|')
subplot(3,3,2);stem(n,abs(X2k),'.'); title('16点 DFT[x3(n)]'); xlabel('k');ylabel('|X2(k)|')
subplot(3,3,3);stem(n,abs(X3k),'.'); title('16点 DFT[x3(n)]'); xlabel('k');ylabel('|X3(k)|') k=0:N1-1;
subplot(3,3,7);stem(k,abs(Xk1),'.'); title('8点 DFT[x1(n)]'); xlabel('k');ylabel('|X1(k)|')
subplot(3,3,8);stem(k,abs(Xk2),'.'); title('8点 DFT[x2(n)]'); xlabel('k');ylabel('|X2(k)|')
subplot(3,3,9);stem(k,abs(Xk3),'.'); title('8点 DFT[x3(n)]'); xlabel('k');ylabel('|X3(k)|')
2、DFT和DTFT之间的关系。 程序如下:
x=[2,-1,1,1];Xd=fft(x); nx=0:3; % 输入序列,求FFT Xd1=fftshift(Xd); % 把FFT移位到对称位置 K=64;dw=2*pi/K; % 求频率分辨率 k=floor((-K/2+0.5):(K/2-0.5)); % 确定频率下标向量
X=x*exp(j*dw*nx'*k); % 求离散傅立叶变换DFT subplot(2,1,1),plot(k*dw,abs(X)),hold on % 画DTFT幅频特性 plot([0:3]*2*pi/4,abs(Xd),'o') % 画DFT幅频特性 subplot(2,1,2),plot(k*dw,abs(X)),hold on % 画DTFT相频特性 plot([-2:1]*2*pi/4,abs(Xd1),'x') % 画DFT相频特性 set(gcf,'color','w') % 置图形背景色为白
14
数字信号处理实验讲义
15
数字信号处理实验讲义
实验四 用FFT做频谱分析
一、实验目的
1、 在理论学习的基础上,通过本实验,加深对FFT的理解,熟悉FFT子程序。 2、 熟悉应用FFT对典型信号进行频谱分析的方法。
3、 了解应用FFT进信号频谱分析过程中可能出现的问题以便在实际中正确应用FFT。 4、 熟悉应用FFT实现两个序列的线性卷积的方法。 5、 初步了解用周期图法作随机信号谱分析的方法。
二、实验原理与方法
在各种信号序列中,有限长序列信号处理占有很重要地位,对有限长序列,我们可以使用离散Fouier变换(DFT)。这一变换不但可以很好的反映序列的频谱特性,而且易于用快速算法在计算机上实现,当序列x(n)的长度为N时,它的DFT定义为:
knX(k)??x(n)WN,WN?en?0N?1?j2?N
反变换为:
1x(n)?N?knX(k)W?N k?0N?1 有限长序列的DFT是其Z变换在单位圆上的等距采样,或者说是序列Fourier变换的等
距采样,因此可以用于序列的谱分析。
FFT并不是与DFT不同的另一种变换,而是为了减少DFT运算次数的一种快速算法。 它是对变换式进行一次次分解,使其成为若干小点数的组合,从而减少运算量。常用的FFT是以2为基数的,其长度
。它的效率高,程序简单,使用非常方便,当要变换的
序列长度不等于2的整数次方时,为了使用以2为基数的FFT,可以用末位补零的方法,使其长度延长至2的整数次方。
(一)、在运用DFT进行频谱分析的过程中可能产生三种误差: (1)混叠
序列的频谱时被采样信号的周期延拓,当采样速率不满足Nyquist定理时,就会发生频谱混叠,使得采样后的信号序列频谱不能真实的反映原信号的频谱。
避免混叠现象的唯一方法是保证采样速率足够高,使频谱混叠现象不致出现,即在确定采样频率之前,必须对频谱的性质有所了解,在一般情况下,为了保证高于折叠频率的分量不会出现,在采样前,先用低通模拟滤波器对信号进行滤波。 (2)泄漏
16
数字信号处理实验讲义
实际中我们往往用截短的序列来近似很长的甚至是无限长的序列,这样可以使用较短的DFT来对信号进行频谱分析,这种截短等价于给原信号序列乘以一个矩形窗函数,也相当于在频域将信号的频谱和矩形窗函数的频谱卷积,所得的频谱是原序列频谱的扩展。 泄漏不能与混叠完全分开,因为泄漏导致频谱的扩展,从而造成混叠。为了减少泄漏的影响,可以选择适当的窗函数使频谱的扩散减至最小。 (3)栅栏效应
DFT是对单位圆上Z变换的均匀采样,所以它不可能将频谱视为一个连续函数,就一定意义上看,用DFT来观察频谱就好像通过一个栅栏来观看一个图景一样,只能在离散点上看到真实的频谱,这样就有可能发生一些频谱的峰点或谷点被“尖桩的栅栏”所拦住,不能别我们观察到。
减小栅栏效应的一个方法就是借助于在原序列的末端填补一些零值,从而变动DFT的点数,这一方法实际上是人为地改变了对真实频谱采样的点数和位置,相当于搬动了每一根“尖桩栅栏”的位置,从而使得频谱的峰点或谷点暴露出来。 (二)、用FFT计算线性卷积
用FFT可以实现两个序列的圆周卷积。在一定的条件下,可以使圆周卷积等于线性卷积。一般情况,设两个序列的长度分别为N1和N2,要使圆周卷积等于线性卷积的充要条件是FFT的长度
N≥N1+N2
对于长度不足N的两个序列,分别将他们补零延长到N。
当两个序列中有一个序列比较长的时候,我们可以采用分段卷积的方法。有两种方法:
? 重叠相加法。将长序列分成与短序列相仿的片段,分别用FFT对它们作线性卷积,
再将分段卷积各段重叠的部分相加构成总的卷积输出。
? 重叠保留法。这种方法在长序列分段时,段与段之间保留有互相重叠的部分,在
构成总的卷积输出时只需将各段线性卷积部分直接连接起来,省掉了输出段的直接
相加。
(三)、用周期图法(平滑周期图的平均法)对随机信号作谱分析
实际中许多信号往往既不具有有限能量,由非周期性的。无限能量信号的基本概念是随机过程,也就是说无限能量信号是一随机信号。周期图法是随机信号作谱分析的一种方法,它特别适用于用FFT直接计算功率谱的估值。
将长度为N的实平稳随机序列的样本x(n)再次分割成K段,每段长度为L,即L=N/K。每段序列仍可表示为:
xi(n)=x(n+(i-1)L),0≤n≤L-1,1≤i≤K
但是这里在计算周期图之前,先用窗函数w(n)给每段序列xi(n)加权,K个修正的周期图定义为
17