基于dsp的快速傅里叶变换程序设计(2)
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 算法的特点是在频域里把序列依次按奇/偶一分为二分解成较短的序列来计算。
本文基于合众达的dsp试验箱,采集实验箱上信号发生器产生的信号,并对信号进行fft变换,通过ccs观察结果。
DIT 和DIF 两种FFT 算法的区别是旋转因子WNk出现的位置不同,,(DIT)FFT 中旋转因子WNk在输入端,(DIF)FFT 中旋转因子WNk在输出端,除此之外,两种算法是一样的。在本设计中实现的是基2 的时间抽取FFT 算法,具体的实现过程可参见源程序及其注释。
首先定义N=128,当然也可以更改程序,将N值改为256或1024等等,前提是相应的数组大小也得更改。然后用模数转换器采集信号(正弦信号,方波信号等等),最后将采集到的信号进行FFT变换即可。
2.1 功能实现
2.1.1 位置倒码
当进行原位运算时,发现当运算完成后,FFT的输出X(k)按正常顺序排列
在存储单元中,即按X(0),X(1), ,X(7)的顺序排列,但是这时输入x(n)却不是按自然顺序存储的,而是按x(0),x(4), , x(7)的顺序存入存储单元,看起来好像是“混乱无序”的,实际上是有规律的,称之为倒位序。
当用二进制表示顺序时,它正好是“位码倒置”的顺序。例如,原来的自然顺序应是x(1)的地方,现在放着x(4),用二进制码表示这一规律时,则是在x(0 0 1)处放着x(1 0 0),x(0 1 1) 处放着x(1 1 0),即将自然循序的二进制码位倒置过来,第一位码变成最末位码,这样倒置以后的顺序正是输入所需要的顺序,其结果与按时间抽样算法FFT流程图中的输入顺序是一致的。
需要注意当进行原位运算时,输入输出序列为倒位序的关系,若不为原位运算,则这种关系不一定成立。在实际运算中,一般直接将输入数据x(n)按码位倒置的顺序排好输入很不方便,总是先按自然顺序的存储,然后进行FFT的原位计算。
表2-1 码位倒置顺序
2.1.2 蝶距
本文基于合众达的dsp试验箱,采集实验箱上信号发生器产生的信号,并对信号进行fft变换,通过ccs观察结果。
设N=2,则整个运算流图中包含L级蝶形运算,每一级则有N/2个蝶形单元。蝶距等于每个蝶形单元两个输入(出)节点的序列号,即第m级蝶形单元的蝶距为:2
m 1
L
。
2.1.3 旋转因子
由FFT算法原理过程可知,若N=2L,则共有L级蝶形运算,各级蝶形运算中旋转因子分别如下:第L级的旋转因子为WNr(r=0,1, ,N/2 1);第L-1级的旋转因子为WNr/2(r=0,1, ,N/22 1); ;第一级的旋转因子为WNr/2(r=0,1, ,N/2L 1)。由此可见, 第m级蝶形运算中旋转因子为WNr/2
r
L 1
L M
,
=0,1, ,N/2L M 1 1。
本文基于合众达的dsp试验箱,采集实验箱上信号发生器产生的信号,并对信号进行fft变换,通过ccs观察结果。
3 设计流程图
否
本文基于合众达的dsp试验箱,采集实验箱上信号发生器产生的信号,并对信号进行fft变换,通过ccs观察结果。
4 各部分程序设计及参数计算
4.1 驱动程序的配置
1.双击桌面上的Setup CCStudio v3.3。“Clear”原有的设备驱动程序配置。 2.根据DSP的型号选择相应的TI原装驱动程序,根据DSP的型号选择相应的TI驱动程序,本实验箱采用SEED_DEC2812,故选择F2812 XDS510 Emulator。如4.1图所示。
图4.1 目标板选择
3.点中F2812 XDS510 Emulator驱动后,鼠标右键,在弹出的菜单中点击Properties。设置完成后如下图所示。
本文基于合众达的dsp试验箱,采集实验箱上信号发生器产生的信号,并对信号进行fft变换,通过ccs观察结果。
4.点击Next,作如下图所示的设置。
5.保存并启动CCS调试界面。
本文基于合众达的dsp试验箱,采集实验箱上信号发生器产生的信号,并对信号进行fft变换,通过ccs观察结果。
4.2 程序的初始化
#include "math.h" #define PI 3.1415926
#define N 128 //采样次数 #include "DSP28_Device.h" #include "comm.h"
interrupt void ISRTimer2(void); //声明定时器2中断子程序 interrupt void ad(void); //声明ad中断子程序 unsigned int Ad_data[128]={0}; unsigned int convcount = 0;
volatile unsigned int adconvover =0; unsigned int i;
//void InitForFFT(void); //FFT初始化函数
void finv(int N1,float *xr,float *xi); //倒序运算函数,对输入序列倒序 int INPUT[N],DATA[N];
float fWaveR[N],fWaveI[N],w[N];
float sin_tab[N],cos_tab[N]; //正余弦函数表 int Mum; //Mum为蝶形运算的级数
程序初始化部分的详细信息见上面所列程序。
4.3 主程序
void main(void) {
for(i=0;i<N;i++) {
sin_tab[i]=sin(PI*2*i/N);//建立正余弦函数表 cos_tab[i]=cos(PI*2*i/N); }
/*初始化系统*/ InitSysCtrl(); /*关中断*/
DINT; //禁止可屏蔽中断 IER = 0x0000; //禁止CPU中断
IFR = 0x0000; //清CPU所有中断标志 /*初始化PIE中断*/ InitPieCtrl();
/*初始化PIE中断矢量表*/ InitPieVectTable();
本文基于合众达的dsp试验箱,采集实验箱上信号发生器产生的信号,并对信号进行fft变换,通过ccs观察结果。
//初始化cputimer InitCpuTimers();
/*设置中断服务程序入口地址*/ EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.TINT2 = &ISRTimer2; //取ISRTimer2地址赋给中断 //向量TINT2(CPU-Timer2) PieVectTable.ADCINT = &ad; //取ad地址赋给中断向量ADCINT EDIS; // This is needed to disable write to EALLOW protected //registers /*开中断*/
IER |= M_INT1;//ADC中断 ,使能第一组中断!!
//已经定义"#define M_INT1 0x0001" EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM adconvover=0; DINT;
/*设置CPU*/
ConfigCpuTimer(&CpuTimer2, 150, 22); StartCpuTimer2(); //已经定义 "#define StartCpuTimer2() //CpuTimer2Regs.TCR.bit.TSS = 0" /*开中断*/
IER |= M_INT14; // 使能第14组中断(CPU定时器2(RTOS))!! //已经定义"#define M_INT14 0x2000" ; IER是CPU中断使能寄存器 EINT; InitAdc();
for(;;){ //等待AD采样结束!!!
if (adconvover==1){ //adconvover==1表示AD采样 // 结束!!!见ad中 …… 此处隐藏:3428字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [幼儿教育]【完整版】2019-2025年中国药物发现外
- [幼儿教育]2018-2019年初中信息技术广东初一竞赛
- [幼儿教育]最新外研版(一起)小学英语五年级上册《
- [幼儿教育]农业推广与创新管理专业 -中农大毕业论
- [幼儿教育]2017-2022年中国更年期用药行业市场深
- [幼儿教育]数学1.1.2第1课时棱柱、棱锥和棱台的结
- [幼儿教育]二年级群文阅读课例欣赏
- [幼儿教育]2010-2015年中国保险行业投资分析及深
- [幼儿教育]厄运打不垮的信念第一课时
- [幼儿教育]巧用文本,让表达在言语中绽放论文
- [幼儿教育]中学生百科知识竞赛题及答案
- [幼儿教育]八大菜系英文简介
- [幼儿教育]中国男装牛仔裤市场发展研究及投资前景
- [幼儿教育]远程数字视频监控系统在银行的应用
- [幼儿教育]光纤光缆制造工艺及设备
- [幼儿教育]国家安全法试题及答案
- [幼儿教育]2011高中提前招生及竞赛试题(物理卷1)
- [幼儿教育]宁夏第三产业房地产业、科学研究和技术
- [幼儿教育]中兴通讯 ME3000模块用户硬件设计手册_
- [幼儿教育]紫外线灯管的辐照强度问题
- 苏联东欧剧变的原因和历史教训浅析
- 人工智能导论实验报告(学生)
- 思科ITE章考试原题及答案
- 《学习雷锋好榜样》主题班会教案
- 加油站建设项目安全评价报告
- 剖析社保卡管理系统
- 2017-2018年影视剧新媒体版权运营行业
- 2017-2018学年四川省成都市高一上学期
- 2019最新高中数学 第三章 3.2.1 几类不
- 2011-2015年中国基酸市场调查及行业前
- 人教版新课标选修八Unit 1 课件Warming
- 郭溪燎原小学辅导学生记录表
- 教师资格证统考综合素质写作秘笈
- 国外校园绿色建筑研究方向与建设实践
- 15.1 动物运动的方式 课件(北师大版八
- 民用飞机空调系统
- 长安侠文化传统与唐诗的任侠主题
- 《中国近现代史纲要》名词解释
- 11金本《保险学概论》复习资料
- 民用建筑机电安装工程专业施工图图纸会




