实验三:离散时间信号的频域分析
一.实验目的
1.在学习了离散时间信号的时域分析的基础上,对这些信号在频域上进行分析,从而进一步研究它们的性质。
2.熟悉离散时间序列的3种表示方法:离散时间傅立叶变换(DTFT),离散傅立叶变换(DFT)和Z变换。
二.实验相关知识准备
1.用到的MATLAB命令 运算符和特殊字符:
< > .* ^ .^ 语言构造与调试:
error function pause 基本函数:
angle conj rem 数据分析和傅立叶变换函数: fft ifft max min 工具箱:
freqz impz residuez zplane
三.实验内容
1. 离散傅立叶变换
在MATLAB中,使用fft可以很容易地计算有限长序列x[n]的离散傅立叶变换。此函数有两种形式: y=fft(x)
y=fft(x,n) 求出时域信号x的离散傅立叶变换
n为规定的点数,n的默认值为所给x的长度。当n取2的整数幂时变换的速度最快。通常取大于又最靠近x的幂次。(即一般在使用fft函数前用n=2^nextpow2(length(x))得到最合适的n)。
1 / 14
当x的长度小于n时,fft函数在x的尾部补0,以构成长为n点数据。 当x的长度大于n时,fft函数将序列x截断,取前n点。
一般情况下,fft求出的函数多为复数,可用abs及angle分别求其幅度和相位。 注意:栅栏效应,截断效应(频谱泄露和谱间干扰),混叠失真
例3-1: fft函数最通常的应用是计算信号的频谱。考虑一个由100hz和200hz正弦信号构成的信号,受零均值随机信号的干扰,数据采样频率为1000hz。通过fft函数来分析其信号频率成分。
t=0:0.001:1;%采样周期为0.001s,即采样频率为1000hz
x=sin(2*pi*100*t)+sin(2*pi*200*t)+1.5*rand(1,length(t));%产生受噪声污染的正弦波信号 subplot(2,1,1);
plot(x(1:50));%画出时域内的信号 y=fft(x,512);%对x进行512点的fft
f=1000*(0:256)/512;%设置频率轴(横轴)坐标,1000为采样频率 subplot(2,1,2);
plot(f,y(1:257));%画出频域内的信号
实验内容3-2:频谱泄漏和谱间干扰
假设现有含有三种频率成分的信号x(t)=cos(200πt)+sin(100πt)+cos(50πt) 用DFT分析x(t)的频谱结构。选择不同的截取长度,观察DFT进行频谱分析十存在的截断效应。试用加窗的方法减少谱间干扰。请分析截取长度对频谱泄漏和频率分辨率的影响,分析不同窗函数对谱间干扰的影响。
提示:截断效应使谱分辨率(能分开的两根谱线间的最小间距)降低,并产生谱间干扰;频谱混叠失真使折叠频率(fs/2)附近的频谱产生较大的失真。理论和实践都已证明,加大截取长度可提高频率分辨率;选择合适的窗函数可降低谱间干扰;而频谱混叠失真要通过提高采样频率fs和预滤波来改善。
解:取采样频率fs=400Hz,采样信号序列x(n)= x(t)w(n), n=0,1…….N-1; N为采样点数,N=fs*T,T为截取时间长度,w(n)为窗函数。 实验取三种长度T1=0.04s,T2=4*0.04s,T3=8*0.04s 窗函数分别用矩形窗函数w(n)=RN(n),Hamming 窗。 clear;close all
fs=400; T=1/fs; %采样频率为400
2 / 14
Tp=0.04;N=Tp*fs; %采样点数
N1=[N,4*N,8*N]; %设定三种截取长度供调用 st=['|X1(jf)|';'|X4(jf)|';'|X8(jf)|'];%设定三种标注语句供调用 %矩形窗截断 for m=1:3 n=1:N1(m);
xn=cos(200*pi*n*T)+sin(100*pi*n*T)+cos(50*pi*n*T);%产生采样序列 Xk=fft(xn,4096) @96点DFT,用FFT实现 fk=[0:4095]/4096/T; subplot(3,2,2*m-1)
plot(fk,abs(Xk)/max(abs(Xk))); ylabel(st(m,:));
if m==1 title('矩形窗截取');end end;
%加hamming窗改善谱间干扰 for m=1:3 n=1:N1(m);
wn=hamming(N1(m));%调用函数hamming产生N长hamming窗序列wn xn=(cos(200*pi*n*T)+sin(100*pi*n*T)+cos(50*pi*n*T)).*wn';%产生采样序列
Xk=fft(xn,4096) @96点DFT,用FFT实现 fk=[0:4095]/4096/T; subplot(3,2,2*m)
plot(fk,abs(Xk)/max(abs(Xk))); ylabel(st(m,:));
if m==1 title('hamming窗截取');end end;
2. 一维逆快速傅立叶变换 y=ifft(x) y=ifft(x,n)
实验内容3-3:频域采样定理的验证 (1) 产生一个三角波序列x(n)
3 / 14
0?n?M/2?n x(n)???M?nM/2?n?M(2)对M=40,计算x(n)的64点DFT,并图示x(n)和X(k)=DFT[x(n)],k=0,1,…,63。 (3)对(2)中所得X(k)在[0,2pi]上进行32点抽样得
X1(k)=X(2k), k=0,1,…,31。并图示。
(4)求X1(k)的32点IDFT,并图示。即x1(n)=IDFT[X1(k)], k=0,1,…,31 (5)采用周期延拓的方法绘出x1((n))32的波形,评述x1((n))32与x(n)的关系,并根据频域采样理论加以解释。 clear;close all M=40;N=64;n=0:M;
xa=0:floor(M/2);xb=ceil(M/2)-1:-1:0;
xn=[xa,xb]; %产生长度为M的三角波序列xn Xk=fft(xn,64); %计算xn的64点FFT X1k=Xk(1:2:N); %隔点抽取Xk得到X1(k)
x1n=ifft(X1k,N/2); %计算X1k的32点IFFT得到x1(n) nc=0:3*N/2; %取97点进行观察 xc=x1n(mod(nc,N/2)+1); %x1(n)的周期延拓序列 subplot(3,2,1) stem(n,xn,'.');
title('40点三角波序列x(n)'); xlabel('n'); ylabel('x(n)') subplot(3,2,2) n1=0:N/2-1; stem(n1,x1n,'.');
title('32点IDFT[X1(k)]'); xlabel('n'); ylabel('x1(n)'); subplot(3,2,3) k=0:N-1; stem(k,abs(Xk),'.');
4 / 14