1 前言
在日常生活中人们听到的各种声音,其信号强度都是随时间连续变化的,我们称这种信号为模拟信号。传统的声音记录方式是将这种模拟信号直接记录下来,例如磁 带录音和密纹唱片(也称EP唱片)就是将声音拾取处理后以磁记录或机械刻度的方式记录下来,此时磁带上剩磁的变化或密纹,唱片音槽内的纹路起伏变化都是与声音信号的变化相对应、成正比的。记录储存这种模拟声音信号的载体,诸如密纹唱片、盒式磁带等,称为模拟音响软件,而能够播放和(或)记录这些软件的信号 处理设备,诸如电唱机、磁带录音机等,则称为模拟音响设备或模拟音响系统。模拟信号在录制、传输、处理和放大过程中,很容易产生失真和噪声,使得模拟音响软件和硬件的电声技术指标难以大幅度提高[1]。
数字信号抗干扰能力强、无噪声积累。在模拟通信中,为了提高信噪比,需要在信号传输过程中及时对衰减的传输信号进行放大,信号在传输过程中不可避免地叠加上的噪声也被同时放大。随着传输距离的增加,噪声累积越来越多,以致使传输质量严重恶化。对于数字通信,由于数字信号的幅值为有限个离散值(通常取两个幅值),在传输过程中虽然也受到噪声的干扰,但当信噪比恶化到一定程度时,即在适当的距离采用判决再生的方法,再生成没有噪声干扰的和原发送端一样的数字信号,所以可实现长距离高质量的传输[2]。
数字通信的信号形式和计算机所用信号一致,都是二进制代码,因此便于与计算机联网,也便于用计算机对数字信号进行存储、处理和交换,可使通信网的管理、维护实现自动化、智能化。数字通信采用时分多路复用,不需要体积较大的滤波器。设备中大部分电路是数字电路,可用大规模和超大规模集成电路实现,因此体积小、功耗低。便于构成综合数字网和综合业务数字网。采用数字传输方式,可以通过程控数字交换设备进行数字交换,以实现传输和交换的综合。占用信道频带较宽。一路模拟电话的频带为4kHz带宽,一路数字电话约占64kHz,这是模拟通信目前仍有生命力的主要原因。随着宽频带信道(光缆、数字微波)的大量利用(一对光缆可开通几千路电话)以及数字信号处理技术的发展(可将一路数字电话的数码率由64kb/s压缩到32kb/s甚至更低的数码率),数字电话的带宽问题已不是主要问题了[3]。
以上介绍了数字信号具有很多优点,克服了模拟音响技术的缺陷,数字音响技术应运而生,并从本世纪80年代起获得了引人注目的发展。
传统公共广播系统(如校园、公园、商场等)同时只能播放一个节目,因此听众的选择性较小;并且模拟信号在传输的过程中会衰减、易受干扰而增加噪声。随着以太网基础设施日趋完善,数字化信号处理已经成熟。因此本文提出了以太网音箱替代传统模拟广播音响,利用网络传输数字音频,既可以保证音频信号质量,还可以根据应用环境和区域进行单播、组播,使广播内容更有针对性。本项目使用PIC32 Ethernet Starter Kit,利用PIC32 Starter Board PIM Adapter外接DA驱动底板。利用以太网通信传输MP3码流和基于PIC32的高性能软解码MP3文件,利用SPI接口驱动DA输出模拟信号,实现了高效、高质量、低成本的以太网音箱。
2相关技术和原理
2.1相关技术
2.1.1 MP3
MP3全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III)。是当今较流行的一种数字音频编码和有损压缩格式,它设计用来大幅度地降低音频数据量,而对于大多数用户来说重放的音质与最初的不压缩音频相比没 有明显的下降。它是在1991年由位于德国埃尔朗根的研究组织Fraunhofer-Gesellschaft的一组工程师发明和标准化的。
使用PCM信号进行MP3压缩时,以1152个PCM采样值为单位,封装成具有固定长度的MP3数据帧,帧是MP3文件的最小组成单位。在解码时,利用数据帧里的信息就可以恢复出1152个PCM采样值。这1152个采样值被分为2个粒度组,每个粒度组包含576个采样值。一个MP3数据帧分为5个部分:帧头、CRC校验值、边信息、主数据、附加数据。
数据流的同步以及帧头信息的读取MP3数据流的同步以帧为单位,每一帧的帧头都包含同步信息。这个同步信息是连续的12比特的‘1’组成。MP3音频解码过程中的第一步就是使解码器与输入数据流同步。在启动解码器后,可以通过搜索数据流中的12比特长的同步字来完成。在取得同步以后跟着的数据就是帧头信息,包括采样率、填充位、比特率等信息。
主数据的读取在MP3编码过程中使用了比特池技术,所以当前帧的主数据不一定全部都在当前帧中,在解码过程中,必须结合主数据开始指针的值来确定主数据的开始位置。主数据包含的数据有缩放因子、哈夫曼数据及附加数据。这些字段在主数据中有固定的格式。
哈夫曼解码和反量化在MP3编码过程中,根据心理声学模型的输出,对离散余弦变换的输出样本以粒度为单位进行的量化和分配,再对量化的结果进行哈夫曼编码。量化和编码主要是通过循环迭代完成的,循环模块分为三层来描述,最高层为帧循环,它调用外层迭代循环,而外层迭代循环又调用内层迭代循环。但在解码过程中,哈夫曼解码和反量化过程是分开实现的。每个粒度组的频率线都是用不同的哈夫曼表来进行编码的,因此在解码过程中,需要采用不同的解码方法。反量化频谱过程就是基于所得到的哈夫曼解码数据,根据逆量化全缩放公式和帧边信息,对于不同的窗类型采用不同的公式以恢复576个频率线的真实值。
反量化过程中得出的频谱值不是按相同顺序排列的。在编码的MDCT过程中,对于长窗产生的频谱值先按子带然后按频率排列;对于短窗,产生的频谱值按子带、窗、频率的顺序排列。为了提供哈夫曼编码效率,短窗中的数据被重新排列,按照子带、频率、窗的顺序排列。解码时,重排序及时将短窗中的频谱值重新排列。同样,在编码的MDCT过程中,为了得到更好的频域特性,对长窗对应每个子带进行了去混叠处理,为了得到正确的音频信号,在解码时必须对长窗对应的子带进行混叠重建。
逆向离散余弦变换主要是使用逆向离散余弦变换的公式,对反量化得出的信号进行变换。逆向离散余弦变换的计算十分复杂,为了提高效率,可以对计算做一些优化。
频率反转和子带合成频率反转是对逆向离散余弦变换的输出值中的奇数号子带(0到31号子带中的1,3,5,...,31)中的奇数号样本值(每个子带中的 0到17号样本值的1,3,5,...,17号样本值)进行反相处理,用来补偿编码时为提高离散余弦变换效率而进行的频率反转。子带合成滤波器将32个带宽相等的子带中的频域信号反变换成时域信号。子带合成是逆向离散余弦变换后的一个通道中32个子带的样值,经过一系列的计算还原出32个PCM数字音频信号的过程。子带合成过程先将32个子带样值进行逆向离散余弦变换,生成64个中间值,将这64个中间值转入到一个长为1024点的类似先进先出FIFO的缓存,再在这1024个值中抽取一半,构成一个512个值的矢量,再进行加窗运算,最后将加窗结果进行叠加生成32个时域输出。
2.1.2 RTLL
应用程序开发人员可能考虑在他们的应用程序中使用开源的代码组件。开源代码的证书可能要求覆盖特殊代码。这个要求对开发人员的开发或拥有者很不方便。RTLL(Run-Time Library Loading),运行时库载入技术便应用于这种情形下。利用这种技术不会将开源代码链接到主应用程序。它们被另外编译,两者不相互联系。开源程序库是在运行时才会利用载入器将函数指针集合载入[4]。
2.2系统原理
本系统在PIC32 Ethernet Starter Kit硬件基础上,利用PIC32 Starter Board PIM Adapter外接DA驱动底板,构成以太网音响终端设备。由PC作为服务器利用以太网以MP3帧为单位,将MP3音频数据以播放速率传输到以太网音箱终端。在终端中利用PIC32运行网络协议,接收由服务器发过来MP3帧,并解码缓冲到终端的缓冲队列里,保证终端设备的播放流畅。
图1系统原理图
图1中描述了以太网音响的系统原理,描述了以太网音响的各个部分。图2中描述了以太网音响的工作模型。以太网音响工作在局域网中,每个终端节点按需跟服务器相连,索要数据。
图2系统模型图
3硬件设计
3.1 PIC32 Ethernet Starter KIT简介
PIC32 Ethernet Starter Kit[5]是一个非常简单易用,低成本的用于体验PIC3210/100Ethernet等功能的开发工具。PIC32可提供工作频率80MHz的32位MIPS处理器内核、512KB的编程FLASH、32KB的RAM内存以及众多的外围设备。这些设备包括USB控制器、定时器/计数器、串口控制器、A/D转换器以及更多的设备。该板具有大量的I/O接口和电源选项,其中也包括USB电源[5]。它同时还具有与Microchip MPLAB开发软件相兼容的内置编程、调试、下载电路。图3就是本文中所用到的开发板。
图3PIC32 Ethernet Starter Kit实物图
3.2 DAC7512芯片
DAC7512是德州仪器生产的一个DAC芯片。该DAC7512是款低功耗,单向,12位缓冲电压输出的数模转换器(DAC)。其内置的精密输出放大器允许轨对轨摆幅输出。该DAC7512采用了通用的三线串行接口。工作时钟速率最高30MHz,兼容标准的SPI,QSPI,Microwire和DSP接口。
DAC7512的参考电压来自输入电压,从而在可能的最宽的动态输出范围。DAC7512采用了上电复位电路,确保DAC输出上保持在0V直到有一个有效的写操作在设备上。DAC7512包含省电特性,在串行接口访问时,也可以降低电流消耗器件到50nA。正常模式工作的低功耗正好适用于便携式电池供电设备。在5V电压供电时,功率消耗为从0.7mW减少到掉电模式的1μW。
DAC7512可用于 SOT23-6 封装和MSOP-8封装。
图4 DAC7512引脚视图
3.3 PIC3 Starter Board PIM Adapter
以太网音箱中需要用到数模转换,但PIC32 Ethernet Starter Kit中并未有DA和相应的音频输出接口。因此需要使用到一块转接板,然后接插上本次设计中所用的DA输出电路。其实物图如图5所示。
图5 PIC3 Starter Board PIM Adapter
3.4硬件设计
图6描述了三块电路板的连线图,DAC7512的SYNC、SCLK和DIN连接上了PIC32 Ethernet Starter Kit电路板上U1的引脚40、引脚39和引脚50,通过J2连上了MCU PIC32MX795F512L的SPI3的 SS3A、SCK3A和SDO3A。
图6连接图
图7是DA驱动电路图。
图7以太网音箱DA电路驱动图
3.5硬件实物图
从图7中可以看出,左侧为PIC32EthernetStarterKIT实物图,右侧为扩展的EMW-380-C模块。
图8以太网音箱实物图
4软件设计
本系统的整个设计包括以太网音响终端设备软件设计和PC服务器软件设计。以太网音响终端设备实现了UDP数据通信,MP3软解码和DAC 驱动。而PC服务器软件实现了对MP3文件的初步分析,分析提取MP3帧;通过TCP/IP的socket,以MP3帧为最小单位,按每秒26耗描匀速发送给以太网音响终端设备。
4.1PC服务器软件设计
4.1.1通信数据结构设计
PC服务器利用非连接UDP和以太网音响终端设备通信,因此在应用上传输的数据大小不宜超过数据链路层上的最大数据单元。因为,如果超过数据链路层的上最大数据单元,会造成数据在数据链路层上被拆分,而且由于数据在UDP上的不可靠性,会导致由于整批数据中的一个分段丢失导致了整个数据错误,因此应用上传输的最大数据大小应小于数据链路层上的最大数据单元。
上面就是发送的数据结构。usDataHeader是数据包头部分,其高4为该数据的类型:0x1表示该数据的为MP3帧,0x03表示该数据为MP3最后一帧;第27位到第20位为数据序号;第19位到第16位为保留字段;低16位为MP3帧数据大小。ucDataBuffer为MP3数据帧。
4.1.2应用程序界面设计
图9展示了PC程序的主界面,其分别有服务器设置,设置IP地址、端口和音频文件。音频属性中显示了选中音频的相关信息。以太网音响信息,会显示终端设备的IP地址和它的端口号。播放控制和现实中现实了播放间隔和相应的数据包长度,并且可以控制是否发送数据和停止。
图9 PC程序界面
4.1.3应用程序设计
PC服务器可以配置绑定本机网卡地址和端口号。然后选择MP3音频节目,等待以太网终端设备发起数据请求。当收到终端设备发来的连接请求时,将其IP地址和发送数据的端口号记录下来,作为向终端设备发送数据的地址并将该信息现实到PC程序的界面上。
图10PC服务器主程序
图11PC服务器等待请求线程
图12PC服务器发送数据定时器中断
PC服务器在开启时候会运行主界面程序(其流程图如图9所示)和接收终端设备请求线程(其流程图如图10所示)。当用户播放数据之后,程序会运行定时器终端程序,定时发送MP3数据帧。
4.2以太网终端设备软件设计
4.1.1缓冲区数据结构设计
下面是一个数据单元的结构体。ucIndex为数据包序号;uiHeader该数据类型;uiSize为解码的数据个数,数据单位为字节;ucBuffer为MP3解码后的PCM码流;fiInfo为针砭信息。解码后的最大的数据长度为2304,因此将ucBuffer定义最大长度为2400。
考虑到网络的传输的可能出现一些抖动、PC软件定时器的误差和需要给MP3解码预留时间,因此需要在终端设备中缓冲一定的数据量。又由于,MP3音频要实时播放因此不需要缓冲太大的数据量。
在本次设计中,在终端设备里将上面的数据结构定义为20个缓冲区。当数据缓冲解码到数据缓冲区个数的一半时,开始播放PCM码流。
4.1.2以太网终端设备软件设计
以太网终端设备模块有三个分别是EthernetSpeaker.c、EthernetSpeakerPlayer.c和MP3Api.c。EthernetSpeaker.c的功能是负责网络通讯模块,EthernetSpeakerPlayer.c是DA驱动模块,MP3Api.c中包含MP3库载入初始化,和MP3解码函数。
图13以太网音响终端设备程序流程图
图13描述了以太网终端设备程序流程图,通过SW3按键向PC程序发送请求数据。图14中描述了以太网终端设备的SP3 TX空的中断服务程序。
图14以太网终端设备SPI TX空中断服务程序流程图
5总结
本文实现了以太网音响在现有的以太网上可以播放MP3文件,解决了传统模拟广播系统的模拟的信号的缺点。实现了PC服务器匀速发送MP3帧文件,终端设备软解码并实时播放。最后的成品可以在局域网上流畅播放、控制终端设备。设计基本达到了赛前的设计需求。当然,本次设计还是有遗憾和不足之处,遗憾的是由于PIC32不支持I2S,所以只有用SPI驱动DA,导致了只能播放单声道。