五色led音频显示器程序有些看不懂,有做过的大神能回答一下这个问题吗
时间:10-02
整理:3721RD
点击:
void FFT()
{
register uchar i,bb,j,k,p,max;
register short TR,TI,temp;
unsigned long ulReal;
unsigned long ulImage;
for(i=0; i<SAMPLE_NUM;i++) //此处可以加入自动增益
{
FftReal[BRTable[i]] = STC_ADC()<<keep;//使显示保持在一定范围内
FftImage[i] = 0;
}
keepnum=FftReal[2]/32;//提取等级数
if((7<keepnum)&&(keepnum<=8)) {keep=1;}
else if((4<keepnum)&&(keepnum<=6)) {keep=2;}
else if((2<keepnum)&&(keepnum<=4)) {keep=3;}
else {keep=5;}
for( i=1; i<=NUM_2_LOG; i++)
{
bb=1;
bb <<= (i-1);
for( j=0; j<=bb-1; j++)
{
p=1;
p <<= (NUM_2_LOG-i);
p = p*j;
for( k=j; k<SAMPLE_NUM; k=k+2*bb)
{
TR = FftReal[k]; TI = FftImage[k]; temp = FftReal[k+bb];
FftReal[k] = FftReal[k] + ((FftReal[k+bb]*cos_tabb[p])>>7) + ((FftImage[k+bb]*sin_tabb[p])>>7);
FftImage[k] = FftImage[k] - ((FftReal[k+bb]*sin_tabb[p])>>7) + ((FftImage[k+bb]*cos_tabb[p])>>7);
FftReal[k+bb] = TR - ((FftReal[k+bb]*cos_tabb[p])>>7) - ((FftImage[k+bb]*sin_tabb[p])>>7);
FftImage[k+bb] = TI + ((temp*sin_tabb[p])>>7) - ((FftImage[k+bb]*cos_tabb[p])>>7);
FftReal[k] >>= 1;
FftImage[k] >>= 1;
FftReal[k+bb] >>= 1;
FftImage[k+bb] >>= 1;
}
}
}
max=0;
for( i=0; i<5; i++)//5
{
ulReal = FftReal[i+1];
ulReal *= ulReal;
ulImage = FftImage[i+1];
ulImage *= ulImage;
a[i] = sqrt_16( ulReal + ulImage ); //修改
if( a[i] < FFT_OUT_MIN )
a[i] = 0;//修改
else
a[i] = a[i]-FFT_OUT_MIN;
if( a[i] >max)
max =a[i];
//disp();
}
if(max>11) //11
{
max/=11;
for( i=0; i<5; i++) //输出a的5个分离数值
{
a[i]/=max;
}
}
}
这里面有五个a[i]数,这五个数是什么
{
register uchar i,bb,j,k,p,max;
register short TR,TI,temp;
unsigned long ulReal;
unsigned long ulImage;
for(i=0; i<SAMPLE_NUM;i++) //此处可以加入自动增益
{
FftReal[BRTable[i]] = STC_ADC()<<keep;//使显示保持在一定范围内
FftImage[i] = 0;
}
keepnum=FftReal[2]/32;//提取等级数
if((7<keepnum)&&(keepnum<=8)) {keep=1;}
else if((4<keepnum)&&(keepnum<=6)) {keep=2;}
else if((2<keepnum)&&(keepnum<=4)) {keep=3;}
else {keep=5;}
for( i=1; i<=NUM_2_LOG; i++)
{
bb=1;
bb <<= (i-1);
for( j=0; j<=bb-1; j++)
{
p=1;
p <<= (NUM_2_LOG-i);
p = p*j;
for( k=j; k<SAMPLE_NUM; k=k+2*bb)
{
TR = FftReal[k]; TI = FftImage[k]; temp = FftReal[k+bb];
FftReal[k] = FftReal[k] + ((FftReal[k+bb]*cos_tabb[p])>>7) + ((FftImage[k+bb]*sin_tabb[p])>>7);
FftImage[k] = FftImage[k] - ((FftReal[k+bb]*sin_tabb[p])>>7) + ((FftImage[k+bb]*cos_tabb[p])>>7);
FftReal[k+bb] = TR - ((FftReal[k+bb]*cos_tabb[p])>>7) - ((FftImage[k+bb]*sin_tabb[p])>>7);
FftImage[k+bb] = TI + ((temp*sin_tabb[p])>>7) - ((FftImage[k+bb]*cos_tabb[p])>>7);
FftReal[k] >>= 1;
FftImage[k] >>= 1;
FftReal[k+bb] >>= 1;
FftImage[k+bb] >>= 1;
}
}
}
max=0;
for( i=0; i<5; i++)//5
{
ulReal = FftReal[i+1];
ulReal *= ulReal;
ulImage = FftImage[i+1];
ulImage *= ulImage;
a[i] = sqrt_16( ulReal + ulImage ); //修改
if( a[i] < FFT_OUT_MIN )
a[i] = 0;//修改
else
a[i] = a[i]-FFT_OUT_MIN;
if( a[i] >max)
max =a[i];
//disp();
}
if(max>11) //11
{
max/=11;
for( i=0; i<5; i++) //输出a的5个分离数值
{
a[i]/=max;
}
}
}
这里面有五个a[i]数,这五个数是什么
