以VC5402DSP实现N(512)点FFT

     必备基础知识:1.数字信号处理 2.DSP硬件 3.CCS编程及应用 4.MATLAB仿真 5.C及汇编混合编程

         一.基2时间抽取FFT算法.

         二.如果不是对时间有严格的要求的相当一部分代码我们是用C语言写的,所以说学习处理器的重点不在于熟练掌握每一条汇编指令该如何谨慎地运用,大概理解就差不多了.处理器的存储空间是务必要理解清楚的,就手上的5402来说它的程序存储空间,数据存储空间和I/O空间都为64K,但这是它的逻辑地址,意思是说有这么大的逻辑寻址能力。芯片内部真正含有的是4K的ROM和16K的DRARM。这4K的ROM也不是用户可编程的,DSP复位后PC默认指向的地址为0xff80,在该处的存在的跳转指令会将DSP带入到自举加载程序的起始地址.说到这里就不得不提一下BootLoader的功能了,它是固化在ROM中的一段程序,负责将用户编写的代码调配到存储器中,说细说明参加空间中的相关文章.反正我在实现上述功能的过程中是将DRAM分成几段,某些段是作为程序存储器运行程序代码,某些段作为数据存储器存储数据(详见CMD文件).

          三.以下两个文件是CCS编程的核心内容.

MEMORY  {
  PAGE 0:
     RESEVE:   org   00h    len = 0x80 
    PAGE 0:
     PROG1:    org = 0x0100    len = 0x1200
   PAGE 0:
       VECT:     org = 0x0080,  len = 0x80
   PAGE 1:
       RESEVE1:   org   00h   len = 0x1300    
   PAGE 1:
      DARAM2:   org = 0x1300   len = 0x400
   PAGE 1:
         DARAM1:   org = 0x1700   len = 0x2900
}                  
                                                  
SECTIONS{
        .text :  >       PROG1   PAGE 0
        .cinit : >       PROG1   PAGE 0
        .switch: >       PROG1   PAGE 0
        .vectors:>       VECT    PAGE 0
        
        .const:  >       DARAM1   PAGE 1
        .bss  :  >       DARAM1   PAGE 1
        
        .stack : >       DARAM2   PAGE 1
        .system: >       DARAM2   PAGE 1
        .data :  >       DARAM2   PAGE 1      
        }

c代码

---------

#include 
#include
#define PI 3.14159265358979323846
#define SAMPLENUMBER 512
#define SAMPLERATE 128
/*分别定义样本点数和采样频率*/
void FFTInputData();
void InitFactorTable();
void FFT(float dataR[SAMPLENUMBER],float dataI[SAMPLENUMBER]);
int INPUT[SAMPLENUMBER];
float sin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER];
float fWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER],w[SAMPLENUMBER];
void main()
{
 int i;
 InitFactorTable();
 FFTInputData();
 for(i=0; i0)
{
   b=b*2; i--;
}
  for(j=0; j<=(b-1); j++)
{
   p=1; i=(9-M);
   /*p=2^(9-M)*/
   while(i>0)
   {
    p=p*2; i--;
   }
   p=p*j;
   for(k=j; k

4.MATLAB仿真代码

SampleRate=128;
SampleNumber=512;
i=0:1:(SampleNumber-1);
y=512*(sin(2*pi*10*i/SampleRate)+cos(2*pi*50*i/SampleRate));
subplot(2,1,1);
plot(i,y);
Y=fft(y,512);
f=i*128/512;
Am=abs(Y);
subplot(2,1,2);
plot(i,Am);


你可能感兴趣的:(数字信号处理)