实验3 离散时间信号的频域分析
一、实验目的
(1)加深对z变换、DFS、DTFT和DFT四者之间关系的理解; (2)了解有限长序列傅里叶变换性质的研究方法;
(3)掌握用MATLAB语言进行离散傅里叶变换和逆变换的方法; (4)掌握用MATLAB语言进行快速傅里叶变换时常用的子函数。 二、知识点提示
本章节的主要知识点是z变换、DTFT、DFS、DFT、FFT的基本概念及计算方法;重点是z变换、DTFT和DFT三者之间关系的理解;难点是相关MATLAB子函数的应用。 三、实验原理
1.离散时间傅里叶变换(DTFT)
Xe???DTFT[x(n)]??x(n)ej?n?????j?n (3-1)
幅度谱4030根据定义式(3-1)编写程序求Xej?的示例: x= [9 8 7 6 5 4 3 2 ]; %定义序列x N = length(x); %求x的列长 n = 0:N-1;
w = linspace(-2*pi,2*pi,500); %给出频率ω及其范围 X = x*exp(-j*n'*w); %求DTFT subplot(2,1,1)
??2010-2-1.5-1-0.50相位谱10.50-0.5-1-2-1.5-1-0.500.511.520.511.52plot(w/pi,abs(X)); title('幅度谱');axis([-2,2, min(abs(X)), max(abs(X))]); %画幅度谱 subplot(2,1,2)
plot(w/pi,angle(X)); title('相位谱'); axis([-2,2, min(angle(X)),max(angle(X))]);%画相位谱 2.离散傅里叶级数(DFS)
N?1?jkn~~X?k??DFS[x(n)]??~x(n)eN (3-2)
n?02π~根据定义式(3-2)编写程序求X?k?的示例:
x = [9 8 7 6 5 4 3 2];
N = length(x); n = 0:4*N-1; k = 0:4*N-1; x1 = x(mod(n,N)+1); %序列周期重复4次
1
Xk = x1*exp(-j*2*pi/N).^(n'*k); %求DFS subplot(2,2,1),stem(x); title('原主值序列');
subplot(2,2,2),stem(n,x1); title('主值序列周期重复4次');axis([0,4*N,min(x1), max(x1)]); subplot(2,2,3),stem(k,abs(Xk));
title('序列周期重复4次的DFS幅频特性');axis([0,4*N, min(abs(Xk)), max(abs(Xk))]); subplot(2,2,4),stem(k,angle(Xk));
title('序列周期重复4次的DFS相频特性');axis([0,4*N, min(angle(Xk)), max(angle(Xk))]);
原主值序列1086402主值序列周期重复4次5024680102030序列周期重复4次的DFS幅频特性150100500102030序列周期重复4次的DFS相频特性10.50-0.5-10102030
3.离散傅里叶变换(DFT) (1)利用定义式求DFT和IDFT
X?k??DFT[x(n)]??x(n)en?0N?1?j2πknN 0?k?N?1 (3-3)
jkn1N?1x(n)?IDFT?X?k????x(n)eN 0?n?N?1 (3-4)
Nn?02π①离散傅里叶正变换X?k?
举例:x = [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15];
N = length(x); n = 0:N-1; k = 0:N-1; Xk = x*exp(-j*2*pi/N).^(n'*k); %求DFT subplot(2,1,1), stem(k,abs(Xk)); title('|X(k)|'); subplot(2,1,2), stem(k,angle(Xk)); title('arg|X(k)|');
②离散傅里叶反变换x?n?
举例:Xk=[120 -8+40.2i -8+19.3i -8+11.9i -8+8i -8+5.3i -8+3.3i -8+1.6i -8+5.3i -8-1.6i -8-3.3i
2
-8-5.3i -8-8i -8-11.9i -8-19.3i -8-40.2i]; N = length(Xk); n = 0:N-1; k = 0:N-1; x = (Xk*exp(j*2*pi/N).^(n'*k))/N; %求IDFT stem(n,x); title('x(n)');
|X(k)|150x(n)151005010005arg|X(k)|1015420-2-405101505051015
图a离散傅里叶正变换X?k? 图b离散傅里叶反变换x?n?
(2)利用MATLAB中的函数求DFT和IDFT
在MATLAB中,一维快速傅里叶正变换和逆变换的函数fft和ifft,调用格式如下: ①一维快速正傅里叶正变换函数fft 格式:X=fft(x,N)
功能:采样FFT算法计算序列向量x的N点DFT变换,当N默认时,fft函数自动按x的长度计算DFT。当N为2的整数次幂时,fft按基2算法计算,否则用混合算法。
②一维快速逆傅里叶变换函数iff 格式:x=ifft(X,N)
功能:采样FFT算法计算序列向量X的N点IDFT变换。 四、实验内容
1.已知序列x?n???0,1,2,3,4,5,6,7?,画出由离散时间傅里叶变换(DTFT)求得的幅度谱X?ej??和相位谱argXej?图形。
程序:
x=[0 1 2 3 4 5 6 7]; N=length(x); n=0:N-1;
w=linspace(-2*pi,2*pi,500);%linspace的使用
X=x*exp(-j*n'*w);%e在matlab中用exp表示,且无^符号,转秩符号
3
????subplot(2,1,1)
plot(w,abs(X));title('Xa');axis([-2,2,min(abs(X)),max(abs(X))]);%axis内部用的数组即[]形式 subplot(2,1,2)
plot(w,angle(X));title('Xw');axis([-2,2,min(angle(X)),max(angle(X))]);
Xa252015105-2-1.5-1-0.50Xw20-2-2-1.5-1-0.500.511.520.511.52
2.已知周期序列的主值x?n???0,1,2,3,4,5,6,7?,求x?n?周期重复次数为4次时的DFS。
~~要求画出原主值序列、周期序列及其傅里叶级数变换对应的X?k?和argX?k?图形。
??程序:
x = [0,1,2,3,4,5,6,7];
N = length(x); n = 0:4*N-1; k = 0:4*N-1; x1 = x(mod(n,N)+1); %序列周期重复4次 Xk = x1*exp(-j*2*pi/N).^(n'*k); %求DFS subplot(2,2,1),stem(x); title('原主值序列');
subplot(2,2,2),stem(n,x1); title('主值序列周期重复4次');axis([0,4*N,min(x1), max(x1)]); subplot(2,2,3),stem(k,abs(Xk));
title('序列周期重复4次的DFS幅频特性');axis([0,4*N, min(abs(Xk)), max(abs(Xk))]);
4

