⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test18.c

📁 这里面有很多dsp应用程序源码
💻 C
字号:
#pragma CODE_SECTION(vect,"vect")

#include "math.h"

unsigned int *pmem=0;

#define PMST   *(pmem+0x001D)
#define SWCR   *(pmem+0x002B)
#define SWWSR  *(pmem+0x0028)
#define BSCR   *(pmem+0x0029)
#define IMR    *(pmem+0x0000)
#define IFR    *(pmem+0x0001)

#define pi 3.1415926

#define fs 200000             /*sample frequency 200k*/
#define f  500                /*input signal frequency 500~20kHz*/

#define Ac 1638

#define N  fs/f 

#define M1  71                /*bandpass filter step*/
#define M2  51                /*lowpass  filter step*/

int i;
float q,p,g;
float input[N];         
float x[N],x1[N],x2[N],x3[N];
float y1[N+M2-1],m[N];
float mixing_out[N];           
float BPF_out[N];              
float out[N];


void bpf(unsigned int n);
void lpf(unsigned int n,float *y);

/*****************CPU initialization****************/
void cpu_init()
{
   PMST=0x3fa0;
   SWWSR=0x7fff;
   SWCR=0x0000;
   BSCR=0x0002;
   IMR=0;
   IFR=IFR;
} 

main()
{  
    cpu_init();
      
/***************modulation signal**************/   
   for(i=0;i<N;i++)    
   {
      q=(float)f/fs;
      input[i]=(1.5*cos(2*pi*i*q)+1.5)*4095/5;
   } 
   
   for(i=0;i<N;i++)
   {
      x[i]=cos(2*pi*i*20/200);
      x1[i]=cos(2*pi*i*5/200);          
      x2[i]=cos(2*pi*i*15/200);
      x3[i]=sin(2*pi*i*5/200);
   }
      
  
   for(i=0;i<N;i++)            /*A/D sample datas,20k carrier wave*/
   {
      input[i]=input[i]+Ac;             
      m[i]=input[i]*x[i];          
   }
     
/***************receive**************************/     
   for(i=0;i<N;i++)             /*downconverter*/
      mixing_out[i]=m[i]*x2[i];
           
   bpf(M1);                     
   
   for(i=0;i<N;i++)             
     y1[i]=BPF_out[i]*x1[i]; 
      
   lpf(M2,y1);  
   
   for(i=0;i<N;i++)  
         
     out[i]=y1[i];    
}


/********************band pass filter**********************/
void bpf(unsigned int n)          
{
   int i,j;
   int a,b;
   float wh=0.08,wl=0.03;         /*central frequency 5k*/
   float l;
   float w[M1],h[M1],hd[M1];  

   a=(n-1)/2; 
   
   for(i=0;i<n;i++)
     w[i]=0.54-0.46*cos(2*pi*i/(n-1));
      
   for(i=0;i<n;i++)              
   {
      b=i-a;
      
      if(i==a)
        hd[i]=wh-wl;
      else
      {  
      	l=(float)(sin(b*pi*wh)-sin(b*pi*wl));
      	hd[i]=(float)l/(pi*b);
      }	
      h[i]=w[i]*hd[i]; 
   }
    
   for(i=0;i<N;i++)
   {
      l=0;
      for(j=0;j<n;j++)
      {
        b=(int)fabs(i-j);
        l+=h[j]*mixing_out[b];
      }   
      BPF_out[i]=l;
   } 
}

/*******************low pass filter*****************************/
void lpf(unsigned int n,float *y)          
{
   int i,j;
   unsigned int a;
   int b;
   float wc=0.01;         
   float l; 
   float hd[M2],w[M2],h[M2];
   
   a=(n-1)/2;
   
   for(i=0;i<n;i++)
   {
      w[i]=0.54-0.46*cos(2*pi*i/(n-1));
      if(i==a)
   	    hd[i]=wc;
      else
      {
        b=i-a;
        hd[i]=(float)(sin(b*pi*wc))/(pi*b); 
      }  
      h[i]=hd[i]*w[i];
   }
   
   for(i=N;i<N+n-1;i++)
      y[i]=y[i-N];
      
   for(i=n-1;i<N+n-1;i++)
   {
      l=0;
      for(j=0;j<n;j++)
        l+=h[j]*y[i-j]; 
      out[i-n+1]=l;
   }
   
   for(i=0;i<N;i++)
      y[i]=out[i];  
}   
   

/************************************************/
void vect()
{
   asm(" .ref _c_int00");
  
   asm(" b _c_int00");  /* reset */
   asm(" nop");
   asm(" nop");
   asm(" rete");        /* nmi  */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* int0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* int1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* int2 */
   asm(" nop");        /* tint0 */
   asm(" nop");
   asm(" nop");
   asm(" rete");      /* brint0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");      /* bxint0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");      /* dmac0 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* tint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* int3 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* hpint */
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* brint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* bxint1 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");       /* dmac4 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" rete");     /* dmac5 */
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
   asm(" nop");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -