基于UCOSIII系统的音频信号分析设计与实现
2018-07-25胡永兵姚梦茹
李 慧,胡永兵,姚梦茹
(安徽大学 计算智能与信号处理教育部重点实验室,安徽 合肥 230601)
0 引 言
数字电视、多媒体通信、数字音频广播等对科技的发展产生了深远的影响,并且已经广泛地渗透到社会生活的各个方面。早期的音频分析仪器设备不但体积大、反应速度慢、结构复杂,而且造价非常昂贵,在某种程度上难以普及使用[1-4]。随着电子技术的发展,嵌入式技术和超大规模集成芯片技术越来越成熟,同时对音频信号的分析也越来越精确。
针对传统方法在音频信号处理中的缺点,文中提出了一种对音频信号分析设计的方案。在硬件设计上,以STM32F103ZET6低功耗的32位单片机作为运算核心,结合A/D转换器、外部电路LCD显示模块和其他必需的外部电路。在软件设计上,使用了UCOSIII嵌入式多任务系统,实现多任务运行。其基本工作原理是对音频信号进行快速傅里叶变换,把时域信号转化为频域信号,通过UCOSIII系统,在录音播放的同时显示频谱变化。其中模拟音频信号经过A/D转换前需要先放大然后再滤波,这样能保证音频信号不失真、降低噪声干扰。
1 系统设计
模拟信号通过放大和滤波前级电路,经A/D转换、录音到SD卡,再经STM32进行FFT运算后播放信号,同时在液晶屏上显示频谱。单片机使用的是32位低功耗STM32F103ZET6,该芯片具有64 KB SRAM、2个基本定时器、4个通用定时器、3个12位ADC、1个12位DAC等[5-7]。系统框图如图1所示。
图1 系统框图
1.1 前级信号调理电路设计
为了增加AD位数并使A/D量化范围内的量化精度最高而获得动态范围较大的输入信号,在A/D转换前需要处理输入的音频模拟信号。设计上要求100 dB的输入信号动态范围,幅度范围为0.01 mV~10 V。设定ADC,500 mV为芯片的最小输入信号峰值。由于输入信号的幅度最大为10 V,设定ADC 20lg(10
V/500 mV)的动态输入范围,即为26 dB,所以需要62 400,8 000,400,200,1这5路放大倍数固定的放大电路,使得输出信号的电压不超过3.3 V。STM32103常用电压为3.3 V,其中内部ADC的电压也为3.3 V,因此选择了AD公司生产的运放AD8656芯片,选择该芯片是因为放大小信号的增益和放大器输出主要参数的影响。该芯片的低压提供低噪声10 KHz时为2.7 nV/Hz1/2,280 MHz的运放增益带宽,10 pA的输入偏置电流,低失调电压最大为250μV。
1.2 抗混叠滤波器的设计
当采样频率满足大于等于最高频率的2倍时,可以不失真地恢复出原模拟信号。如果不满足上述采样定理的条件,即采样频率小于信号最高频率的2倍,或信号的实际最高频率超过了二分之一的采样频率,则在采样后的信号频谱上会发生频谱混叠现象。这时,即使使用理想的矩形低通滤波器也无法不失真地恢复出原模拟信号,因此这种失真现象称为频谱混叠失真。当确定采样频率后,就必须限制原模拟信号的上限频率,这样是为了防止产生频谱混叠失真。通常设计的音频信号的频率在20 KHz以下,因此,设置一个上限频率合适的低通滤波器在把信号送到A/D转换之前是为了进行抗混叠处理,防止采样的频率是高频信号的分量而产生频谱混叠从而影响给定的较低频率信号的幅值分析[8-10]。由于巴特沃斯滤波器在性能方面没有明显的缺点,而且设计简单,对构成滤波器的元件的Q值没有明显的要求,为此设计了一个四阶巴特沃斯低通滤波器,截止频率为20 KHz的抗混叠滤波器。通常高阶滤波器可由多个低阶滤波器构成,所以在设计中,四阶的低通滤波器由两个二阶巴特沃斯低通滤波器构成,如图2所示。
图2 抗混叠滤波器的设计
1.3 音频解码芯片
采用VS1053解码芯片,该芯片有一个高性能的DSP处理核VS_DSP、16 KB的指令RAM、0.5 KB的数据RAM,通过SPI控制,具有8个可用的I/O口和1个串口,芯片内部还带了一个可变采样的立体声ADC,一个高性能立体声DAC及音频耳机放大器。模拟音频信号通过前级信号调理电路后,通过SPI口,芯片VS1053接收输入进来的音频模拟信号流,经过A/D转换将其编码成数字信号存储到SD卡。接着,经D/A转换解码后从左右通道输出音乐之前,SPI口不停地向VS1053输入音频数据,再经过功放后被人们听到。其中需要系统配置来控制播放音频信号。首先,VS1053需要恢复成原始状态,需要硬复位和软复位配置。接着,需要配置模式寄存器,时钟寄存器,音调、音量寄存器等相关寄存器,最后发送音频数据,播放音乐[3]。
2 系统软件设计
2.1 uCOS实时操作系统
严格要求正确的处理结果和及时处理过程的系统就称为实时系统。其中,硬实时和软实时是实时系统的两大类,大多数的实时系统是嵌入式的。这类系统是针对航空航天、工控等对响应时间有严格要求的应用场合而产生的,在这些场合中,传统的PC及其相应的操作系统是无法胜任的。
由Micrium公司开发的UCOSIII系统是一种可裁剪、可固化、可剥夺的第三代微型实时操作系统,其中任务调度、任务通信、内存管理、中断管理、定时管理等是该系统的特性。在运行系统设备上,当程序执行时,首先会初始化系统任务管理所需要的各种链表等数据结构,其次,根据需要设计的应用程序来创建任务,最后由调度器管理各个任务,而中断可由操作系统使能和除能,若使能中断,则可以在其他任务运行时跳转到中断服务程序[11-15]。由于UCOSII系统每个任务优先级的任务个数只能是一个而且不支持时间片轮转调度,所以该设计采用了UCOSIII系统。
2.2 软件设计和流程图
在软件设计上,使用了嵌入式UCOSIII实时操作的多任务系统。任务就是死循环。该系统支持多任务操作,最大不超过255个任务,操作系统对这些任务进行调度管理。在任务根据优先级不断执行的过程中,CPU的使用权在多个任务中不停变换,多任务管理实际上就是最大化利用了CPU。软件设计编写了四个任务,即频谱显示任务,音频录音播放任务,LED0、LED1任务,这些任务每一个都有自己的任务堆栈和优先级,其中频谱显示任务和音频播放任务的优先级是一样的。按照任务优先级,操作系统调度这四个任务。然后通过开始任务创建自己的任务,接着挂起开始任务。系统设计流程如图3所示。
图3 系统设计流程
2.3 uC/OS-III的移植
嵌入式UCOSIII操作系统的移植就是指能使UCOSIII在微控制器或者某个微处理器上运行。UCOSIII的移植[16]步骤如图4所示。
图4 移植步骤
3 测试结果
将编译后的代码下载到STM32103开发板中,结果显示LED0开始闪烁,灭的时间比亮的时间长,设置灭500 ms、亮200 ms;LED1均匀闪烁。接着,打开串口调试,接收到操作系统发送的数据,float_num的值在增加,每次增加0.01,这和在程序中设置的每次增加0.01相符,说明UCOSIII移植成功。通过软件编写,程序调试下载的结果:LED0与LED1任务中每间隔200 ms DS0亮一次,间隔500 ms DS1亮一次,接着DS0和DS1同时亮,依次循环。
音频模拟信号先经过放大与滤波前级电路,之后通过A/D转换,经STM32使用FFT算法,录音到SD卡中,利用UCOSIII嵌入式多任务操作系统,在同一优先级音频播放与频谱显示同时发生,其实验结果如图5所示。
图5 频谱显示
4 结束语
采用了多任务内核的实时嵌入式UCOSIII系统,由于该系统对多任务进行调度使得系统代码量有效减少,系统的实时性也有很大提高,实现了CPU资源利用的最大化。在这个过程中,增强了应用程序开发系统的模块化,实现了复杂的实时应用。同时,UCOSIII嵌入式多任务系统运行稳定,实现多任务在同一优先级下发生。当然该设计还有不足之处,在后续的研究中将进一步完善。