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则是增益减小(电压增高)的过程,如下图所示:
实际使用过程中,ALC功能所能够达到的效果如下图:
从图中可以看到,对于超过Max强度的电压,通过调整attach过程将其降低,反之则通过release将其增大。
对于一般的Codec芯片而言,使用ALC功能的时候都要去配置Max/Min的threshold(db)值,以及Attach rate和Release Rate(快or慢)。
Limiter
不知道应该怎么翻译这个词。
与ALC类似,Limiter也是去检测analog信号的强度,当大于用于设置的threshold的时候通过直接对信号进行截断处理,也有的Codec不是野蛮的进行截断处理,而是采用类似ALC调整Gain的方法来调整analog信号的强度。
例如max9756中Output Limiter的效果图如下:
注:
个人理解,Limiter的效果比起ALC来说相对差一些,可能是内部硬件实现的决定了这点吧,前者可能是一种相对Cost-down的方案。
本文接着前面一篇来简单说明Audio Codec中常见的一些概念
1. 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.
更加全面的解释请参照:
http://en.wikipedia.org/wiki/High-pass_filter
2. 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输入的例子:
3. zero-crossing detection
即过零检测。指的是当交流系统中,当波形从正半周向负半周转换时,经过零位时,系统作出的检测,可作开关电路或者频率检测。
1. AGC(Automatic Gain Control)
即自动增益控制; 对一个输入信号进行放大,为了方便处理,应该保证输出有一定的幅度同时又不会饱和,但是由于输入信号的幅度通常变化很大,所以不能采用一个简单的单一放大倍数,AGC就是根据输入信号调整放大倍数,是输出信号幅度一致。
2. 音频数据的格式WAVE_FORMAT
音频格式包括Sample rate(采样率),Mono/Stereo等内容,具体的类型包括下面的几种:
#define WAVE_FORMAT_1M08 0x00000001 /* 11.025 kHz, Mono, 8-bit */
#define WAVE_FORMAT_1S08 0x00000002 /* 11.025 kHz, Stereo, 8-bit */
#define WAVE_FORMAT_1M16 0x00000004 /* 11.025 kHz, Mono, 16-bit */
#define WAVE_FORMAT_1S16 0x00000008 /* 11.025 kHz, Stereo, 16-bit */
#define WAVE_FORMAT_2M08 0x00000010 /* 22.05 kHz, Mono, 8-bit */
#define WAVE_FORMAT_2S08 0x00000020 /* 22.05 kHz, Stereo, 8-bit */
#define WAVE_FORMAT_2M16 0x00000040 /* 22.05 kHz, Mono, 16-bit */
#define WAVE_FORMAT_2S16 0x00000080 /* 22.05 kHz, Stereo, 16-bit */
#define WAVE_FORMAT_4M08 0x00000100 /* 44.1 kHz, Mono, 8-bit */
#define WAVE_FORMAT_4S08 0x00000200 /* 44.1 kHz, Stereo, 8-bit */
#define WAVE_FORMAT_4M16 0x00000400 /* 44.1 kHz, Mono, 16-bit */
#define WAVE_FORMAT_4S16 0x00000800 /* 44.1 kHz, Stereo, 16-bit */
|
通过Wave API waveInGetDevCaps()可以获取Audio驱动所支持的音频格式,如下所示:
mmRtn=waveInGetDevCaps(g_dwDeviceNum-1,&woc,sizeof(woc));
CheckMMRESULT(mmRtn,"ERROR: Failed to get device caps. waveInGetDevCaps",TPR_FAIL,"Driver responded incorrectly");
|
IIS总线的几句经典说明
在飞利浦公司的I2S标准(其实还有其它的一些标准,如日本标准等)中,既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有3个主要信号:1.串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1个脉冲。SCLK的频率=2×采样频率×采样位数(很多的时候,我们也会用倒推的方式算出来采样频率,即采样频率=SCLK的频率/(2×采样位数)) 2. 帧时钟LRCK,用于切换左右声道的数据。LRCK为“1”表示正在传输的是左声道的数据,为“0”则表示正在传输的是右声道的数据。LRCK的频率等于采样频率(示波器上一看就能够算得出来采样频率是多少,另外还可以数的出来采样位数是多少,即在LRCK为高或者低的状态下SCLK的周期个数-1)。3.串行数据SDATA,就是用二进制补码表示的音频数据。
有时为了使系统间能够更好地同步,还需要另外传输一个信号MCLK(有些控制器中称之为sys clk,前面别和MCU的系统时钟混淆了),称为主时钟,也叫系统时钟(Sys Clock),是采样频率的256倍或384倍(注意这里是采样频率而不是SCLK,如MCLK为24MHz,SCLK为48KHz,中间大概是MCLK=256×SCLK的关系)。
-------------------------------------------
音频设备的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接口很容易实现,原则上能够支持任何数据方案和任何采样率,但需要每个音频通道获得一个独立的数据队列(为什么?)。
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封装。
声音强度的定义
声音强度的定义dB是从电学中而来的。在实际的电路应用中,会存在很多的放大器,尤其是对模拟信号而言,而且放大器的放大倍数可能很大。
例如,一个收音机从天线收到的信号至送入喇叭放音输出,一共要放大2万倍左右,如果直接用2万这样的概念来形容放大倍数的话,数值过于大。另外,直接用放大倍数声音来表示用户的直观感受的话,也不够直观,例如当电功率从0.1瓦增长到1.1瓦时,听到的声音就响了很多;而从1瓦增强到2瓦时,响度就差不太多;再从10瓦增强到11瓦时,没有人能听出响度的差别来(这里同样是增大1W)。
因此,引入了dB来形容声音的强度,也可以说是增益。
回顾一下电学中计算电压/电流/功率强度的方法:
电流增益:XdB = 20log(Io/Ii)
电压增益:XdB = 20log(Vo/Vi)
功率增益:XdB=10log(Po/Pi)
其实,功率增益的公式可以从上面电流增益上推导出来,方法如下:
à首先,Po/Pi = POW(Io, 2)*R/(POW(Ii, 2)*R) = POW(Io, 2)/ POW(Ii, 2) = POW(Io/Ii, 2),
à然后,由电流增益XdB = 20log(Io/Ii)得到Io/Ii = POW(10, XdB/20),
两边同时平方得到:POW(Io/Ii, 2) = POW(POW(10, XdB/20), 2) = POW(10, XdB*2/20) = POW(10, XdB/10)
也即:POW(Io/Ii, 2) = POW(10, XdB/10)
也就是:XdB/10 = log(POW(Io/Ii, 2))
à用第一步的计算结果替换第二部的计算结果中左边
XdB/10 = log(POW(Io/Ii, 2))à XdB/10 = log(Po/Pi)à XdB = 10 log(Po/Pi)
à最终XdB = 10 log(Po/Pi)
在实际的Wave Driver和Audio Codec中,无论DA采样还是AD转换都是基于电压的,也即电压增益,实际上使用的公式就是XdB = 20log(Vo/Vi)。
假设Vo/Vi增大一倍,也即变为20log(2*Vo/Vi)=20*(log2+log(Vo/Vi))=6+20log(Vo/Vi),所以我们可以得到一个常用的结论,当放大倍数增大一倍的时候,增益值增加6dB,相应的当放大倍数减少50%的时候,增益值减少6dB(增加-6dB)。
分享到:
相关推荐
4. **音频编码与解码**:虽然主要关注文本和数字编码,但Codec库也包含了一些音频相关的编码接口,如`AudioCodec`,这可能涉及到音频数据的编码和解码。 5. **URL编码与解码**:`URLCodec`类用于处理URL中的特殊...
3. 配置I2S外设:设置传输模式(主模式或从模式)、数据格式(例如16位、立体声)、时钟极性和相位等参数。这可以通过调用HAL_I2S_Init()函数实现。 4. 设置DMA(Direct Memory Access):I2S传输通常使用DMA进行,...
FLAC是一种免费的无损压缩音频格式,支持流和存档。 FLAC项目维护格式,并为多个流行的音频播放器提供参考编码器/解码器和输入插件。
The WCD9335 is a stand-alone high fidelity (hi-fi) audio codec IC that supports the Qualcomm Technologies, Inc. (QTI) multimedia solutions, including the APQ8096SGE chipset. The key WCD9335 functions ...
"SPI with Audio Codec" SPI(Serial Peripheral Interface,串行外设接口)是一种同步串行接口,广泛应用于与外部外设和其他微控制器设备之间的通信。SPI 模块可以与各种外设进行通信,例如串行 EEPROM、移位...
在数字音频处理领域,音频CODEC(编码解码器)是极其重要的组件,它负责数字音频信号的编码和解码过程。本文档详细介绍了音频CODEC芯片中ADC(模拟到数字转换器)和DAC(数字到模拟转换器)模块的相关知识,并分析了...
TTA Lossless Audio Codec 的核心特性包括: 1. **无损压缩**:TTA的核心优势在于其无损性,它能够以较高的压缩比率存储音频数据,同时保证解压缩后的音频与原始文件完全一致。这对于音乐爱好者和专业音频工作者来...
--> MP3 Lame MPEG-1 Layer-3 --> MPC MusePack --> OFR OptimFROG Lossless Audio Coder --> RM/RA RealNetworks RealMedia/RealAudio --> SHN SoftSound Shorten Lossless Compression --> SPX (Speex) Open ...
1. 下载并解压VIA_Vinyl_AudioCodec_V540a.zip文件。 2. 关闭所有正在运行的音频应用和系统防火墙。 3. 运行解压后的安装程序,按照提示进行操作。 4. 完成安装后,重启计算机以使更改生效。 5. 在设备管理器中确认...
在"mp3-compression-codec-source-code.rar"这个压缩包中,包含了两个关键部分:`layer3编码源码.zip`和`mp3解码源码.zip`。这两部分分别对应了MP3编码和解码的源代码,用C语言编写,非常适合学习和理解MP3压缩的...
标题中的"AudioCodec"指的是音频编码器,它是将模拟音频信号转换为数字形式的软件或硬件设备。在数字通信和多媒体领域,音频编码是至关重要的,因为它能够有效地压缩音频数据,减少存储空间和网络传输所需的带宽。...
jFLAC是Java平台上的一款开源软件,专门针对Free Lossless Audio Codec(FLAC)进行了实现。FLAC是一种广泛应用于音乐存储和传输的无损音频编码格式,它能够以高效的压缩方式保存音频数据,同时保留原始音频的每一个...
音频编解码器(Audio Codec)是数字音频系统中的关键组件,主要负责音频信号的编码和解码工作。在本文中,我们将深入探讨Audio Codec、USB Codec以及TI公司的6713 EVM板子上应用的相关知识。 首先,Audio Codec是一...
Bluetooth Subband CODEC (SBC) for high-fidelity wireless audio. The design uses a configurable Weighted Overlap-Add (WOLA) filterbank coprocessor to implement the analysis and synthesis filterbanks...
FLAC(Free Lossless Audio Codec)是一种免费且开放源代码的无损音频压缩格式,它在保持原始音频数据完整性的同时,能实现较高的压缩率。这种技术对于音乐爱好者和专业音频工作者来说尤其重要,因为它允许他们存储...
Simple AudioCodec(SAC)是一款完全免费的批处理音频代码转换器,可以轻松地将大多数音乐文件和各种流行的音频文件以高速和CD品质转换为MP3,MP4,iPod和其他MP3播放器文件格式。
### AUDIO CODEC DAPM(包括dapm机制和音频路径详细分析) #### 一、目的与前提 本文旨在深入解析音频系统中的动态音频电源管理(DAPM)机制及其触发过程,特别是聚焦于音频路径的搭建与选择。文章将详细介绍DAPM的...
FAAC是一种高级音频编码器(MPEG2-AAC,MPEG4-AAC)。 FAAC的目标是探索AAC的可能性,并超越目前最好的MP3编码器的质量。 您可以通过GitHub提交拉取请求:...
3. **Java编程接口(API)**:`AudioCodec.java`文件暗示这是一个用Java语言编写的类。在Android开发中,Java是主要的编程语言,因此`AudioCodec`可能会提供一系列的Java方法,如`encode()`、`decode()`,供开发者...