音频编解码器是现代数字电话的基石。它是将可听语音转换为数字数据并再次转换回可听语音的组件。本文使用MAXQ3120的A/D通道和外部DAC对标准μ律和A律格式的语音进行编码和解码。这留下了大量的处理能力可用于执行其他与电信相关的功能,例如呼叫进度检测和生成、PCM 成帧和静默信道检测。
介绍
现代电话是数字化的。带有数百个电触点的喋喋不休的Strowger开关,数英里的双绞线电缆,就像扎染意大利面条,以及曾经点缀在乡村的微波塔,已经一去不复返了。如今,语音流量会尽早转换为数字形式,并与数千个其他语音呼叫、电子邮件和网页一起在光纤上进行传输。
数字电话推动了信息时代,并继续通过互联网协议语音(VoIP)等技术改变通信格局。然而,一个事实仍然存在——在这条线的某个地方,语音必须转换为比特,然后比特又转换为语音。
这是编解码器的工作。这个词是编码器/解码器的缩写,设备在概念上很简单。它由一个模数转换器 (ADC) 组成,用于将输入音频转换为比特流,一个数模转换器 (DAC) 将接收到的比特流转换为音频,以及一个接口,用于在可能附加其他编解码器的总线之间插入和移除数字化音频。
通常,编解码器是独立的混合信号半导体。只要编解码器用于简单的应用程序(例如终端交换机的线卡)就可以了。然而,通常需要对传输的音频执行某种预处理(例如峰值限制、动态范围压缩或频谱整形)或对接收的音频进行后处理(例如降噪)。对于独立编解码器来说,这是一个问题,因为一旦模拟音频呈现给(或取自)编解码器,就没有进一步的机会执行处理 - 编解码器直接与 PCM 高速公路接口。在这些情况下,系统设计人员有两个难以处理的选择:要么在模拟域中执行此处理(通常价格昂贵且可能噪声大),要么放弃使用独立的单芯片编解码器,并使用独立的精密ADC和DAC芯片在数字域中执行处理。这两种选择都不理想。 本文介绍了一种将MAXQ3120与外部DAC配合使用的方法,作为语音编解码器,能够对入站和出站位流进行额外的处理。
编解码器基础知识
早在考虑数字电话之前,就已经确定必须保持从约300Hz到约3.5kHz的频率范围才能使语音信号保持可理解性。超出此范围的频率会影响语音信号的保真度,但不会影响清晰度。(事实上,事实证明,带限信号比宽带信号更容易理解。根据奈奎斯特标准,即信号的采样频率必须至少是目标最高频率的两倍,所有语音编解码器都以每秒8,000个样本的速度工作 - 超过所需3.5kHz的两倍 - 并且每个样本都转换为数字码字。
然而,码字的大小带来了一个问题。在任何数字系统中,都需要在信号完整性和字数之间进行权衡。为了获得最佳保真度,系统设计人员可以选择较大的字大小,但更多的位需要更大的带宽,并且带宽需要花钱。或者,设计人员可以选择较小的字大小以节省带宽成本,但语音质量会受到影响。测试表明,小码字(大约八位)可以提供良好的语音质量,但前提是说话者以安静、一致的声音说话。语音音量的正常变化会使发射机饱和,导致削波和失真。人们可以降低增益以消除高电平的这种削波,但正常的声音电平只会使用四到五位,使柔和的声音听起来沙哑和不自然。为了适应各种人声,从最柔和的耳语到最响亮的喊叫,似乎需要十二到十四位的分辨率。
解决方案是使用非线性编解码器(见图1)。这些编解码器利用了这样一个事实,即耳朵对响亮声音中的小错误比对柔和声音中的小错误更宽容。在图中,沉默以零线为中心;柔和的声音仅偏离中心线的一小部分,而大的声音偏离得更大。在这些器件中,零线周围的代码比远离零线的代码更密集,从而使编解码器能够为低电平信号提供可接受的结果,同时保持高电平信号的良好动态范围。
图1.这是典型PCM编解码器的响应曲线。零相对振幅附近的区域包含的代码比曲线末端多得多,使编解码器能够保持高语音保真度和宽动态范围。
在数字方面,有必要与PCM高速公路接口。通常,在公共总线(PCM 高速公路)上将多个编解码器连接在一起,而不是使用一组单独的电线将每个编解码器连接到其关联的中继设备。为了协调传输,编解码器共享一个公共位时钟,并通过单个帧脉冲发出信号以开始发送或接收。在常见的北美标准中,1 个编解码器可以驻留在 PCM 高速公路上,该高速公路由某种类型的序列器逻辑以每秒 544,000,125 位的速度计时。每<>μs,第一个编解码器接收一个帧脉冲,并将<>位发送到高速公路上。在八个位时钟之后,第二个编解码器接收其帧脉冲,依此类推。在所有 <> 个编解码器传输完数据后,序列器提供一位时间用于信令目的,然后重复序列。因此,数字生成如下:
[(8 bits per sample x 24 channels) + 1 signaling bit] x 8,000 samples per second = 1,544,000 bits
per second
PCM 编解码器的类型
世界已经对电话中使用的PCM编解码器的帧速率(以及采样率)进行了标准化。可悲的是,世界几乎没有其他标准化。有两种类型的转码算法需要考虑:在欧洲使用的 A-law 和主要在美国和日本使用的 μ-law。并且有两种基本的线路速率正在使用:美国的DS1(1.544Mb / s)和欧洲的E1(2.048Mb / s)。本文介绍的设计是DS1(也称为T1)编解码器,能够在A定律或μ定律模式下工作。
μ法编解码器根据以下公式对样本进行编码:
其中μ是等式的特征,通常为 255。
A 定律编解码器根据略有不同的公式进行编码:
其中A是方程的特征,通常为87.6;或者在某些情况下,为 87.7。请注意,对于接近零的值,A 律函数是线性的;仅当输入值大于 1/A 时,它才会变为对数。
在实际操作中,这两个压缩定律会产生非常相似的曲线。此外,在实践中,这些线性公式实际上从未使用过。相反,需要分段线性近似来减轻计算开销。但是,此处介绍的设计通过查找表实现了这些确切的公式。
微控制器成为编解码器
MAXQ3120包含两个精密16位ADC通道和一个带16位累加器的16 x 40乘法器。虽然没有DAC通道,但有低成本的精密串行DAC可以满足这种能力。剩下的就是构建软件来连接这些外围设备。
编码
编码有三个步骤:将模拟信号转换为数字信号,对数字化样本进行重采样和滤波,最后使用 A 律或μ律转码将样本压缩为 8 位表示。
首先是A/D转换步骤,这也是最简单的,因为MAXQ3120内置了ADC通道。MAXQ3120每16μs产生一个新的48位结果。这意味着系统在384MHz的处理器时钟上有8个指令周期来处理样本。
幸运的是,处理样本很简单,只需读取ADC并将数据存储在循环缓冲器中即可。缓冲区始终包含 32 个最新的 16 位样本。MAXQ3120包含256个16位字RAM;因此,循环缓冲区仅消耗单个通道可用RAM的12.5%。
虽然ADC每48μs产生一个样本,但通信网络每125μs需要一个新的样本。因此,无论我们对信号做什么,都必须对其进行重新采样。一种简单的方法是,当接收到帧脉冲时,只接受最新的采样进行转换,而丢弃所有其他样本,但MAXQ3120可以做得更好。
在每个帧脉冲上,编解码器软件开始对循环缓冲器中的累积样本施加31抽头FIR滤波器。该滤波器在3.3kHz时具有5db点,因此提供抗混叠和额外的重建功能,从而降低ADC通道中的噪声。滤波器过程的结果是 16 位样本,可用于 A 律或μ法压缩。
表 1.前十个μ法和A法法典
法典 | μ法 | A-法律 |
0 | 0000 | 0000 |
1 | 0005 | 000F |
2 | 000乙 | 001F |
3 | 0011 | 002F |
4 | 0018 | 003F |
5 | 001F | 004F |
6 | 0026 | 005F |
7 | 002D | 006F |
8 | 0035 | 007F |
9 | 003D | 008F |
有几种方法可以将值从 16 位线性转换为其代码;直接计算和分段近似是两种流行的方法。我们没有使用这两种方法,而是利用MAXQ3120相对较大的程序空间,设置两个128字表,一个用于μ律编码和解码,另一个用于A律。启动时,将轮询外部引脚,并根据该引脚的级别将其中一个表加载到 RAM 中。编码过程的操作如下:
取 16 位线性 PCM 样本的绝对值。跟踪符号位。
现在对适用的表执行二叉搜索:将 PCM 样本与表的中间值进行比较。如果小于中间值,则仅考虑表的下半部分;如果大于中间值,则仅考虑上半部分。重复此步骤,直到只剩下两个表条目,然后选取最接近的表条目。
要发出的代码是表条目的索引。例如,如果样本值0x006D并且转换为 A-law,则上表中最接近的值将是 0x006F。其指数为7;这是要发出的代码。
最后,应用原始样本值的符号。 生成的八位数字是对数 PCM 值。然而,这还不是结束。网络上发出的 PCM 值不仅仅是二进制补码值。相反,每个转码法都有适用的特殊规则。
对于μ法:
负数具有零号位;正值有一个符号位。
幅度值反转:因此,0 由 11111111b1 表示,而 +0 由 11111110b<> 表示。这保证了传输流中大量的一位(许多类型的物理层传输机制仅在一位上具有电平转换;因此,高数量的一位使时钟恢复更容易。
有一个“正零”值和一个“负零”值,分别由0b11111111和0b01111111表示。
最大的负数是 -127,用 0b00000000 表示。但是,为了保持时序完整性,许多系统不允许全零值,这些系统通过反转位1自动阻止全零码。这使得代码流发生了不可逆转的更改(0b00000000 变为 0b00000010),但对于音频传输,它不会对感知声音产生太大变化 - 两个代码都非常响亮!(此设计不执行此功能,但很容易进行更改。
对于A法:
就像在μ定律中一样,负数有一个零号位。
就像在μ定律中一样,有一个“负零”值和一个“正零”值,分别由 0b00000000 和 0b10000000 表示。
在传输之前,每个A定律单词都与0x55进行异或运算;有效地反转字节中的其他位。与μ定律的反转一样,这保证了高密度,使时钟恢复更容易。
译码
解码八位PCM样本比编码容易得多,因为无需对信号进行重新采样。应用 PCM 法律规则后,将保留一个 16 位有符号量级值。将该值用作适用 PCM 表的索引(考虑登录);结果是一个 <> 位有符号值,可以传送到 DAC。
本项目选择的转换器是MAX5722双通道DAC。这是一款 12 位 DAC,采用经济型 5722 引脚 μMAX 封装。与大多数DAC一样,MAX1需要外部电压基准。幸运的是,MAXQ25上有一个3120.<>V带隙基准,适合此目的。
MAX5722为串行接口DAC,这意味着微控制器必须创建适合DAC的串行流。DAC接口是同步的,因此不需要连续时钟,只需要片选低时的时钟。这允许仅使用微控制器的通用I/O使用三线接口。
请注意,在本设计中,ADC通道的输入范围为-1.0V至+1.0V,而DAC输出通道的输入范围为0.0V至+1.25V。在实际的电信应用中,例如线卡,这些电平可能会转换为其他模拟电平(例如,通常将1Ω阻抗中的600mW定义为0dBm,这是电信网络中通常遇到的最大电平)。
PCM 总线
现在我们知道了如何将模拟波形转换为压缩的PCM格式并返回,只剩下一个问题:与PCM总线接口。
大多数情况下,与PCM高速公路的接口涉及连接到四线总线:终端将数据放置在其上的传输数据线;中继设备在其上放置数据以及终端接收数据的接收数据线;通常对每个终端唯一的帧同步线,当总线包含用于该终端的数据时,该同步线会发出脉冲以指示;还有一个位时钟。由于我们的编解码器旨在作为终端设备,它将接收位时钟和帧脉冲,在接收数据线上接收数据,并在发送数据线上传输其数据。
在T1系统中,时钟运行在1.544MHz。这意味着当帧脉冲到达时,我们必须在短短几个时钟周期内非常快速地做出响应。一位时间略高于625ns,或五个指令周期。由于此时间远小于典型的中断延迟(当考虑中断、上下文保存和开销时),因此仅用中断响应帧脉冲信号还不够快,必须找到另一种解决方案。
该方案是使用MAXQ3120中的三个定时器之一,在帧脉冲到达前几微秒中断处理器。然后,当帧脉冲最终到达时,处理器已被中断,已保存其上下文,并准备将每个周期专用于 PCM 总线任务。它的工作原理如下:设置一个计时器在 110μs 后过期。在所有位移出后,在每个帧事件结束时启动计时器。在T1系统中,两个样品在10.4μs内移出。当定时器中断处理器时,软件立即开始寻找帧脉冲的前缘。这是系统中唯一的中断。其他所有内容都会被轮询,并且可以等到将 PCM 数据上下总线的重要任务完成。
一旦帧脉冲到达,处理器就会保持非常繁忙的状态。它必须移动发送缓冲器并将输出位写入端口,然后在五个周期内读取输入位并移位接收缓冲器。MAXQ3120在<>个周期内完成此操作。
您可能会注意到,此讨论以 T1 总线为中心,但 E1 呢?在2.048MHz时,E1系统每比特仅允许略高于488ns或少于四个指令周期。因此,E1 PCM 总线的管理需要外部硬件的帮助。例如,由位时钟驱动的廉价移位寄存器将减轻位电平时序的严格要求。
附加功能
编解码器已完成。但是,由于独立编解码器价格低廉且数量丰富,因此从微控制器构建编解码器是没有意义的,当然,除非作为设计师,您别有用心。以下是一些可能促使设计人员考虑此类系统的想法:
预过滤当信号采用线性PCM格式时,这是对信号应用均衡、动态范围压缩、噪声门控或任何其他操作的绝佳机会。虽然MAXQ3120不是传统意义上的DSP,但这些功能很容易在处理器可用的马力范围内。
带内信令提取高效、简单的算法可用于检测线性 PCM 流中的带内音调。可以利用这些算法来检测DTMF数字,并使用这些算法来实现某些特性和功能。还可以使用音调检测,通过精确检测拨号音(在北美,350Hz + 440Hz)、站铃(440Hz + 480Hz)和忙音(480Hz + 620Hz)来确定呼叫进度。
会议桥将通道 1 的接收音频混合并将其与通道 2 的传输音频组合在一起很简单,反之亦然。通过这样做,您有效地为两个渠道创建了一个数字会议桥。由于网桥是数字的,因此不会损失语音质量。如果希望桥接两个以上的通道,只需添加更多的MAXQ3120器件即可。
结论
虽然MAXQ3120并非专门针对电信行业,但其片内精密ADC和DSP功能为设计人员提供了广泛的机会来创建定制的硬件和软件解决方案。各种开发工具的可用性使设计任务变得简单。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !