电源模块为整个系统提供供电。系统还能响应用户按键事件,并进行相应的处理。串口模块为系统的扩展预留。
3.2 音频频谱分析仪的系统软件设计
系统上电后首先进行系统初始化System_Init(),对看门狗、系统时钟、定时器、I/O端口、ADC等各模块进行初始化。接下来ADC12对连续的模拟信号进行采样,得到离散化的数字信号,由处理器读取该数字信号并进行相应的处理。采样频率过高,采样点数过多,会占用大量宝贵的处理器内存,降低数据处理速度;采样频率过低,又会使采样数据失真而无法恢复原始连续信号。因此,必须根据信号的频率范围来设置采样频率,同时要满足采样定理的要求。
当采样频率一定时,增加采样点数可以提高频率分辨率,但数据存储空间和计算量也相应增大。一般可根据实际需要进行采样点数的选取,通常设置为2的整数次幂,以便于进行后续的FFT谱分析,本系统采样点数为N=16.ADC12采样流程图如图4所示。
采样后的FFT数据处理是系统的又一个重点和难点,一方面,为了得到正序FFT,需要对原始自然序列进行码位倒序排列;另一方面,为了减少处理器的浮点运算时间,旋转因子kN W 计算采用查表实现。图5为FFT运算的倒序流程图。
如果提前将余弦和正弦计算出来作为全局变量,计算kN W 就可以直接调用进行加减计算,减少了大量的浮点运算时间,会以牺牲一点存储器的代价获得快速的系统响应。表1是编制的N=16时的余弦和正弦表。
图6表示的是FFT运算的流程图,整个FFT程序包含在一个迭代的过程中,最后一层计算总是2-FFT蝶形运算,下面是蝶形运算和FFT计算的主程序段: