基于FPGA的音频信号分析仪
4 系统软件设计
4.1 NIOSII集成开发环境介绍
NIOSII集成开发环境(IDE)是NIOSII系列嵌入式处理器的基本软件开发工具。所有软件开发任务都可以NIOSII IDE下完成,包括编辑、编译和调试程序。NIOSII IDE提供了一个统一的开发平台,用于所有NIOSII处理器系统。仅仅通过一台PC机、一片ALTERA的FPGA以及一根JTAG下载电缆,软件开发人员就能够往NIOSII处理器系统写入程序以及和NIOSII处理器系统进行通讯。 NIOSII IDE基于开放式的、可扩展EclipseIDEproject工程以及EclipseC/C++开发工具(CDT)工程。 4.2 系统主程序设计
主程序包括AD转换驱动程序,LCD初始化与显示,触摸屏驱动与触摸识别和FFT运算。主程序流程图如图12所示,程序见附录。
图12主程序设计流程图
17
基于FPGA的音频信号分析仪
4.3 AD转换驱动程序
为了让AD转换电路正确地采样数据和NIOSII软核CPU正确地读取数据,整个AD转换驱动程序由一个时钟控制模块,串行数据转并行数据模块,16位的加法器,一个12位D触发器缓冲模块和MAX144的状态机模块组成。
图13 QUARTUSII软件下设计的MAX144驱动的顶层原理图 由于本系统采用的是12位串行AD,对时序要求很严格。所以必须严格按照MAX144的数据手册上时序,利用状态机编写驱动程序。
MAX144的两个模拟输入通道CH0与CH1可连接到两个不同的信号源上。上电复位后,MAX144将自动对CH0通道的模拟信号进行A/D转换,转换完毕又自动切换到CH1通道,并对CH1通道模拟信号进行A/D转换,之后交替地在CH0和CH1通道间进行切换和转换。输出数据中包含的一个通道标志位CHID,用以确定该数据为哪一通道转换得到。如果只有一路模拟信号,可以将CH0与CH1连接在一起作为一个输入通道,但输出的数据中仍包含有通道标志位CHID。
将CS/SHDN设置为低电平可启动A/D转换过程,在CS/SHDN的下降沿,内部采样/保持电路将进入采样模式,此时如果SCLK为高电平,则选择内部时钟模式;若为低电平则选择外部时钟模式。当串行时钟频率小于100kHz或大2.17MHz
18
基于FPGA的音频信号分析仪
时,应选择内部时钟模式。当工作于外部时钟模式时,由于外部时钟不仅要移出数据,而且要驱动模数转换,因此,A/D转换必须在140μs内完成,否则采样/保持电路中电容上电压的降低可能导致转换结果精度的降低。转换结束后,内部振荡电路被关闭,DOUT变为高电平,此时即可读取转换数据。
图14 MAX144的时钟模式时序图
图15 MAX144驱动的状态转移图
4.4 触摸屏识别程序
当触摸屏幕时,PENIRQ就被拉低,然后发送Y轴或者X轴的控制字节,再延时消除抖动,接着就循环8次读取Y轴或者X轴的坐标值并且取其平均值,这样得到的值就是比较精确的坐标值。最后判断PENIRQ是否为高,如果为高,再判断一次。这样通过判断两次的方法可以克服触摸屏信号的抖动。如果两次都为高,则发送控制字节返回到开始继续判断PENIRQ是否为低。如果两次判断有一次不为高电平,则发送X轴控制字节,读取X轴的坐标值。
19
基于FPGA的音频信号分析仪
图16 触摸屏的触摸识别流程图
4.5 FFT算法的C语言实现 4.5.1 FFT的MATLAB仿真与分析
信号经过ADC采样后得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。 假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看作是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,
20
相关推荐: