DSP下FFT的实现.docx
文本预览下载声明
DSP下快速FFT的实现侯凯(吉林大学 通信工程学院 吉林 长春 130012)试验中用计算机软件CCStudio仿真FFT的过程中需要四个文件,分别是.dat、.asm、.cmd和.inc文件。.inc文件里存放的是FFT用到的正弦和余弦系数;.dat文件是进行FFT的输入数据,在这里由C程序生成;.cmd为汇编程序分配空间;.asm文件是执行程序的源代码。COEFF.INC文件一般可从网上下载得到。1生成.dat文件的C程序如下:#include stdio.h#include conio.hmain(){FILE *fw;int i,j,t;fw=fopen(d:fft.dat,wt);fprintf(fw, .data\n);fprintf(fw,d_input1: );t=0x5000;for(i=0;i1024;i=i+16){if(i%32==0){ for(j=0;j16;j++)fprintf(fw, .word 0x%04x\n,t); /*输出字段长度为4,不足补0*/}else{ for(j=0;j16;j++)fprintf(fw, .word 0x%04x\n,0);}}fclose(fw);}生成文件含1024个数值,相邻两个数值构成一个输入量,分别为实部和虚部,即输入数据共512个。2.cmd文件MEMORY{PAGE 0: //共16K的片内存储空间 EPROM: org=3000h,len=1000h PAGE 1: SPRAM: org=0060h,len=0020h DARAM: org=0100h,len=1000h RAM : org=1500h,len=1400h}SECTIONS{.text : EPROM PAGE 0 .data : EPROM PAGE 0 STACK : SPRAM PAGE 1 .bss : SPRAM PAGE 1 sine : DARAM PAGE 1 cosine : DARAM PAGE 1 d_input : RAM PAGE 1 //输入数据起始地址1500h fft_data : RAM PAGE 1 fft_out : RAM PAGE 1}3.asm文件.title fft.asm.mmregs.global _c_int00.copycoeff.inc ;加载含sin和cos数值的文件.copy3fft512.dat ;加载输入数据的文件sine: .usect sine,512;sin函数sin(pai*k/512) k=0~511 故预留空间512个cosine: .usect cosine,51 ;cos函数cos(pai*k/512) k=0~511 故预留空间512个d_input: .usect d_input,2048 ;为输入文件预留2048个单元空间,最多输入1024个数据fft_data: .usect fft_data,2048 ;为处理后的数据分配2048个单元fft_out: .usect fft_out,1024 ;为最终结果分配1024个单元STACK .usect STACK,10 ;分配堆栈K_DATA_IDX_1.set 2 ;定义一些常量K_DATA_IDX_2.set 4K_DATA_IDX_3.set 8K_TWID_TBL_SIZE.set 512K_TWID_IDX_3.set 128K_FLY_COUNT_3.set 4K_FFT_SIZE .set 512 ;512个数据=2的9次方K_LOGN.set 9 ;共9级运算 .bss d_twid_idx,1 ;给变量分配1个空间 .bss d_data_idx,1 .bss d_grps_cnt,1****** *** 位倒序 *** *** *** .asg AR2,REORDERED ;REORDERED即为AR2,下同 .asg AR3,ORIGINAL_INPUT .asg AR7,DATA_PROC_BUF .text_c_int00: ;程序初始化及位倒序 SSBX FRCT STM #STACK+10,SP STM #d_input,AR1 ;将输入文件的数据从程序区传送到数据区 R
显示全部