1050-45hx-3-2-1nx0120-2100x和h的卷积-1.5-1-0.500.5nh11.522.53500-6-4-20n246
六、实验总结与思考
实验二 离散傅立叶变换与快速傅立叶变换
一、实验目的和要求
实验目的:
(1)加深理解离散傅里叶变换及快速傅里叶变换概念; (2)学会应用FFT对典型信号进行频谱分析的方法; (3)研究如何利用FFT程序分析确定性时间连续信号; (4)熟悉应用FFT实现两个序列的线性卷积的方法; 实验要求:
(1)编制DFT程序及FFT程序,并比较DFT程序与FFT程序的运行时间。给编制的程序加注释;
(2)完成实验内容2,并对结果进行分析。实验中的信号序列xc(n)和xd(n),在单位圆上的Z变换频谱|Xc(j?)|和|Xd(j?)|会相同吗?如果不同,你能说出哪一个低频分量更多一些吗?为什么? (3)完成实验内容3,并对结果进行分析;
(4)利用编制的计算卷积的计算程序,分别给出一下三组函数的卷积结果。
?1 0?n?14①x(n)??
0 其他??4?h(n)??? 0?n?14
?5??1 0?n?9 ②x(n)??
0 其他?h(n)?0.5sin(0.5n) 0?n?9
③x(n)?(1?0.1n) 0?n?9
nh(n)?0.1n 0?n?9
二、实验原理
4.在matlab信号处理工具箱中提供了4个FFT内部函数用于计算DFT和IDFT,它们分别是:fft(x),fft(x,l),ifft(X),ifft(X,L)
①fft(x):用于计算N点的DFT,N是序列的长度。
②fft(x,L):计算L点的DFT,若N?L,则将原序列截短为L点的序列,再计算
其L点的DFT;若N?L,则将原序列补零至L点,再计算其DFT。
③ifft(X):计算N点的IDFT,N是频域序列的长度。
④ifft(X,L):计算L点的IDFT。若N?L,则将原序列截短为L点的序列,再
计算其L点的DFT;若N?L,则将原序列补零至L点,再计算其IDFT。
三、实验方法与内容(需求分析、算法设计思路、流程图等)
实验内容:
(1)用离散傅立叶变换程序处理时间抽样信号,并根据实序列离散傅立叶变换的对称性,初步判定程序的正确性;
(2)观察三角波和反三角波序列的时域和幅频特性,用N=8点FFT分析信号序列
xc(n)和xd(n)的幅频特性观察两者的序列形状和频谱曲线有什么异同?绘出两序列及其幅频特性曲线。 三角波序列
?n?1 0?n?3?xc(n)??8?n 4?n
?0 else? 反三角波序列
?4?n 0?n?3 ?xd(n)??n?3 4?n
?0 else?(3)已知余弦信号如下
x(t)?cos(2?Ft)当信号频率F=50Hz采样间隔T?0.00625s,采样长度N?64时,
对该信号进行傅立叶变换。用FFT程序分析正弦信号,分别在以下情况下进行,并且分析比较结果。
①F?50,N?32,T?0.000625; ②F?50,N?32,T?0.005; ③F?50,N?32,T?0.0046875; ④F?50,N?32,T?0.004;
(4)选定某一时间信号进行N?64点离散傅立叶变换,并且,对同一信号进行快速傅立叶变换,并比较它们的速度。 四、实验原始纪录(源程序等) 1.如果x(n)?sin(n?n?)?sin()是一个N?16的有限长序列,用MATLAB求其84DFT的结果,并画出其结果图,如图2-1所示 源程序: clc
clear all N=16;
n=0:1:N-1;%时域采样 xn=sin(n*pi/8)+sin(n*pi/4); k=0:1:N-1;%频域采样 WN=exp(-j*2*pi/N); nk=n'*k;
WNnk=WN.^nk; Xk=xn*WNnk; subplot(2,1,1) stem(n,xn); xlabel('n'); ylabel('x(n)'); subplot(2,1,2) stem(k,abs(Xk)); xlabel('k'); ylabel('X(k)'); 2.(1)三角波 clear all; clc
n=0:1:7;
x1=(n+1).*(n>=0).*(n<=3)+(8-n).*(n>=4); % 三角波序列 subplot(3,1,1);stem(n,x1); title('三角波序列');xlabel('n'); N=8; k=0:N-1; X1=fft(x1,N);
magX1=abs(X1);phaX1=angle(X1); subplot(3,1,2);stem(k,magX1);
xlabel('k');ylabel('三角波DFT的幅度'); subplot(3,1,3);stem(k,phaX1);
xlabel('k');ylabel('三角波DFT的相位'); (2)反三角波 clear all; clc
n=0:1:7;
x2=(4-n).*(n>=0).*(n<=3)+(n-3).*(n>=4); % 反三角波序列 subplot(3,1,1);stem(n,x2);
title('反三角波序列');xlabel('n'); N=8; k=0:N-1; X2=fft(x2,N);
magX2=abs(X2);phaX2=angle(X2);
subplot(3,1,2);stem(k,magX2); xlabel('k');ylabel('幅度');
subplot(3,1,3);stem(k,phaX2); xlabel('k');ylabel('相位'); 3.余弦信号
function cos_fft(F,N,T) %用FFT分析正弦信号 n=[0:N-1];
t=n*T;% 设置采样点
x=cos(2*pi*F*t);% 创建采样正弦信号
Xk=fft(x,N); % 求采样正弦信号的N点FFT k=[0:N-1]; subplot(2,1,1);
stem(t,x); % 作图显示采样正弦信号时域波形 xlabel('t/以T为单位'); ylabel('x(t)');
title('正弦信号采样序列'); subplot(2,1,2);
stem(k,abs(Xk)); % 作图显示采样正弦信号频谱 xlabel('k'); ylabel('|X(k)|');
title('正弦信号采样序列的傅里叶变换');
%对同一余弦信号进行不同形式采样并分析后的结果 clear all; echo off;
F=50; % 余弦信号的模拟域频率
N=[32,32,32,32,64]; %各采样信号的采样点数
T=[0.000625,0.005,0.0046875,0.004,0.000625] %各采样信号的采样间隔 for i=1:5
figure(i);
cos_fft(F,N(i),T(i)); %对各采样信号进行FFT变换并作图显示 end
4.设x(n)?0.8cos(0.47?n)?0.4cos(0.53?n),0?n?9 (1)DFT计算源程序 N=64; n=0:1:N-1; tic,
xn=0.8*cos(0.47*pi*n)+0.4*cos(0.57*pi*n); k=0:1:N-1;
WN=exp(-j*2*pi/N); nk=n'*k;
WNnk=WN.^nk;