信号与信息处理综合实验报告
实验二
班级: 2010211127班
姓名:
学号:
班内序号:
邮箱:
联系方式:
目录
题目二 FFT实现 2
一. 实验目的 2
二. 实验原理 2
基 4-FFT运算 2
FFT变换后的频谱图是以Nyquist频率Fs/2为对称轴的 4
三.程序功能 5
1. 程序模块描述: 5
a) FFT 程序(实现基本功能): 5
b) SDRAM配置与写入部分: 5
2. 拓展功能: 5
实验流程图: 7
四、实验结果说明 9
1. 64点基4FFT运算 9
2.IFFT计算之后与原始数据对比 10
五.遇到的问题 11
六.实验心得体会 12
题目二FFT实现
实验目的
进一步熟悉CCS v5的开发环境,掌握调试的要素,并理解FFT的过程。
实验原理
基 4-FFT运算
这里使用的是基4-FFT,此次主要说明这个问题。
其实基4-fft和基2-fft的原理是一样的,都是把一个运算分裂成几个运算,这样可以减少运算量。只是基2-fft是分裂成两个,而基4-fft就是分裂成4个。而相对基2-fft来说占用资源比较少,而基4-fft的速度比较快。
FFT的基4运算是每一级的运算都有N4个蝶形运算组成,第m级的运算如下:
其中k为数据所在的行数,N为需要计算的点数
下图是一个butterfly单元
FFT变换后的频谱图是以Nyquist频率Fs/2为对称轴的
简单地说,FFT 是Z 变换和离散序列傅立叶变换上的单位圆上等间隔取点,而傅立叶和Z变换均包含周期为2pi的特性。那在单位圆上取点,根据三角函数的特性他们相位相差一百八十度只需要在前面加一个负号(sinx)或者直接不用加(cosx),而我们得到的FFT是幅频特性曲线,高低只代表幅度大小,在单位园上取的点是一个复数(s域或者z域),复数的大小是实部的平方加虚部的平方再开根号,根据刚刚我们推得的三角函数特性,如果相位差180度,也就是一个pi,他们之间的幅度应该是完全一样的。
另外,FFT变换后另一半边的频率实际上为负频率。这点可以从“相位部分正负号的改变不影响幅值”的证明中看出,因此严格来讲,应该将-(Fs/2-1):Fs/N:Fs/2映射到-(N/2-1):1:N/2上,所得的频谱图应该是关于y轴对称的。
三.程序功能
程序模块描述:
FFT 程序(实现基本功能):
主函数(main):初始化输入序列、旋转因子、FFT 点数,负责其它功能函数的调用,并完成一些基本操作。
SDRAM配置与写入部分:
SDRAM:同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。
本次实验:通过EMIF接口向SDRAM中写入0x400000个数据,再将它们读出来并验证与原数据是否相同。如果相同则点亮LED0~2,否则点亮LED3。
主函数(main):负责其它功能的调用,执行 SDRAM 写入、读取和检测,并点亮对应的LED。
EMIFA_config(&MyEmifaConfig):实现对 EMIFA 总线的12 个接口寄存器的配置。具体配置信息在MyEmifaConfig 结构体中。
#pragma DATA_SECTION(sdram_data,".off_ram");数据段定义,定义要写入的数据位置,需要在CMD文件中建立对应的section。
文件;描述物理存储器的管理、分配和使用情况,用于DSP 代码的定位。
拓展功能:
拓展功能包括任意点数FFT 和IFFT,它们都是基于FFT 程序(FFT 部分)修改的,以下只列出拓展(修改)的部分。
修改点数FFT:要实现任意点数 FFT,则旋转因子都要根据点数 N 自动生成。下面就是实现这一功能的代码段,这是在头文件之中有定义。直接拿出来即可。
voidgen_twiddle(short *w, int n)
{
double M = ;
int i, j, k;
for (j = 1, k = 0; j < n >> 2; j = j << 2)
{
for (i = 0; i < n >> 2; i += j << 1) {
w[k + 11] = d2s(M * cos( * PI * (i + j) / n));
w[k + 10] = d2s(M * sin(
信号与信息处理综合实验报告实验二 来自淘豆网m.daumloan.com转载请标明出处.