教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 幼儿教育 >

基于dsp的快速傅里叶变换程序设计(2)

来源:网络收集 时间:2026-04-09
导读: FFT 算法将长序列的DFT 分解为短序列的DFT。N 点的DFT 先分解为两个N/2 点的DFT,每个N/2 点的DFT 又分解为两个N/4 点的DFT 等等,最小变换的点数即基数,基数为2 的FFT 算法的最小变换是2 点DFT。 一般而言,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 算法的特点是在频域里把序列依次按奇/偶一分为二分解成较短的序列来计算。

本文基于合众达的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字,全部文档内容请下载后查看。喜欢就下载吧 ……

基于dsp的快速傅里叶变换程序设计(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/38474.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)