audiofir.c

来自「ICETEK-VC5416-EDULab瑞泰创新科技5416开发板的实验源程序」· C语言 代码 · 共 114 行

C
114
字号
/////////////////////////////////////////////////
//  Example For ICETEK-VC5416-EDU              //
//          CTR Version : V4                   //
//  Filename: AudioFir.c                       //
//  Project : AudioFir.pjt                     //
//  Version : 2.00                             //
//  Write by: Daniel Hawk                      //
//  Company : Realtimedsp Co.Ltd.              //
//                                             //
//  All Rights opened & no Onus  2005.06       //
/////////////////////////////////////////////////
#include "myapp.h"
int ioport port8000;
#define DataBuffSize 8192  // 设置缓冲区大小
#define DELAYTIME 6134
int pAudioLeft [DataBuffSize]; // 设置左声道输入缓冲区
int pAudioRight[DataBuffSize];
int nTime,nTime1,nCount;
unsigned int bEcho=0,bFIR=1;
void FIR();
int left,right;

#define FIRNUMBER 25
float h[FIRNUMBER]={
   -0.0142,   -0.0203,   -0.0301,   -0.0365,
   -0.0255,    0.0200,    0.1136,    0.2588,
    0.4448,    0.6460,    0.8277,    0.9545,
    1.0000,    0.9545,    0.8277,    0.6460,
    0.4448,    0.2588,    0.1136,    0.0200,
   -0.0255,   -0.0365,   -0.0300,   -0.0203,
   -0.0142
}; // low throw
float fXn[FIRNUMBER]={ 0.0 };
float fXn1[FIRNUMBER]={ 0.0 }; 

void main( void )
{
   long   int i,k;
   initCLK(CPU_SPEED_160M);
   initMcBSP1();
   initAIC23();
   initMcBSP0();
   nCount=DELAYTIME;
   nTime1=DELAYTIME/2;
   nTime=0;
  
   // 缓冲区初始化
   for(i=0;i<DataBuffSize;i++)
   {
     pAudioLeft[i]=0;
	 pAudioRight[i]=0;
   }
   initInterrupt();
   port8000=0;
   port8000=0x8888;
   port8000=0;
   bEcho=0;
   for(;;)
   {
   
   }

}
interrupt void rxData( void )
{
   int i,j;
   i=DRR10;
   j=DRR20;
   
   pAudioLeft[nCount]=i;
   left=i;
   right=j;      
         
   DXR10=i;
   if ( 1 )
   {
       for ( i=FIRNUMBER-1;i>0;i-- )
       {
       	fXn[i]=fXn[i-1];
//       	fXn1[i]=fXn1[i-1];
       }
       fXn[0]=left;
//       fXn1[0]=right;
   	FIR();
   	DXR20=left;
   	pAudioRight[nCount]=left;
   }
   
   else
     DXR20=j;
   nTime++;
   nTime1++;
   nCount++;
   nCount%=DataBuffSize ;
   nTime%=DataBuffSize;
   nTime1%=DataBuffSize;

}
void FIR()
{
	float fSum,fSum1;
	int i;
	fSum=fSum1=0;
	for ( i=0;i<FIRNUMBER;i++ )
	{
		fSum+=(fXn[i]*h[i]);
//		fSum1+=(fXn1[i]*fHn[i]);
	}
	left=fSum; 
//	right=fSum1;
}


⌨️ 快捷键说明

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