微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 五色led音频显示器程序有些看不懂,有做过的大神能回答一下这个问题吗

五色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]数,这五个数是什么         


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top