新闻中心

EEPW首页 > 网络与存储 > 设计应用 > 在MAXQ3120上实现CODEC应用

在MAXQ3120上实现CODEC应用

——
作者:时间:2007-01-26来源:《Maxim 》收藏

引言

今天的电话已数字化。而在过去,它往往意味着咔嗒作响的、包含数百个电气触点的史端桥式开关,数英里的双绞线电缆就象多彩的意大利面条,星罗棋布于乡村野外的微波塔。今天,话音业务在最开始的时候就被转换成了数字形式,并和成百上千的其他话音、电子邮件和网页等信息一同,由一条光纤传输。
数字电话催生了信息时代,并继续以新的技术,如因特网话音(voip),改变着通信工业的前景。然而,有一个事实没有变 - 必须在线路上的某个点,将话音转换为数字,并将数字转换回话音。

本文引用地址:http://www.eepw.com.cn/article/21131.htm

这正是codec (编解码器)的工作。这个名称是coder/decoder (编码器/解码器)的缩写,是一种概念上非常简单的器件。它包含一个模拟到数字转换器(adc),用于将音频转换为位流;一个数字到模拟转换器(dac),用于将收到的位流转换回音频;和一个接口,用于和其他codec共享总线,并通过总线插入和取回数字化的音频信息。

通常,一个codec就是一片独立的混合信号半导体器件。对于简单应用,这种方案能够很好地工作,例如端局交换机中的线卡。然而,很多时候我们还希望对要发送的音频信号作一些预处理(例如限幅、动态范围压缩或频谱整形等),或对收到的音频信号作一些后处理(例如噪声抑制)。对于独立式codec而言,这些处理任务比较难以实现。这是因为模拟音频信号一经codec转换,就再也没有机会作进一步地处理了 - 独立式codec直接连接到了pcm干线。这种情况下,系统设计者就只有两种很笨拙的选择了:或者在模拟域执行这种处理(通常很昂贵且可能引入噪声),或者放弃使用这种独立式的单片codec,而改用独立的精密adc和dac芯片,并在数字域进行处理。这两种方式都不理想。本文给出一种新的方案,它采用maxq3120微控制器和外部dac作音频codec,同时能够对入站和出站位流进行额外的处理。


codec基础

在数字电话还很遥远的时候,人们就认识到保持一个话音信号清晰可辨的必要频段大约为300hz至3.5khz。此范围之外的频率对于语音信号的保真度有贡献,但对于清晰度无益(事实表明,限制带宽的信号比宽带信号反而更易于辨析)。根据nyquist定律,对于信号的采样率必须至少为其最高频率的两倍,因此所有话音codec都工作于每秒8,000个采样 - 多于所要求的3.5khz的两倍 - 每个采样都被转换为一个数字化的码字。

然而,码字的长度又带来另一个问题。在任何数字系统中,都必须在信号的完整性和字长间做出妥协。为获得高保真,系统设计者应选择较大的字长,但位数越多带宽越高,而带宽是要付出成本的。另一方面,如果设计者选择较小的字长以节省带宽成本,话音质量就会有所损失。实验表明较小的字长 - 大约八位 - 也可以提供较好的话音质量,但前提是讲话者必须是在安静的环境中用恒定的话音讲话。这种情况下正常的音量变化就会造成发送器饱和,导致箝位和失真。降低增益当然可以消除高音量时的箝位问题,但正常音量可用的位数却减少至四到五位,使比较轻的话音听起来有刮擦声且不自然。为了适应人类话音的整个范围,从最轻的低语到大声的喊叫,看起来有必要采用十二到十四位分辨率。

最佳方案是非线性codec (见图1)。这种类型的codec利用了这样一件事实:我们的耳朵对于响亮声音的小误差更“宽容”,而对于微弱声音的小误差很敏感。图1中,静默状态位于零线附近;轻微的话音相对于中心线有小量偏移,而响亮的话音偏移较多。在这样的器件中,零线附近的编码密度高于远离零线处的编码密度,使codec既能为低电平信号提供满意的性能,同时为高电平信号提供足够的动态范围。


图1. 典型pcm codec的响应曲线。在零相对幅度附近的区间编码密度高于曲线端点处,使codec既保持了话音的高度清晰,又具有很宽的动态范围。

在数字侧,器件必须与pcm干线接口。各codec并不是通过单独的一组线连接到其相应的中继设备上,而是一定数量的codec一同被连接到一条共享的总线 - pcm干线上。为了协调传输过程,这些codec共用一个位时钟,而用单独的帧脉冲指挥每个器件开始发送和接收。按照北美标准,24个codec共享一条pcm干线,某种类型的时序器逻辑以1,544,000位/秒的速率控制着其运行节奏。每过125μs,第一个codec收到一个帧脉冲并发送八位数据到干线上。8个位时钟后,第二个codec收到其帧脉冲,依此类推。所有24个codec发完数据后,时序器提供一位的时间用于传送信令,然后重复上述过程。这样,总的数据量为:


[(8 bits per sample x 24 channels) + 1 signaling bit] x 8,000 samples per second = 1,544,000 bits per second

pcm codec的类型
用于电话的pcm codec已有了全世界统一的帧速率(采样率)。不幸的是,在其它方面几乎没有统一的全球标准。常用的编码方案有两种:用于欧洲的a率和主要用于美国和日本的μ率。有两种基本线速率正在使用:美国的ds1 (1.544mbps)和欧洲的e1 (2.048mbps)。本文所讨论的设计为ds1 (或称为t1) codec,工作于a率或μ率模式。
μ率codec按照以下规则对采样信号进行编码:

其中μ是本规则的特征参数,典型为255。

a率codec的编码方式略有不同:

其中a是本规则的特征参数,通常为87.6,有些情况下为87.7。需要注意的是,当接近于零时,a率函数是线性的;只有当输入大于1/a后它才变为对数。

在具体实践中,这两种压扩率所形成的曲线非常近似。并且,实际应用中从未使用这些线性公式。为了减轻运算开销,常常采用分段线性逼近的方式。然而,在本设计中,我们通过查表的方式严格按照这些规则来做。


将一个微控制器变为codec
maxq3120包含有两个精密的16位adc通道、一个16 x 16乘法器以及一个40位累加器。虽然maxq3120不含dac通道,有很多低成本的精密串行dac可用于此功能。剩下的工作就是构建一个软件来连接这些外围器件。

编码
可通过三步完成编码:转换模拟信号为数字量,对数字采样进行再抽样并滤波,最后,用a率或μ率编码转换方式压缩采样至八位。
第一步是a/d转换,最容易实现,因为adc通道已内置于maxq3120。maxq3120每48μs产生一个新的16位转换结果。这意味着对于8mhz的处理器时钟,系统可以有384个指令周期来处理采样。

幸好,采样的处理只是简单地读取adc并将数据存储于一个环形缓冲器。缓冲器总是保存着32个最近的16位采样结果。maxq3120有256字的16位ram。这样,每个通道的环形缓冲器仅消耗全部可用ram的12.5%。

adc每48μs采一个样,但通信网络每125μs需要一个新的采样。因此,无论我们如何处理信号,都必须对其进行再抽样。最简陋的方法之一就是,当收到一个帧脉冲时,只接受最近的一个采样来做进一步的转换,而扔掉所有其他采样。不过maxq3120还能够做的更好。

每收到一个帧脉冲,maxq3120的codec软件对环形缓冲器中汇集的采样实施31抽头fir滤波器算法。该滤波器的3db截止点位于3.5khz,可提供抗混叠和进一步的采样重构功能,降低- adc通道的噪声。经滤波处理后的结果是一个16位采样,可用于a率或μ率压缩。

有多种方法可以对16位线性编码进行压缩。直接计算和分段逼近是两种常用方法。在本设计中我们并没有采用这两种方法,而是利用maxq3120程序空间较大的特点,建立了两个128字的表格,一个用于μ率编码和解码,另一个用于a率。首先,查询一个外部引脚的电平状态,根据该引脚的电平,将两个128字表格中的一个载入ram。编码过程的操作如下:

获取16位线性pcm采样的绝对值。并保持对符号位的跟踪。

在所采用的表格中执行对分检索:比较pcm采样和表格的中间值。如果pcm采样小于中间值,只考虑表格的下半部分;如果采样大于中间值,则只需考虑上半部分。重复上述操作,直至仅剩下两个表格项,选择最接近的一个。

压缩后的编码实际上是表格项的索引号。例如,如果采样值为0x006d,采用a率压缩,上述表格中最接近的值为0x006f。其索引号为7;这正是压缩后的编码。

最后,沿用原始采样的符号位。得到的8位码是对数pcm值。然而,这还没有结束。发送到网络的并不是简单的二进制补码。每种编码规则都有一套特殊的处理方法。

对于μ率:

负值符号位为“0”;正值符号位为“1”。

幅值采用反码。因此,零表示为0b11111111,而+1表示为0b11111110。这是为了保证发送数据流中有大量的“1”位。(很多类型的物理层传输设备仅在“1”位有电平跳变;因此,大量的“1”位使时钟恢复更容易。)
有“正零”和“负零”之别,分别表示为0b11111111和0b01111111。

最大的负数为-127,表示为0b00000000。然而,为保持定时的完整性,许多系统不允许全零值。这些系统通过自动对第1位取反来阻止全零码的出现。虽然这会给码流造成不可恢复的变化(0b00000000变为0b00000010),但对于音频传输而言,它在听觉上造成的变化微乎其微 - 两种码所表达的声音都非常响!(本设计中未执行该功能,尽管实现很简单。)

对于a率:

和μ率一样,负数符号位为零。
和μ率一样,有“负零”和“正零”之别,分别表示为0b00000000和0b10000000。
传输之前,每个a率字被0x55“异或”,相当于对编码字节隔位取反。和μ率中的取反类似,也可以确保高密度的“1”,使时钟恢复更容易。
解码
解码8位pcm采样要比编码容易得多,因为无需对信号进行再抽样。经过适当的pcm编码规则处理后,得到一个8位、带符号的幅度值。以这个数值为索引,检索相应的pcm表格(同时考虑符号),得到一个16位、带符号的数值,可直接送给dac。

为本项目选择的转换器是max5722双通道dac。这是一款12位dac,采用低成本8引脚μmax封装。和大多数dac一样,max5722需要一个外部基准电压源。正好,maxq3120上的1.25v带隙基准源适用于此目的。

max5722是一款串行dac,这就意味着微控制器必须以串行方式和dac通信。dac接口是同步的,因此无需连续为其提供时钟 - 只有当片选为低时才需要提供时钟给它。因此可以利用微控制器的通用i/o组成一个3线接口与其通信。

在本设计中,注意到adc通道的输入范围为-1.0v至+1.0v,而dac输出通道的范围为0.0v至+1.25v。在一个真正的电信应用中,例如线卡,这样的信号电平很可能还需要转换为其他模拟电平(例如,电信网络中通常能遇到的最大电平为0dbm,即对600阻抗输出1mw)。如果在你的应用中必须保持输入、输出电平相等,请参考max5722数据资料中关于产生双极性输出的详细说明。

pcm总线

现在,我们已经知道了如何将模拟信号转换为压缩的pcm码,或者反之,余下的就一个问题了:与pcm总线的连接。

大多数情况下,与pcm干线的连接涉及一条四线总线的连接:一条发送数据线(终端发送其数据到这条线);一条接收数据线(中继设备发送其数据到这条线,终端从中取回数据);一条帧同步线(每个终端独占一条,其上脉冲指示何时总线上载有用于该终端的数据);以及一条位时钟线。我们的codec旨在用于终端设备,它接收位时钟和帧脉冲,从接收数据线接收数据,向发送数据线发送数据。 在t1系统中,时钟工作于1.544mhz。这就意味着当一个帧脉冲到来时我们必须非常快地响应(几个时钟脉冲内),一位所占时间略大于625ns,或五个指令周期。由于这个时间远小于通常的中断响应时间(考虑现场保护和其他中断响应时的开销),简单地以中断方式响应帧脉冲信号速度不够 - 必须考虑其他方案。

我们的方案是,采用maxq3120三个定时器中的一个,超前预期的帧脉冲到达时间几个微秒中断处理器。当帧脉冲到来时,处理器已被中断,并完成现场保护,已准备好投入每个时钟周期来执行pcm总线任务。其工作如下:设置定时器溢出间隔为110μs。在每一帧所有数据位被移出,帧事件处理完毕后启动定时器。以t1系统为例,在10.4μs要移出两个采样的数据。当定时器中断处理器后,软件立即开始监视帧脉冲的前沿。这是系统唯一的中断。所有其它事务都工作于查询方式,且要等待最重要的任务(通过总线收发pcm数据)完成后方能着手处理。

帧脉冲到来时处理器会非常忙碌。它需要移位发送缓冲器并将要输出的位写到合适的端口;接着在五个周期内读取一个输入位并移位接收缓冲器。maxq3120能够非常精确地在5个周期内完成这些任务。

你或许已注意到,这里的讨论只聚焦于t1总线,那e1的情况又如何呢?工作于2.048mhz的e1系统每一位的时间只略大于488ns - 少于四个指令周期。因此,e1 pcm总线的管理有赖于外部硬件。例如一片廉价的、由位时钟驱动的移位寄存器,就可将处理器从苛刻的位级定时解放出来。


额外功能

我们的codec完成了。然而,专用codec已非常廉价且供应充足,因此,除非有特别动机,否则,用微控制器搭建codec将无任何意义。以下是一些可能促使设计者考虑该系统的想法:

前置滤波 当信号还是线性pcm格式时,我们有非常好的机会来对其进行均衡、动态范围压缩、噪声抑制或大量其他类型的信号操作。虽然maxq3120并非传统意义上的dsp,凭借该处理器的能力,还是能够轻松应付这些功能的。
带内信令提取 在线性pcm码流中探测带内音的高效、简单算法很容易找到。可以将这些算法拓展为探测dtmf数字信号,并用它们实现一些特定的性能和功能。利用该算法精密监听拨号音(北美为350hz + 440hz)、振铃(440hz + 480hz)和忙音(480hz + 620hz),我们还可以知道一次通话的进程情况。
会议电话桥分器 可以非常简单地对通道1接收的音频信号进行混合,并将其与通道2发送的音频相组合,反之亦然。通过这种操作,你实际上等效于实现了一个两通道的数字会议电话桥分器。由于是数字桥,话音质量没有损失。如果希望桥接两个以上通道,只需简单地增加更多maxq3120器件。

结语

虽然maxq3120并不是专为电信类应用设计,其片上精密adc和dsp功能却为设计者带来了广阔的机会,很容易用它们实现用户化的硬件和软件方案。各种各样唾手可得的开发工具简化了设计任务。





关键词:

评论


相关推荐

技术专区

关闭