"西南交通大学DSP原理与应用实验二:FFT实验" 一、实验目的: 1. 掌握 FFT 的算法基本原理和 C 语言的编程方法。 2. 掌握采样速率、FFT 点数与频谱分析之间的关系。 3. 掌握DSP中FFT的设计和编程思想。 二、实验设备: 计算机、实验箱 三、实验原理: 1. 本实验结合之前的 ADC 实验,将信号源输出的信号先进行 AD 转换,然后再进行 FFT。 2. 离散傅立叶变换(DFT)的定义:将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称 DFT。 3. FFT 是 DFT 的一种快速算法,将 DFT 的 N2 次运算量减少为 2^((log2N)/2) 次,极大的提高了运算的速度。 4. 2^((log2N)/2)Wep- =,称为蝶形因子式旋转因子。 5. FFT 算法:对于旋转因子来说,有如下的对称性和周期性: 对称性:W = -W 周期性:W = W + N FFT 算法就是利用了旋转因子的对称性和周期性来减少运算量的。 FFT 算法将长序列的 DFT 分解为短序列的 DFT。N 点的 DFT 先分解为两个 N/2 点的 DFT,每个 N/2 点的 DFT 又分解为两个 N/4 点的 DFT 等等,最小变换的点数即基数,基数为 2 的 FFT 算法的最小变换是 2 点 DFT。 一般而言,FFT 算法分为时间抽选(DIT)FFT 和频率抽选(DIF)FFT 两大类。时间抽取 FFT 算法的特点是每一级处理都是在时域里把输入序列依次按奇/偶一分为二分解成较短的序列;频率抽取 FFT 算法的特点是在频域里把序列依次按奇/偶一分为二分解成较短的序列来计算。 DIT 和 DIF 两种 FFT 算法的区别是旋转因子 WN 出现的位置不同,DIT FFT 中旋转因子 WN 在输入端,DIF FFT 中旋转因子 WN 在输出端,除此之外,两种算法是一样的。在本设计中实现的是基 2 的时间抽取 FFT 算法。 四、实验内容: 基于给出代码进行参数调整,从而进行实验: #include "math.h" #define Sample_Numb 256 // FFT 点数 #define S1_Freq 60 //信号 1 频率 #define S2_Freq 180 // 信号 2 频率 #define SampleFreq 800 //采样率 #define pi 3.1415926 int SignalInput[Sample_Numb];//输入信号,S=S1+S2 float FFT_Re[Sample_Numb];// FFT 实部 float FFT_Im[Sample_Numb];//FFT 虚部 float FFT_W[Sample_Numb]; //功率谱 float sin_tab[Sample_Numb]; float cos_tab[Sample_Numb]; void init_fft_tab(); void input_data(); void fft(float datar[Sample_Numb],float datai[Sample_Numb]); void init_fft_tab(void) //输入波形的初始化 { float wt1; float wt2; int i; for (i=0;i<Sample_Numb;i++) { wt1=2*pi*i*S1_Freq; wt1=wt1/SampleFreq; wt2=2*pi*i*S2_Freq; wt2=wt2/SampleFreq; SignalInput[i]=(cos(wt1)+cos(wt2))/2*100; } } 本实验中,我们将学习如何使用 FFT 算法来进行信号分析,并掌握采样速率、FFT 点数与频谱分析之间的关系。通过本实验,我们将了解到 FFT 算法的基本原理和编程方法,从而提高对 DSP 中 FFT 的设计和编程思想。
剩余14页未读,继续阅读
- 粉丝: 33
- 资源: 51
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助