摘 要:详细介绍了一种基于ARM的音频频谱显示系统的实现,整个音频显示系统包括音频信号采集、音频信号处理以及音频信号转换后的显示等功能。在设计中综合了声音采集、ARM技术及FFT算法,构建了一个实时采集的频谱显示系统,可以应用于各种需要对声音进行采集和分析的场合。其中,硬件系统主要包括声音信号的采集与处理、最小系统、电源和显示模块;而软件系统则是将ADC转换的数据通过FFT算法后显示在LCM12864显示器上。测试结果表明,该系统具有较好的实时性和准确性。
关键词:音频;频谱显示;FFT;ARM
本文设计了基于SONiX公司的ARMCortex-M0SN32F700的音频频谱显示器,采用性价比较高的Cortex-M0 SN32F700实现对音频频谱的分析处理,取代了传统使用纯硬件滤波器或专用数字处理芯片DSP来实现的方法,具有较高的实用价值。本文采用ARM作为控制核心[1-3],充分发挥了其功耗超低、精度较高等优势,其他各部分电路设计也充分考虑了简单、可靠、经济等因素,为实际应用提供了一定的参考价值。
1 系统总体设计方案
1.1 系统控制芯片选择
本系统以SONiX公司的ARM Cortex-M0 SN32F700芯片为控制核心,SN32F700的主时钟的速率为50 MHz,采用三级流水线结构且片上资源丰富,能够很好地实现系统的控制和算法,甚至能简化一些复杂的硬件电路。相比于普通的单片机,采用ARM作主控芯片的方案具有灵活性、可扩展性、通用性的优点,而且还可以根据市场的需求组合,价格上也有一定的优势,本系统最终选择ARM的芯片方案来构建音视频处理平台。
1.2 音频频谱显示方案
方案一 利用硬件滤波器和A/D转换器,并用DDS芯片配合FIFO对信号进行采集,通过DDS集成芯片产生一个频率稳定度和精度相当高的信号作为FIFO的时钟,然后由FIFO对A/D转换的结果进行采集和存储,最后送入MCU进行处理。
方案二 直接由32位MCU的定时中断进行信号的采集,然后对信号进行分析。因为32位MCU是50 MHz的单指令周期处理器,所以其定时精确度为20.0 ns,已经远远可以实现本文期望的采样率,而且控制方成本较低,因此选择由MCU直接采样。
方案一实现简单,但硬件成本高,方案二软件和硬件实现都较简单。而这里针对ARM资源多、运算速度快的特点,提出一种切实可行的快速傅里叶变换算法实现频谱显示。因此选取方案二作为音频频谱显示计方案。
1.3 系统控制方案选择
在整个音频处理系统中,采用顺序、循环扫描和定时输出显示的方式来对整个系统控制[4]。软件系统中的各个子程序逐步实现,最后再将所需要的子程序合并,这样就具有编写代码容易、易于移植、维护及开发周期短等特点。最重要的是实现了程序中数据的快速处理输出,使得将来的扩展更加方便。因此选用的主控芯片是SN32F700。
在上述硬件电路设计中,主要着眼于音频信号预处理电路的设计。在实际应用中,音频信号主要来源是咪头、麦克风输入信号或者是播放器输出信号,图3所示是一段电脑播放音乐时声卡输出的音频波形。
从图3可以看到,电脑上的声音信号的电压有正、负两种状态,当直接从电脑上取声音信号时,需要对其进行处理,使采集的电压全为正。下面介绍如何对信号进行处理,可以直接从电脑上取出声音信号,也可以通过采集电路采集外界的声音信号。
2.3 音频预处理放大电路
由于在实际的音频运用中,音频信号会出现电压为负值的现象,而单片机只能识别0和1,对负电平不能处理,因此要对音频信号进行处理,使得音频信号最后的输入达到单片机的电压变换范围,即在AVREFH和AVREFL之间,以便于MCU进行ADC转换。
由于是对声音信号处理,因此选择了对于音频信号具有很低失真率的LM358运算放大器。根据以上分析,设计出的音频预处理电路如图4所示。
图4中电阻R5、R6更具运算放大器中虚短与虚断的特性,即反相端2和同相端3两个输入口的电压和电流相等,R5、R6组成的是一个运算放大电路,(1+R5/R6)是其放大倍数。将输入的负电压信号变成正的电压信号,其原理是串联电阻分压和RC组成的低通滤波器根据输入电压的高低对输入信号进行充放电,使输入信号的电压得到升高。
2.4 音频显示电路
本设计所选用的显示屏LCM是JDL12864G-04。JDL12864G-04模块是点阵液晶显示模块,它主要由行驱动器、列驱动器以及128×64全点阵液晶显示器组成,可以完成图形和8×4个汉字(16×16点阵)。
LCM向用户提供一个标准的LCD显示驱动接口(有4位、8位和VGA等不同类型),用户按照接口要求进行操作来控制LCD正确显示。相比玻璃LCM是一种更高集成度的LCD产品,对小尺寸LCD显示,LCM可以比较方便地与各种微控制器(比如单片机)连接。由于SN32F700的时钟频率是50 MHz,则每秒钟对LCM的可刷新次数为50 M/(128×64×8)=762次,完全满足频谱刷新的频率。LCM12864显示电路如图5所示。
3 系统的软件设计与调试
系统的调试包括硬件平台的调试与系统程序的调试。在每一个工程中,调试都是一个非常重要且十分复杂的环节。
3.1 系统的软件设计
本系统软件程序设计中包含了初始化部分、音频采集部分、FFT运算部分、幅值计算部分及频谱显示部分。每个部分可以清晰地了解程序的流程,使得程序的结构更加简单,对于以后相应的开发可以很好地进行移植[5-6]。
3.2 系统的测试
系统的测试电路是将1 kHz的正弦波作为声音信号输入到电路中,图6是声音信号经过声音采集电路后的显示。其中,信号1是输出,信号2是输入。可以明显看出,信号1与信号2的波形是相反的,相位相差180°。
1 kHz的正弦波输入经过音频采集电路和音频预处理电路后的显示如图7所示。其中,信号线1为输入,信号2为输出,输入与输出方向相同,相位无差别。
本文介绍了基于ARM的音频频谱显示器的设计方法,完成了音频频谱显示器的设计和制作,并对其进行了性能测试。测试结果表明,整个系统能够顺利采集音频信号并进行处理,最终在LCD上显示所采集的频谱图,达到一个较好的性能,实现了预期的效果。
参考文献
[1] 周林,殷侠.数据采集与分析技术[M].西安:西安电子科技大学出版社,2005.
[2] 周立功,王祖麟,陈明计,等.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2008.
[3] 田泽.嵌入式系统开发与应用教程[M].北京:北京航空航天大学出版社,2005.
[4] 李明明,李宏,王晨波.基于FPGA与单片机的音频频谱分析系统设计[J].微型机与应用,2013(1):101-102.
[5] 王春菊.数字式频谱分析仪原理分析[J].标准、检测与仪器,2001(12):95-96.
[6] 吴明晖.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004.