当前位置: 首页 > 范文大全 > 公文范文 >

机车语音录音系统的设计与实现

时间:2022-03-24 09:06:29  浏览次数:

摘 要: 针对机车安全对语音录音系统性能的要求,设计了由ARM微处理器与音频处理芯片组成的嵌入式语音录音系统。介绍了录音系统的硬件设计方案及软件设计要点。基于ARM处理器,应用和音频芯片实现了对语音音频数据流及其控制信号的传输,采用分段缓存技术改进了缓存管理方式,提高了系统处理速度,满足了语音录音实时性的要求。通过实际测试,证明该系统达到了良好的录音效果。

关键词: 微处理器; 音频芯片; 缓存区; 设备驱动

中图分类号: TN919⁃34; TP368.1 文献标识码: A 文章编号: 1004⁃373X(2013)04⁃0016⁃03

0 引 言

机车运行安全关系到旅客人身安全和财产安全,同时影响跌路系统的运行效率,因此研制一套实时性好,使用方便的机车语音录音量系统非常重要。

语音可以采用模拟录音方式,也可以采用工控机进行,前者使用不方便,后者的成本很高[1]。

针对机车语音录音的要求,设计了一种实时性好、录放方便的机车录音系统。系统硬件主要采用基于Atmel公司的ARM处理器和飞利浦公司的音频处理芯片。详细介绍了硬件设计方案,和Linux环境下语音驱动程序的实现方法。

1 硬件设计

硬件系统以AT91系列ARM处理器为核心构建。

1.1 处理器简介

Amtel公司的AT91系列ARM处理器是ARM9处理器为核心,扩展有DSP指令集,内置Java加速器,同时集成有JTAG⁃ICE和UART调试接口,能够实现代码调试,因此基于AT91系列处理器进行系统开发和调试非常方便[2]。

1.2 音频数据总线简介

音频数据总线[3]是INTEL公司定义的一种面向音频处理的系统总线,简称IIS(Intel IC Sound),主要音频数据传输,并提供标准编解码器。

IIS由三条串行线组成:数据线、声道选择线和时钟,而编码、控制等其他信号则另行传送。

1.3 设计方案

基于AT91系列处理器AT91SAM9261和音频芯片UDA1341的总体设计方案如图1所示,其中UDA1341支持IIS,具有PGA(可编程增益)和数字AGC功能。

AT91SAM9261内部具有SSI(串行接口控制器),支持多种串行通信协议,能直接与外部8位或16位的音频芯片相连接。通过设置AT91SAM9261的PDC控制器选择DMA传输模式,从而使语音数据发送和接收可以同时进行。

音频芯片UDA1341有两组音频接口,每组都有VINL2和VINR2左右两个声道,接口与ARM处理器的连接如图2所示。VINR2可以用PGA和AGC对语音信号进行调理,同时可以通过软件编程方法对语音音量的大小进行调节。

在硬件设计中,使用2个DAM通道对语音数据流进行录放。录音时语音数据流由IIS总线通过RD传入,经过DMA通道1存入内部存储器;放音时语音频数据流从内存中通过DMA通道2传入数据寄存器,然后通过TD将数据传给UDA1341TS。由于DMA控制器没有内置的缓存区域,所以需要在驱动程序编写中申请DMA缓冲区,由于需要进行同时进行录放,所以DMA缓存区定义为双缓存结构。

ARM处理器的TK,TF,RD和TD四个接口分别对应连接与语音芯片的BCK,WS,DATAO和DATA1,时钟(SYSCLOCK)则由ARM处理器的PCK2提供。

UDA1341的L3DATA(数据线)、L3MODE(模式选择线)和L3CLOCK(时钟)3个信号为内部L3总线接口,用于传输控制信号。L3MODE与ARM9处理器的PA7 I/O口相连、L3CLOCK与ARM9处理器的PA8相连,L3DATA与ARM9处理器的PA9相连, ARM处理器通用这3个I/O口线模拟L3总线时序和相应的总线协议,对语音处理参数和控制参数进行配置。

2 软件设计

设备驱动程序是Linux操作系统内核的重要组成部分,通过驱动程序用户可以对硬件设备操作。file_operations是Linux设备控制块中重要的数据结构,用于访问硬件设备。用户对设备进行操作时,先通过用户定义的设备号找到相应的设备驱动程序,然后读取file_operations中相应的函数指针,然后把控制权交给该函数。

驱动程序通过硬件控制实现对语音数据流的录制和播放[4]。语音驱动程序提供了2个标准接口:

(1)DSP接口:控制语音的录制或播放。具体定义为:

static struct file_ops speech_fops = {

llseek:speech_llseek, //查找定位

write: speech _write, //播放

read: speech _read, //录制

poll: speech _poll, //选择

ioctl: speech _ioctl, //语音控制接口

open: device_open, //打开设备

release:device_release, //关闭设备

};

(2)混频器:用于对语音进行混音处理。具体定义为:

static struct file_ops mixer_fops = {

ioctl: mixer_ioctl, //混音控制

open: mixer_open, //打开混音设备

release: mixer_release, //关闭混音设备

};

混合器的音效控制通过mixer_fops结构体的指针调用相应的函数来实现。

驱动程序中的DSP接口和混频器设备文件分别定义为dev/dsp,dev/mixer。

2.1 设备初始化

调和初始化主要完成通用I/O口的设置、同步串行控制器的初始化、L3总线的初始化、DMA的初始化和初始化音频芯片的采样频率及音量,并对语音设备进行注册。这些操作都是通过初始化模块module_init( )调用初始化函数uda1341_ init( )来实现的。

2.2 DMA设计

驱序程序中通过双缓冲DMA分段方法,使读写可以同时进行,从而提高了语音的录制和播放速度。若只设置一个DMA缓存区,则在写操作时需要等待缓存区的数据传输完后才能进行后续操作,因此读操作被阻塞,大大降低了语音处理速度。

audio_buf_t和audio_stream_t是管理循环缓存区的两个结构,如图3所示。具体的工作过程是:将申请到的缓存区分成N个块,先写块1,然后再写块2,这样就不管块1的数据是否被传输完,当写完第N个块后,又开始回到第一个,而此时第一个缓存区相当有可能已传输完毕。同时驱动程序还提供了ioctl接口,给上层调用,这样上层可以调用ioctl,根据语音数据流量来调整缓存区数据段的大小和块数(N),以取得最好的传输效果。

2.3 录放操作的实现

设备驱动程序控制语音的录制和播放,是驱动程序的核心。录制和播放操作分别对应于struct file_ops 结构中的speech_read函数和speech_write函数。

录音和播放的实现过程相似,故只对录音过程进行讨论:驱动程序首先配置DMA缓存区,录音时读入语音数据块(大小为count),然后将DMA中的语音数据流按照count大小传送到用户的缓冲区Buffer中。每读完一个块后将块插入到DMA队列中等待下次数据传输。最后驱动程序改变DMA缓存块指针,使其指向下一个DMA块继续读取数据。

2.4 设备的卸载

device_exit()函数用于卸载设备,调用注销函数uda1341_exit()完成。具体过程是:需要注销设备时,首先输入注册设备时所得到的设备号,然后释放驱动程序申请使用的所有资源。

2.5 语音测试

为了测试语音驱动程序工作的正确性,需要使用音频播放器。本文使用mplayer播放器,将mplayer原码在Linux环境下重新编译,然后写入SD卡中,经过Linux的mount指令将mplayer播放器挂载到根文件系统中。在超级终端下输入Linux命令:root@at91sam9261: /mou nt/sd$:./mplayer test.mp3,就会听到播放的声音。超级终端反馈信息如图4所示,其中test.mp3为要测试的音频文件。

3 结 语

本文基于ARM9处理器与音频芯片UDA1341构建机车语音录音和播放系统。文中主要对硬件系统的设计方案、语音录制和播放驱动程序的编写要点和双缓冲DMA分段管理方法进行了仔细说明。目前,该系统已应用于列车电台之间的语音通话录音,实践证明达到了较好的录放音效果。

参考文献

[1] 范新,陈生惠.LY⁃Ⅰ型列车无线调度电话机车电台语音记录装置[J].中国铁路,2001(6):57⁃58.

[2] Atmel Corporation. AT91SAM9261 datasheet rev. 1.09.02 [S]. US: Atmel Corporation, 2007.

[3] 吴平,曹晓琳,丁铁夫.基于ARM和DSP的语音通讯系统设计[J].计算机测量与控制,2005,13(12):1423⁃1426.

[4] 奇浩淳.基于SEP4020的嵌入式音频系统设计[J].计算机工程应用技术,2008(4):964⁃966,968.

[5] 商斌.Linux设备驱动开发入门与编程实践[M].北京:电子工业出版社,2009.

[6] 易红,李晓涛.LY⁃07语音录音装置音频驱动的设计与实现[J].机车电传动,2010(3):24⁃25.

[7] 林永硕.基于USB的音频信号分析仪的设计[J].现代电子技术,2012,35(11):60⁃63.

[8] 王维.基于WinCE的车载电台录音装置的设计[M].北京:北京交通大学出版社,2010.

[9] 刘彦明.嵌入式无线电台检测终端的设计与实现[M].济南:山东大学出版社,2010.

[10] CRAIG Hollabaugh. Embeded Linux hardware software and interfacing [M].北京:电子工业出版社,2003.

推荐访问: 机车 语音 录音系统 设计