PAGE 1
1.DFT在信号频谱分析中的应用
1.1设计目的
(1) 熟悉DFT的性质。
(2) 加深理解信号频谱的概念及性质。
(3)了解高密度谱与高分辨率频谱的区别。
1.2设计任务与要求
(1)学习用DFT和补零DFT的方法来计算信号的频谱。
(2)用MATLAB语言编程来实现,在做课程设计前,必须充分预习课本DTFT、DFT及补零DFT的有关概念,熟悉MATLAB语言,独立编写程序。
1.3设计原理
所谓信号的频谱分析就是计算信号的傅里叶变换。连续信号与系统的傅里叶分析显然不便于直接用计算机进行计算,使其应用受到限制,而DFT是一种时域和频域均离散化的变换,适合数值运算,成为分析离散信号和系统的有力工具。
工程实际中,经常遇到的连续信号Xa(t),其频谱函数Xa(jW)也是连续函数。数字计算机难于处理,因而我们采用DFT来对连续时间信号的傅里叶变换进行逼近,进而分析连续时间信号的频谱。
1.4设计内容
1.4.1用MATLAB实现DFT与IDTF
(1)点序列x(n) 的DFT为:
点序列x(n) 的IDFT为:
N点DFT的矩阵为:
(3)根据DFT公式与矩阵展开,通过MATLAB实现DFT与IDFT,程序如下:
Matlab中的内部函数文件fft.m文件:
unction [varargout] = fft(varargin)
if nargout == 0
builtin('fft', varargin{:});
else
[varargout{1:nargout}] = builtin('fft', varargin{:});
end
运算量估计:对于N=点序列进行时间抽选奇偶分解FFT计算,需分M级,每级计算N/2个蝶。每一级需N/2次复乘、N次复加,因此总共需要进行:复乘: ;复加:直接计算N点的DFT,需要次复乘、N(N-1)次复加。N值越大,时间抽选奇偶分解FFT算法越优越。例如当N=2048点时,时间抽选奇偶分解FFT算法比直接计算DFT速度快300多倍。
1.4.2. 对离散确定信号 作如下谱分析:
(1)截取使成为有限长序列N(),(长度N自己选)写程序计算出的N点DFT ,并画出相应的幅频图。
N=32;
n=0:1:N-1;
xn=cos(0.48*pi*n)+cos(0.52*pi*n);
subplot(3,1,1)
stem(n,xn,'.k');
title('时域序列图xn');
xlabel('n');
axis([0,10,-2.5,2.5]);
w=2*pi*(0:1:2047)/2048;
Xw=xn*exp(-j*n'*w);
subplot(3,1,2);
plot(w/pi,abs(Xw));
title('幅频特性曲线X(ejw)');
xlabel('w');
axis([0,1,0,20]);
subplot(3,1,3)
Xk=dft(xn,N);
k1=0:1:31;w1=2*pi/32*k1;
stem(w1/pi,abs(XK),'.k');
title('频域序列图XK');
xlabel('频率(单位:pi)');
axis([0,1,0,20]);
图1.4.1
由图1可见,由于截断函数的频谱混叠作用,X(k)不能正确分辨w1=0.48π、w2=0.52π这两个频率分量。
(2)将 (1)中补零加长至M点(长度M自己选),编写程序计算的M点DFT ,并画出相应的图,并利用补零DFT计算 (1)中N点有限长序列频谱并画出相应的幅频图。
N=32;
n=0:N-1;
xn=cos(0.48*pi*n)+cos(0.52*pi*n);
N1=128;
n1=0:N1-1;
x1=[xn(1:32) zeros(1,96)];
subplot(3,1,1)
stem(n1,x1,'.k');
title('时域序列图x1');
xlabel('n');
axis([0,100,-2.5,2.5]);
w=2*pi*(0:2047)/2048;
X1=x1*exp(-j*n1'*w);
subplot(3,1,2);
plot(w/pi,abs(X1));
title('幅频特性曲线X(ejw)');
xlabel('w');
axis([0,1,0,20]);
subplot(3,1,3);
k=0:1:N1-1;
WN=exp(-j*2*pi/N1);
nk=n'*k;
WNnk=WN.^nk;
XK=xn*WNnk;
k1=0:1:127;
w1=2*pi/128*k1;
stem(w1/pi,abs(XK(1:1:128)),'.k');
title('频域序列图XK');
xlabel('频