数字信号||快速傅里叶变换(FFT)(4)
实验四****快速傅里叶变换(FFT)
一、实验目的
(1) 深入理解快速傅里叶变换(FFT)的基本理论体系。
(2) 系统地探讨如何利用快速傅里叶变换(FFT)来计算有限长序列与无限长序列信号的频谱。
(3) 熟练掌握在MATLAB语言中用于实现快速傅里叶变换的常见子函数及其应用方法。
二、实验涉及的MATLAB子函数
计算结果y由快速傅里叶变换(FFT)计算得出;该过程涉及执行n点快速傅里叶变换操作。若输入序列x的长度小于所需计算点数(即参数)n,则系统会对输入序列进行填充;反之亦然,在此情况下则会截断多余的数据项以满足算法需求。对于矩阵形式的输入信号,则会对每个通道的数据按照相同方式进行处理
三、实验原理
通过MATLAB提供的子函数执行快速傅里叶变换
但
快速傅里叶变换(FFT)被定义为DFT运算中的高效处理方法;它只是众多实现手段中的一种。其核心策略包括时域和频域抽取法;其基本思路在于将长序列分解为多个较短序列;如基于2分法和基于4分法等;这使得该过程大幅降低了计算时间复杂度。在MATLAB软件平台中,默认提供了专门处理快速傅里叶变换(FFT)的功能模块;可调用内置函数fft来进行离散傅里叶变换(DFT)计算;而inv fft则用于逆离散傅里叶变换(IDFT)计算。
四、实验任务
(1) 深入学习实验理论知识体系,在明确本次实证任务的基础上认真研读例题程序设计文档,并深入掌握其中所包含的核心算法思想与技术手段。通过反复对照教材相关内容,在理论与实践相结合的基础上透彻理解每一条代码行所承载的功能逻辑与计算意义。
(2) 完成例题程序代码的具体实现工作。
(3) 详细记录调试成功后的完整源代码清单,并清晰展示运行结果图谱及数据统计图表。
例14-1 给定一个长度为8点的一维时域离散信号序列,在起始4个点之前均为零值,在之后的位置上取值为一。现对该信号进行快速傅里叶变换分析,并生成相应的时域序列及其DFT和IDFT频谱图。
k从0到N减一;
通过快速傅里叶变换算法计算得到序列X_k;
调用子图函数,并绘制幅度值序列:
title('大写DFT表示法');
通过逆傅里叶变换算法计算得到原始信号序列:
xn1 = ifft(X_k, N);
调用子图函数,并绘制原始信号值序列:
stem(n, xn);
结果如图所示:
图标显示结果
n1=0;n2=7;n0=4;
n=n1:n2;N=length(n);
xn=[(n-n0)>=0]; %建立时域信号
subplot(2,2,1);stem(n,xn)
title('x(n)');
k=0:N-1;
Xk=fft(xn,N);%用FFT计算信号的DFT
subplot(2,1,2);stem(k,abs(Xk));
title('Xk=DFT(x(n))');
xn1=ifft(Xk,N);%用IFFT计算信号的IDFT
subplot(2,2,2);stem(n,xn1);
title('x(n)=IDFT(Xk)');


图14-1 例14-1用FFT求有限长序列的傅里叶变换
