快速傅里叶变换实验报告..
- 格式:doc
- 大小:2.28 MB
- 文档页数:14
快速傅立叶变换〔FFT〕算法试验一.试验目的1.加深对DFT 算法原理和根本性质的理解;2.生疏FFT 算法原理和FFT 子程序的应用;3.学习用FFT 对连续信号和时域信号进展谱分析的方法,了解可能消灭的分析误差及其缘由,以便在实际中正确应用FFT。
二.试验设备计算机,CCS 3.1 版软件,E300 试验箱,DSP 仿真器,导线三.根本原理1.离散傅立叶变换DFT 的定义:将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称DFT。
2.FFT 是DFT 的一种快速算法,将DFT 的N2 步运算削减为〔N/2〕logN 步,极大2的提高了运算的速度。
3.旋转因子的变化规律。
4.蝶形运算规律。
5.基2FFT 算法。
四.试验步骤1.E300 底板的开关SW4 的第1 位置ON,其余置OFF。
其余开关不用具体设置。
2.E300 板子上的SW7 开关的第1 位置OFF,其余位置ON3.阅读本试验所供给的样例子程序;4.运行CCS 软件,对样例程序进展跟踪,分析结果;记录必要的参数。
5.填写试验报告。
6.供给样例程序试验操作说明A.试验前预备用导线连接“Signal expansion Unit”中2 号孔接口“SIN”和“A/D 单元”的2 号孔接口“AD_IN0”。
〔试验承受的是外部的AD模块〕B.试验1.正确完成计算机、DSP 仿真器和试验箱的连接后,系统上电。
2.启动CCS3.1,Project/Open 翻开“algorithm\01_fft”子名目下“fft.pjt”工程文件;双击“fft.pjt”及“Source”可查看各源程序;加载“Debug\fft.out”;3.单击“Debug\Go main”进入到主程序,在主程序“flag=0;”处设置断点;4.单击“Debug \ Run”运行程序,或按F5 运行程序;程序将运行至断点处停顿;5.用View / Graph / Time/Frequency 翻开一个图形观看窗口;设置该观看图形窗口变量及参数;承受双踪观看在启始地址分别为px 和pz,长度为128,数值类型为16 位整型,p x:存放经A/D 转换后的输入信号;p z:对该信号进展FFT 变换的结果。
应用快速傅里叶变换对信号进行频谱分析实验报告实验报告:快速傅里叶变换在信号频谱分析中的应用【引言】傅里叶分析是一种重要的信号处理方法,可将时域信号转换为频域信号,并且可以分解信号的频谱成分。
传统的傅里叶变换算法在计算复杂度方面较高,为了降低计算的复杂度,人们提出了快速傅里叶变换(FFT)算法。
本实验旨在通过应用快速傅里叶变换对信号进行频谱分析,研究信号的频谱特性。
【实验目的】1.了解傅里叶变换的基本原理,研究其在信号处理中的应用;2.学习快速傅里叶变换算法的原理和优点;3.通过实验操作,观察信号的频谱特性,分析实验结果。
【实验原理】1. 傅里叶变换(FT):对于一个连续时间域信号x(t),其傅里叶变换可表示为X(ω) = ∫[t=−∞,∞]x(t)e^(-jωt)dt,其中X(ω)表示频域上的信号分量,ω为角频率。
2.快速傅里叶变换(FFT)算法:FFT是一种离散时间域信号的频谱分析方法,具有较低的计算复杂度。
FFT算法使用了分治法的思想,将信号分解为较小的频谱分量,并通过递归计算得到完整的频谱图。
3.FFT算法的步骤:1)若信号长度为N,则将其分为两个长度为N/2的子信号;2)对子信号进行FFT变换;3)将两个子信号拼接起来,得到完整信号的频谱分量。
【实验步骤】1.准备实验材料和装置:计算机、FFT分析软件、信号发生器等;2.设置信号发生器的输出参数,例如频率、幅度等;3.连接信号发生器和计算机,打开FFT分析软件;4.在FFT软件中选择输入信号通道,设置采样参数等;5.开始实验,观察计算机屏幕上的频谱图;6.调整信号发生器的参数,重复第5步,记录实验结果;7.结束实验,关闭设备。
【实验结果与分析】我们选择了一个简单的正弦波信号作为输入信号,信号频率设置为100Hz,幅度设置为1V。
在进行频谱分析之前,我们通过示波器观察到一个明显的正弦波信号。
接下来,我们将信号输入到计算机上的FFT分析软件中,进行频谱分析。
FFT频谱分析实验报告引言频谱分析是一种用于分析信号频率特征的方法,可应用于多个领域,如音频处理、图像处理、通信系统等。
本文将介绍FFT(快速傅里叶变换)频谱分析方法,并通过实验验证其有效性。
实验目的本实验旨在探索FFT频谱分析方法,了解其原理,并通过实验验证其在信号处理中的应用。
实验步骤1.准备实验材料–一台装有MATLAB软件的电脑–需要进行频谱分析的信号数据2.导入信号数据在MATLAB环境中,导入需要进行频谱分析的信号数据。
可以通过以下命令完成数据导入:data = importdata('signal.txt');这里假设信号数据保存在名为signal.txt的文件中。
3.对信号数据进行FFT变换利用MATLAB中的fft函数对信号数据进行FFT变换。
具体命令如下:fft_data = fft(data);这将得到信号数据的FFT变换结果。
4.计算频率谱通过对FFT变换结果的分析,可以计算信号的频率谱。
根据FFT变换的性质,频率谱可以通过计算FFT变换结果的模值得到:spectrum = abs(fft_data);这将得到信号的频率谱。
5.绘制频谱图利用MATLAB的plot函数,可以将频率谱绘制成图形。
命令如下:plot(spectrum);xlabel('频率');ylabel('幅值');title('频谱图');这将绘制出信号的频谱图。
6.分析频谱图通过观察频谱图,可以分析信号的频率特征,如频率成分的强度、主要频率等。
实验结果与讨论在完成以上步骤后,我们得到了信号的频谱图。
通过观察频谱图,我们可以分析信号的频率特征。
例如,我们可以确定信号中主要的频率成分,并通过频率成分的强度判断信号的特性。
在实验中,我们可以尝试使用不同的信号数据进行频谱分析,并观察结果的差异。
通过比较不同信号的频谱图,我们可以进一步了解信号的特性,并探索不同应用场景下的频谱分析方法。
fft实验报告结果
《FFT实验报告结果:探索快速傅里叶变换的神奇魅力》
在现代科技领域,傅里叶变换(Fourier Transform)被广泛应用于信号处理、
图像处理、通信系统等各个领域。
而快速傅里叶变换(Fast Fourier Transform,FFT)作为一种高效的计算傅里叶变换的算法,更是被广泛使用。
本文将介绍一项关于FFT实验的报告结果,探索FFT的神奇魅力。
在实验中,我们选择了一组包含不同频率和幅度的信号进行FFT处理。
通过对
这些信号进行FFT分析,我们得到了它们在频域上的频谱图。
通过观察频谱图,我们可以清晰地看到信号中包含的各种频率成分,从而更好地理解信号的特性。
实验结果显示,FFT算法能够高效地计算出信号的频谱,并且能够准确地捕捉
到信号中的各种频率成分。
通过对频谱图的分析,我们可以得到信号的频率分
布情况,从而更好地了解信号的特性和结构。
除此之外,我们还对不同长度的信号进行了FFT处理,结果显示FFT算法在处
理不同长度的信号时依然能够保持高效性能。
这表明FFT算法具有很好的可扩
展性,能够适应不同长度的信号处理需求。
总的来说,通过这次实验,我们更加深入地了解了FFT算法在信号处理中的重
要性和优越性能。
FFT算法的高效性和准确性使其成为了信号处理领域中不可
或缺的工具,为我们提供了更好的信号分析和处理手段。
希望通过这次实验报告,能够让更多的人了解和认识FFT算法的神奇魅力,进一步推动其在各个领
域的应用和发展。
FFT应用——傅立叶变换实验报告1.实验名称:FFT应用——傅立叶变换2.实验目的:1.加深对DFT算法原理和基本性质的理解。
2.熟悉FFT算法原理和FFT子程序的应用。
3.利用FFT算法对序列信号进行变换及逆变换。
3.实验原理:从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。
从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。
4、实验内容及步骤1.读入长度为N的序列信号。
2.调用信号产生子程序产生实验信号。
3.利用函数FFT1D,对其进行快速傅立叶变换, F1=fft1d(f).4.显示变换后的实验数据。
5.对变换后的信号,利用函数IFFT1D,对其进行傅立叶逆变换, F2=fft1d(f).6.显示变换了中心后的数据,比较和原来的输入信号是否相同。
5.程序清单:傅立叶变换函数fft1dvoid fft1d(int flag,int n, double fr[], double fi[],double tblSin[], double tblCos[]){int i,m,iw,j=0,l,lp,lp2,n2,k;double c,s,wr,wi,xa,ya;for(i=0;i<n-1;i++){if (i < j){xa = fr[i];fr[i] = fr[j];fr[j] = xa;ya = fi[i] ;fi[i] = fi[j];fi[j] = ya;}n2 = n / 2;while (j >= n2){j = j - n2 ;n2 = n2 / 2;}j += n2;}m = 0;n2 = n;while(n2!=1){m += 1 ;n2 = n2/2;}for(l=1;l<=m;l++){lp = (int)pow(2.0,l); lp2 = lp /2.0;k = 0;for(j=0;j<lp2;j++){c = tblCos[k];s = tblSin[k];k += n/lp;for(i=j;i<n;i=i+lp) {iw = i + lp2;wr = fr[iw] * c - fi[iw] * s;wi = fr[iw] * s + fi[iw] * c;fr[iw] = fr[i] - wr ;fi[iw] = fi[i] - wi;fr[i] = fr[i] + wr ;fi[i] = fi[i] + wi;}}}if(flag==1){for(i=0;i<n;i++){fr[i] /= n ;fi[i] /= n;}}}计算sin(i),cos(i)的函数void makeTable(int flag,int n, double tblSin[] , double tblCos[]) {int i;double cc, arg ;cc = -2.0 * PI* flag /n;for(i=0;i<n;i++){arg = i * cc;tblSin[i] = sin(arg);tblCos[i] = cos(arg);}}6.程序运行结果:变换前的信号傅立叶变换后的数据傅立叶逆变换后的数据7.实验分析:信号经过傅立叶变换后,输出的数据实部和虚部分别对称,符合傅立叶变换的性质。
FFT算法分析实验实验报告一、实验目的快速傅里叶变换(Fast Fourier Transform,FFT)是数字信号处理中一种非常重要的算法。
本次实验的目的在于深入理解 FFT 算法的基本原理、性能特点,并通过实际编程实现和实验数据分析,掌握 FFT 算法在频谱分析中的应用。
二、实验原理FFT 算法是离散傅里叶变换(Discrete Fourier Transform,DFT)的快速计算方法。
DFT 的定义为:对于长度为 N 的序列 x(n),其 DFT 为X(k) =∑n=0 到 N-1 x(n) e^(j 2π k n / N) ,其中 j 为虚数单位。
FFT 算法基于分治法的思想,将 N 点 DFT 分解为多个较小规模的DFT,从而大大减少了计算量。
常见的 FFT 算法有基 2 算法、基 4 算法等。
三、实验环境本次实验使用的编程语言为 Python,主要依赖 numpy 库来实现 FFT 计算和相关的数据处理。
四、实验步骤1、生成测试信号首先,生成一个包含不同频率成分的正弦波叠加信号,例如100Hz、200Hz 和 300Hz 的正弦波。
设定采样频率为 1000Hz,采样时间为 1 秒,以获取足够的采样点进行分析。
2、进行 FFT 计算使用 numpy 库中的 fft 函数对生成的测试信号进行 FFT 变换。
3、频谱分析计算 FFT 结果的幅度谱和相位谱。
通过幅度谱确定信号中各个频率成分的强度。
4、误差分析与理论上的频率成分进行对比,计算误差。
五、实验结果与分析1、幅度谱分析观察到在 100Hz、200Hz 和 300Hz 附近出现明显的峰值,对应于生成信号中的频率成分。
峰值的大小反映了相应频率成分的强度。
2、相位谱分析相位谱显示了各个频率成分的相位信息。
3、误差分析计算得到的频率与理论值相比,存在一定的误差,但在可接受范围内。
误差主要来源于采样过程中的量化误差以及 FFT 算法本身的近似处理。
fft上机实验报告FFT上机实验报告引言:傅里叶变换(Fourier Transform)是一种重要的数学工具,可以将一个函数在时域中的表示转换为频域中的表示。
在信号处理、图像处理、通信等领域中,傅里叶变换被广泛应用。
本文将介绍在上机实验中所学习到的快速傅里叶变换(Fast Fourier Transform,FFT)算法及其应用。
一、实验目的本次上机实验的主要目的是通过实际操作,深入了解FFT算法的原理和应用。
具体目标包括:掌握FFT算法的基本思想和计算步骤;理解FFT算法的时间复杂度和空间复杂度;学会使用MATLAB等工具进行FFT算法的实现和应用。
二、实验过程1. 理论知识准备在进行FFT算法的实验之前,我们首先需要了解傅里叶变换的基本原理和FFT 算法的推导过程。
傅里叶变换可以将一个连续函数表示为一系列正弦和余弦函数的叠加,从而揭示了信号的频域特性。
而FFT算法则是一种高效计算离散傅里叶变换(Discrete Fourier Transform,DFT)的方法,可以大大减少计算复杂度。
2. 实验准备在实验开始之前,我们需要准备一些实验所需的工具和数据。
首先,我们需要安装MATLAB软件,并确保其正常运行。
其次,我们需要准备一些信号数据,可以是声音、图像等。
本次实验中,我们选择了一段音频作为实验数据。
3. 实验步骤(1)导入数据首先,我们需要将实验数据导入到MATLAB中。
通过使用MATLAB提供的读取音频文件的函数,我们可以将音频数据读取为一个向量。
(2)进行FFT计算接下来,我们可以使用MATLAB提供的fft函数对导入的音频数据进行FFT计算。
FFT函数将返回一个复数数组,表示输入信号在频域中的表示。
(3)频域分析得到频域表示后,我们可以对信号进行频域分析。
通过计算频谱、功率谱等参数,我们可以了解信号的频率分布、能量分布等特性。
此外,还可以进行滤波、降噪等操作,以实现对信号的处理和改变。
fft实验分析实验报告FFT实验分析实验报告一、引言傅里叶变换(Fourier Transform)是一种重要的信号分析工具,它能够将一个信号分解成不同频率的成分。
快速傅里叶变换(Fast Fourier Transform,FFT)是一种高效的计算傅里叶变换的算法。
本实验旨在通过实际操作,探究FFT在信号分析中的应用。
二、实验设备与方法1. 实验设备:本实验使用的设备包括示波器、信号发生器和计算机。
2. 实验方法:(1)将信号发生器的输出接入示波器的输入端。
(2)调节信号发生器的参数,如频率、振幅等,产生不同的信号。
(3)通过示波器观察信号的波形,并记录相关数据。
(4)将示波器与计算机通过USB接口连接,将示波器上的数据传输到计算机上。
(5)使用计算机上的软件进行FFT分析,得到信号的频谱信息。
三、实验结果与分析1. 实验一:正弦波信号的FFT分析(1)设置信号发生器的频率为1000Hz,振幅为5V,产生一段正弦波信号。
(2)通过示波器观察信号的波形,并记录相关数据。
(3)将示波器上的数据传输到计算机上,进行FFT分析。
实验结果显示,正弦波信号的频谱图呈现出单个峰值,且峰值位于1000Hz处。
这说明FFT能够准确地分析出信号的频率成分,并将其可视化展示。
2. 实验二:方波信号的FFT分析(1)设置信号发生器的频率为500Hz,振幅为5V,产生一段方波信号。
(2)通过示波器观察信号的波形,并记录相关数据。
(3)将示波器上的数据传输到计算机上,进行FFT分析。
实验结果显示,方波信号的频谱图呈现出多个峰值,且峰值位于500Hz的倍数处。
这说明方波信号由多个频率成分叠加而成,FFT能够将其分解出来,并显示出各个频率成分的强度。
3. 实验三:复杂信号的FFT分析(1)设置信号发生器的频率为100Hz和200Hz,振幅分别为3V和5V,产生一段复杂信号。
(2)通过示波器观察信号的波形,并记录相关数据。
(3)将示波器上的数据传输到计算机上,进行FFT分析。
数字信号处理_快速傅里叶变换FFT实验报告快速傅里叶变换(FFT)实验报告1. 引言数字信号处理是一门研究如何对数字信号进行处理、分析和提取信息的学科。
傅里叶变换是数字信号处理中常用的一种方法,可以将信号从时域转换到频域。
而快速傅里叶变换(FFT)是一种高效的计算傅里叶变换的算法,广泛应用于信号处理、图象处理、通信等领域。
2. 实验目的本实验旨在通过编写程序实现快速傅里叶变换算法,并对不同信号进行频谱分析。
3. 实验原理快速傅里叶变换是一种基于分治策略的算法,通过将一个N点离散傅里叶变换(DFT)分解为多个较小规模的DFT,从而实现高效的计算。
具体步骤如下: - 如果N=1,直接计算DFT;- 如果N>1,将输入序列分为偶数和奇数两部份,分别计算两部份的DFT;- 将两部份的DFT合并为整体的DFT。
4. 实验步骤此处以C语言为例,给出实验的具体步骤:(1) 定义输入信号数组和输出频谱数组;(2) 实现快速傅里叶变换算法的函数,输入参数为输入信号数组和输出频谱数组;(3) 在主函数中调用快速傅里叶变换函数,得到输出频谱数组;(4) 对输出频谱数组进行可视化处理,如绘制频谱图。
5. 实验结果与分析为了验证快速傅里叶变换算法的正确性和有效性,我们设计了以下实验:(1) 生成一个正弦信号,频率为100Hz,采样频率为1000Hz,时长为1秒;(2) 对生成的正弦信号进行快速傅里叶变换,并绘制频谱图;(3) 生成一个方波信号,频率为200Hz,采样频率为1000Hz,时长为1秒;(4) 对生成的方波信号进行快速傅里叶变换,并绘制频谱图。
实验结果显示,对于正弦信号,频谱图中存在一个峰值,位于100Hz处,且幅度较大;对于方波信号,频谱图中存在多个峰值,分别位于200Hz的奇数倍处,且幅度较小。
这与我们的预期相符,说明快速傅里叶变换算法能够正确地提取信号的频谱信息。
6. 实验总结通过本次实验,我们成功实现了快速傅里叶变换算法,并对不同信号进行了频谱分析。
实验三用FFT对信号作频谱分析_实验报告一、实验目的1.学习使用FFT(快速傅里叶变换)对信号进行频谱分析;2.掌握频谱分析的基本原理和方法;3.熟悉使用MATLAB进行频谱分析的操作。
二、实验原理FFT是一种基于傅里叶变换的算法,可以将时域信号转换为频域信号,并将信号的频谱特征展示出来。
在频谱分析中,我们通过分析信号的频谱可以获得信号的频率、幅值等信息,从而对信号的性质和特征进行研究。
对于一个连续信号,我们可以通过采样的方式将其转换为离散信号,再利用FFT算法对离散信号进行频谱分析。
FFT算法可以将信号从时域转换到频域,得到离散的频谱,其中包含了信号的频率分量以及对应的幅值。
MATLAB中提供了fft函数,可以方便地对信号进行FFT分析。
通过对信号进行FFT操作,可以得到信号的频谱图,并从中提取出感兴趣的频率信息。
三、实验步骤1.准备工作:(2)建立新的MATLAB脚本文件。
2.生成信号:在脚本中,我们可以通过定义一个信号的频率、幅值和时间长度来生成一个信号的波形。
例如,我们可以生成一个频率为1000Hz,幅值为1的正弦波信号,并设置信号的时间长度为1秒。
3.对信号进行FFT分析:调用MATLAB中的fft函数,对信号进行FFT分析。
通过设置采样频率和FFT长度,可以得到信号的频谱。
其中,采样频率是指在单位时间内连续采样的次数,FFT长度是指离散信号的样本点数。
4.绘制频谱图:调用MATLAB中的plot函数,并设置x轴为频率,y轴为幅值,可以绘制出信号的频谱图。
频谱图上横坐标表示信号的频率,纵坐标表示信号的幅值,通过观察可以得到信号的频率分布情况。
四、实验结果在实验过程中,我们生成了一个频率为1000Hz,幅值为1的正弦波信号,并对其进行FFT分析。
通过绘制频谱图,我们发现信号在1000Hz处有最大幅值,说明信号主要由这一频率成分组成。
五、实验总结本实验通过使用FFT对信号进行频谱分析,我们可以方便地从信号的波形中提取出频率分量的信息,并绘制出频谱图进行观察。
快速傅里叶变换实验报告班级:姓名:学号:快速傅里叶变换一.实验目的1.在理论学习的基础上,通过本实验加深对快速傅立叶变换的理解;2.熟悉并掌握按时间抽取FFT 算法的程序;3.了解应用FFT 进行信号频谱分析过程中可能出现的问题,例如混淆、泄漏、栅栏效应等,以便在实际中正确应用FFT 。
二.实验内容1.仔细分析教材第六章‘时间抽取法FFT ’的算法结构,编制出相应的用FFT 进行信号分析的C 语言(或MATLAB 语言)程序;2.用FFT 程序分析正弦信号()sin(2)[()(*)],(0)1y t f t u t u t N T t u π=---∞<<+∞=设分别在以下情况进行分析并讨论所得的结果:a ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.000625sb ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.005sc ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.0046875sd ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.004se ) 信号频率f =50Hz ,采样点数N=64,采样间隔T=0.000625sf ) 信号频率f =250Hz ,采样点数N=32,采样间隔T=0.005sg ) 将c ) 信号后补32个0,做64点FFT三.实验要求1.记录下实验内容中各种情况下的X (k)值,做出频谱图并深入讨论结果,说明参数的变化对信号频谱产生哪些影响。
频谱只做模特性,模的最大值=1,全部归一化;2.打印出用C 语言(或MATLAB 语言)编写的FFT 源程序,并且在每一小段处加上详细的注释说明;3.用C 语言(或MATLAB 语言)编写FFT 程序时,要求采用人机界面形式:N , T , f 变量均由键盘输入,补零或不补零要求设置一开关来选择。
四.实验分析对于本实验进行快速傅里叶变换,依次需要对信号进行采样,补零(要求补零时),码位倒置,蝶形运算,归一化处理并作图。
此外,本实验要求采用人机界面形式,N,T,F 变量由键盘输入,补零或不补零设置一开关来选择。
1.采样本实验进行FFT 运算,给出的是正弦信号,需要先对信号进行采样,得到有限长序列()n x , N n ......2,1,0= Matlab 实现:t=0:T:T*(N-1); x=sin(2*pi*f*t); 2.补零根据实验要求确定补零与否,可以用if 语句做判断,若为1,再输入补零个数, 并将补的零放到采样得到的序列的后面组成新的序列,此时新的序列的元素个数等于原采样点个数加上补零个数,并将新的序列个数赋值给N 。
Matlab 实现:a=input('是否增加零点? 是请输入1 否请输入0\n');if (a)ZeroNum=input('请输入增加零点的个数:\n'); elseZeroNum=0; endif (a)x=[x zeros(1, ZeroNum)];%%指令zeros(a,b)生成a 行b 列全0矩阵,在单行矩阵x 后补充0 endN=N+ZeroNum;3.码位倒置本实验做FFT 变换的级数为M ,N M 2log =做序列数对应的二进制数的码位倒置,dec2bin ()函数将十进制数转换为二进制数,fliplr ()将二进制数进行码位倒置 ,bin2dec ()将二进制数转换为十进制数,并将按码位倒置得到的序列赋值为()n A ,N n ......2,1,0= Matlab 实现:M=log2(N); %% M 位二进制数 for t=1:1:Ns=dec2bin(t-1,M); %%将十进制数转换为二进制数,M 表示二进制码位数的上限s=fliplr(s); %%将二进制数进行码位倒置 s=bin2dec(s); %%将二进制数转换为十进制数 b=s+1; %%二进制数从0开始,而矩阵中元素序数从1开始,故需+1 A(b)=x(t); end4.蝶形运算用三层for 循环来实现:1.实现FFT 每一级运算,共M 级,此处for 循环用来控制级数;2.实现分组,此处for 循环用来控制旋转因子;3.实现每一组中FFT 运算,此处for 循环用来控制进行蝶形运算的两点之间的距离。
最终得到的()k A 即为FFT 变换的结果。
Matlab 实现:for L=1:1:Mfor J=0:1:(2^(L-1)-1) for k=(J+1):2^L:NT=A(k)+A(k+2^(L-1))*exp((-i*2*pi*J*2^(M-L))/N);A(k+2^(L-1))=A(k)-A(k+2^(L-1))*exp((-i*2*pi*J*2^(M-L))/N); A(k)=T; end endend %%A(k)即为FFT 变换结果5.归一化处理及作图实验要求对FFT 运算结果进行归一化处理,对FFT 运算结果序列()k A 均取绝对值得序列()k B ,并取出绝对值中最大值m ,序列()k B 中所有元素均除以m ,即得到归一化处理后的序列。
用stem 函数即可实现作图。
Matlab 实现:%%归一化处理B=abs(A);%%将矩阵A 中元素均取绝对值,得矩阵B m=max(B);%%取矩阵B 中的最大值X=B/m; %%A(k)的幅值归一化处理之后的结果%%作图for i=1:1:Nstem(i-1,X(i));%%stem(A,B)表示以矩阵A中元素为纵坐标,B中元素为横坐标(一一对应)作图hold on%%采样时间点值与元素序数相差1,故endaxis([0 N 0 1]);%%axis限定横,纵坐标范围五.实验结果及分析本实验时域上加时窗,对应于频域上与sinc函数做卷积,当采样为整数倍周期时,时窗对频谱图无影响,当采样是非整数个周期时,时窗对频谱图影响较大。
f对应数字域的 2。
采样频率sa) 信号频率f=50Hz,采样点数N=32,采样间隔T=0.000625s(2)频谱图如下:(3)分析:b) 信号频率f=50Hz,采样点数N=32,采样间隔T=0.005s(3)分析:c) 信号频率f=50Hz,采样点数N=32,采样间隔T=0.0046875s(2)频谱图如下:(3)分析:对于本题,若采样个数改为64N,不补零,则有15个完整周期,调用程序可验证仍有2根谱线,如下图:d) 信号频率f=50Hz,采样点数N=32,采样间隔T=0.004s(2)频谱图如下:(3)分析:e) 信号频率f=50Hz,采样点数N=64,采样间隔T=0.000625s(2)频谱图如下:(3)分析:f) 信号频率f=250Hz,采样点数N=32,采样间隔T=0.005s(2)频谱图如下:(3)分析:g) 将c)信号后补32个0,做64点FFT(2)频谱图如下表:(3)分析:六.实验源程序clcclearf=input('请输入信号频率: f\n');N=input('请输入采样点数: N\n');T=input('请输入采样间隔: T\n');a=input('是否增加零点? 是请输入1 否请输入0\n');%%采样,采N个点t=0:T:T*(N-1);x=sin(2*pi*f*t);if(a)ZeroNum=input('请输入增加零点的个数:\n'); elseZeroNum=0;end%%补0处理:在采样点组成的单行矩阵后补充ZeroNum个0,组成新的矩阵if (a)x=[x zeros(1, ZeroNum)];%%指令zeros(a,b)生成a行b列全0矩阵,在单行矩阵x后补充0endN=N+ZeroNum;%%码位倒置M=log2(N); %% M位二进制数for t=1:1:Ns=dec2bin(t-1,M); %%将十进制数转换为二进制数,M表示二进制码位数的上限s=fliplr(s); %%将二进制数进行码位倒置s=bin2dec(s); %%将二进制数转换为十进制数b=s+1; %%二进制数从0开始,而矩阵中元素序数从1开始,故需+1 A(b)=x(t);end%%蝶形运算%%三层for循环%%1.实现fft每一级运算,共M级(控制级数)%%2.控制旋转因子%%3.实现每一组中fft运算,运算次数与分组有关 (控制进行蝶形运算两点之间的距离) for L=1:1:Mfor J=0:1:(2^(L-1)-1)for k=(J+1):2^L:NT=A(k)+A(k+2^(L-1))*exp((-i*2*pi*J*2^(M-L))/N);A(k+2^(L-1))=A(k)-A(k+2^(L-1))*exp((-i*2*pi*J*2^(M-L))/N);A(k)=T;endendend%%A(k)即为FFT变换结果%%归一化处理B=abs(A);%%将矩阵A中元素均取绝对值,得矩阵B m=max(B);%%取矩阵B中的最大值X=B/m; %%A(k)的幅值归一化处理之后的结果%%作图for i=1:1:Nstem(i-1,X(i));%%stem(A,B)表示以矩阵A中元素为纵坐标,B中元素为横坐标(一一对应)作图hold on%%采样时间点值与元素序数相差1,故endaxis([0 N 0 1]);%%axis限定横,纵坐标范围七.实验总结通过本次快速傅里叶变换实验,使我对FFT运算有了更深入的了解,让我认识到课堂上的学习仅限于理论知识的学习,而在工程实践中则会面临各种各样的问题,通过编程实现FFT运算,更是对我们编程能力的考验。
从本实验中学习到,对正弦信号进行采样,对于采得样本为整数倍周期时,频谱图仍为正弦信号的频谱,有2根谱线,而对于非整数倍周期的,频谱图会发生泄漏,实际上是不能做FFT的。
此外,本实验要求我们不仅能通过Matlab实现FFT运算,做出实验结果,更重要的是能对实验结果进行分析,作出合理的解释,从而对理论知识有更深入的理解。
在此,还要感谢各位老师的热心帮助,老师答疑解惑,认真耐心地讲解,帮助我们完成实验,让我们学习到更多的知识,感谢师恩。