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 + -
显示快捷键?