admin 管理员组

文章数量: 887021


2024年2月20日发(作者:javajdk哪个版本稳定)

Audio Codec的必要性

在理想状况下,对于录音过程,只需要将麦克风获取到的analog信号通过ADC转换为digital信号并存储即可,对于播放音过程,只需要将digital信号通过DAC转换为analog并输出到speaker播放即可。

但在实际的过程中,对于录音过程而言,会受到外界声源的干扰,麦克风自身对信号的衰减以及物理链路接口上引入的杂音等因素的影响,对于放音,可能会受digital数据本身的问题等因素的影响。

举个简单的例子,拿着手机或者固定电话和别人讲话的时候,虽然一边自己说话,一边听电话另外一端的人讲话,但是从听筒中并没有非常明显的听到自己的讲话声音。这中间就是一些Audio Codec在起作用,它们可以实现回音消除,噪音抵消,以及ALC/Limiter等,当然它也实现了最重要的AD和DA功能。

ALC(automatic level control)

不知道怎么来翻译这个词语,姑且称之为动态电压控制。

通过检测系统中的analog信号来判断是否超过Codec中设定的Max/Min值,如果超过的话,则去根据设定的attack rate和release rate来调整analog的电压,以达到使其介于一个合理范围内的目的。

所谓的attach rate其作用的过程就是增益增大(电压降低)的过程,而release rate则是增益减小(电压增高)的过程,如下图所示:

从图中可以看到,对于超过Max强度的电压,通过调整attach过程将其降对于一般的Codec芯片而言,使用ALC功能的时候都要去配置Max/Min的低,反之则通过release将其增大。

threshold(db)值,以及Attach rate和Release Rate(快or慢)。

实际使用过程中,ALC功能所能够达到的效果如下图:

Limiter

不知道应该怎么翻译这个词。

与ALC类似,Limiter也是去检测analog信号的强度,当大于用于设置的threshold的时候通过直接对信号进行截断处理,也有的Codec不是野蛮的进行截断处理,而是采用类似ALC调整Gain的方法来调整analog信号的强度。

例如max9756中Output Limiter的效果图如下:

注:

个人理解,Limiter的效果比起ALC来说相对差一些,可能是内部硬件实现的决定了这点吧,前者可能是一种相对Cost-down的方案。

HPF(Digital High Pass Filter)

即为数字高通滤波的意思,实现的功能就是使高频率信号通过,而低频率信号被衰减。引文描述为:

A high-pass filter, or HPF, is an LTI filter that passes high frequencies

well but attenuates (i.e., reduces the amplitude of) frequencies lower

than the filter's cutoff frequency. The actual amount of attenuation for

each frequency is a design parameter of the filter. It is sometimes called

a low-cut filter or bass-cut filter.[1]

那么有什么好处呢,用英文来进行描述就是High-pass filters have many

applications. They are used as part of an audio crossover to direct high

frequencies to a tweeter while attenuating bass signals which could

interfere with, or damage, the speaker.

更加全面的解释请参照:

/wiki/High-pass_filter

AIN+与AIN-

这就是所谓的差分输入形式,下面来简单的介绍一下单端输入与差分输入。

在单端方式工作时,ADC转换的是单输入引脚对地的电压值。当增益为1时,测量的值就是输入的电压值;范围是0V到VREF;当增益增加时,输入的范围要相应的减小;

在差分方式工作时;ADC转换的是AIN+与AIN-两个引脚的差值;在增益为1时,测量的值等于(AIN+)-(AIN-),范围是-VREF到+VREF;当增益增加时,输入的范围要相应的减小。

注意:在差分方式时所提的负压是指AIN-引脚的电压大于AIN+引脚的电压,实际输入到两个引脚的电压对地都必需是正的;例如:如果AIN+引脚输入的电压为0V,AIN-引脚的输入电压为1/2VREF时,差分的输入电压为(0V-1/2VREF) =

-1/2VREF

下面列举了一个两路单端analog输入的例子:

zero-crossing detection

即过零检测。指的是当交流系统中,当波形从正半周向负半周转换时,经过零位时,系统作出的检测,可作开关电路或者频率检测。

AGC(Automatic Gain Control)

即自动增益控制; 对一个输入信号进行放大,为了方便处理,应该保证输出有一定的幅度同时又不会饱和,但是由于输入信号的幅度通常变化很大,所以不能采用一个简单的单一放大倍数,AGC就是根据输入信号调整放大倍数,是输出信号幅度一致。

音频设备的3种硬件接口--PCM,IIS和AC97

一些Audio Codec中总是出现PCM字样,一直以为它是一种音频数据编码格式,但是越看Spec觉得越不像,赶紧到网上查了下,发现它是一种类似与IIS的数据传输格式。

1. PCM接口

针对不同的数字音频子系统,出现了几种微处理器或DSP与音频器件间用于数字转换的接口。最简单的音频接口是PCM(脉冲编码调制)接口,该接口由时钟脉冲(BCLK)、帧同步信号(FS)及接收数据(DR)和发送数据(DX)组成。在FS信号的上升沿,数据传输从MSB(Most Significant Bit)字开始,FS频率等于采样率。FS信号之后开始数据字的传输,单个的数据位按顺序进行传输,1个时钟周期传输1个数据字。发送MSB时,信号的等级首先降到最低,以避免在不同终端的接口使用不同的数据方案时造成MSB的丢失。

PCM接口很容易实现,原则上能够支持任何数据方案和任何采样率,但需要每个音频通道获得一个独立的数据队列(为什么?)。这是因为PCM信号,一个声道采集是一个数据队列,多个数据队列在PCM格式中没法融合到一个数据队列上。不像AC97有控制tag可以区分,IIS有LRCLK来区分左右声道数据,这是有差别的。

2. IIS接口

IIS接口(Inter-IC Sound)在20世纪80年代首先被飞利浦用于消费音频,并在一个称为LRCLK(Left/Right CLOCK)的信号机制中经过多路转换,将两路音频信号变成单一的数据队列。当LRCLK为高时,左声道数据被传输;LRCLK为低时,右声道数据被传输。与PCM相比,IIS更适合于立体声系统(因为可以传送多个声道的数据,所以显然更加适合Stereo Single,其实所谓的立体声,也就是多个声道可以发出不一样的声音)。对于多通道系统,在同样的BCLK和LRCLK条件下,并行执行几个数据队列也是可能的。

3. AC97接口

AC'97(Audio Codec 1997)是以Intel为首的五个PC厂商Intel、Creative

Labs、NS、Analog Device与Yamaha共同提出的规格标准。与PCM和IIS不同,AC'97不只是一种数据格式,用于音频编码的内部架构规格,它还具有控制功能。AC'97采用AC-Link与外部的编解码器相连,AC-Link接口包括位时钟(BITCLK)、同步信号校正(SYNC)和从编码到处理器及从处理器中解码(SDATDIN与SDATAOUT)的数据队列。AC'97数据帧以SYNC脉冲开始,包括12个20位时间段(时间段为标准中定义的不同的目的服务)及16位“tag”段,共计256个数据序列。例如,时间段“1”和“2”用于访问编码的控制寄存器,而时间段“3”和“4”分别负载左、右两个音频通道。“tag”段表示其他段中哪一个包含有效数据。把帧分成时间段使传输控制信号和音频数据仅通过4根线到达9个音频通道或转换成其他数据流成为可能。与具有分离控制接口的IIS方案相比,AC'97明显减少了整体管脚数。一般来说,AC'97 编解码器采用TQFP48封装。


本文标签: 信号 数据 输入 电压