AC3 encoder flow 如下:

1.input PCM

PCM在进入encoder前会使用high pass filter来移除信号的DC部分来达到更有效的编码。

2.Transient detection

Transient detection用于决定在进行MDCT时是否需要switch到short block来减少pre-echo。

Transient detection 分为以下几个步骤:

1)High pass filter.使用二阶IIR filter (cutoff of 8kHz)。

2)Block Segmentation.

一个audio block(256 sample)通过HP filter后,segmented 到hierarchical tree的不同level上。

level 1为256 sample. level 2为2个长度为128 sample 的segment.level3 为4个长度为64 sample的segment.

3)Peak detection

在hierarchical tree的各个level的各个segment上找到最大PCM的最大幅值。

P[j][k] = max(x(n))

for n = (512 ×(k-1) / 2^j), (512 ×(k-1) / 2^j) + 1, ...(512 ×k / 2^j) - 1
and k = 1, ..., 2^(j-1) ;

其中x(n)为256 sample 的audio block 中第n个sample

j=1,2,3 为hierachical tree的level

k为level j的segment index.

4)Thread Comparison

首先用P[1][1]与“silence threshold”进行比较来check当前audio block中是否存在signifant signal level.

如果P[1][1]小于silence threshold则使用long block. silence threshold为100/32768

接下来,在每个level上比较相邻的segment的Peak.如果相邻的两个segment Peak的比值大于预设的threshold,就设置一个flag来标识当前audio block存在transient.

比较方法如下:

mag(P[j][k]) ×T[j] > mag(P[j][(k-1)])

T[j]是level j预设的threshold.T[1]=0.1,T[2]=0.075,T[3]=0.05.

3.Forward Transform

每个audio block在进行MDCT transform之前,需要乘以window function来减少transform的边界效应。

使用MDCT进行时频变换。

x[n]表示乘以window function之后的时域信号,如果使用long block,N=512.如果使用short block, N=256.

4.Coupling Strategy

1)basis encoder

basic encoder 使用static coupling strategy, couplig parameter 如下:

2)advanced encoder

更多的advanced encoder使用动态变化的coupling parameter. coupling frequecies根据psychoacoustic model 分析bit 的需求量来动态变化。

如果某个channel的信号在时间上变化剧烈,就从coupling中移除。在时间上变化缓慢的channel,其coupling coordinate传送bit少很多。

coupling band structure也会动态变化。

5.Form Coupling Channel

大部分basic encoder将所有individual channel的transform coefficients简单的相加,然后除以8(防止transform coefficients超过1溢出)形成coupling channel。

一些稍微复杂点的encoder在进行相加钱会改变individual channel的符号来避免phase cancellations.

在每个coupling band内,原始channel的能量除以coupling channel中对应coupling band内能量的比值形成coupling coordinates.

6.Rematrixing

Rematrixing只存在于2/0 mode.在每个rematrixing band内,计算L,R,L-R,L+R的能量,如果最大的能量是L or R,那当前band不设置rematrixing flag.如果最大的能量是L+R orL- R,那当前band设置rematrixing flag,并传送L+R,L-R.

7.Extract exponent

将transform coefficient表示成二进制后,leading zero的个数为初始的exponent.

每个transform coefficients计算出一个exponent,可以选择不同的exponent strategy将多个exponent group在一起。

8.Exponent Strategy

如果频谱变化平坦,则使用D25 or D45,如果变化不平坦,这是用频谱分辨率较高的exponent strategy D15 or D25.

如果频谱在一个frame的6个audio block内改变很小,则只在audio block 0传送exponents, block 1~5使用block 0的exponents.

对于basic encoder,check时间上exponents的变化,如果变化超过了一个threshold,那么就传送新的exponent。

9.Dither strategy

当transform coefficient被quantize为0bit时,在decoder端使用dither替代transform coefficients.

10.Encoder Exponents

对于exponent strategy D25,D45,一个exponent对应多个mantissa. exponent采用差分编码。两个相邻的exponent的差值被限定为+/-2内,如果相邻的exponent差值大于2,则减少较大的exponent到+/-2范围内,相应的mantissa经调整后包含leading zero.

11.Normalize mantissa

每个channel的transform coefficients根据exponents左移得到normalized mantissa.

12.Core Bit Allocation

Core bit allocation是通过不断调整corse SNR 和fine SNR offset直到一个frame内的所有可用的bit都分配完。

corse SNR offset调整时每次增加/减少3db,fine SNR offset 调整时每次增加/减少3/16db.

对于所有channel,都是 从一个common bit pool来进行bit allocation。在encoder通过不断的迭代选择最优的csnroffst 和fineoffst,分配不超过frame size的最大bit 数。

对于某一次迭代,如果分配的bit数超过了bit pool,那么减小SNR offset来进行下一次迭代。如果分配的bit数小于bit pool,那么增加SNR offset来进行下一次迭代。当SNR offset已经是满足分配bit数不超过bit pool的最大值时,迭代结束。

bit allocation的最终结果是csnroffst,fineoffst和baps(bit allocation points)

13. Quantize mantissa

每个normallized mantissa使用对应bap的quantizer进行quantize.

14.Pack AC-3 Frame

将上述过程产生的side info,exponents和quantized mantissa pack成AC-3 frame

AC3 encoder flow的更多相关文章

  1. AC3 IMDCT

    AC3 encoder 在进行MDCT时,使用两种长度的block. 512 samples的block用于输入信号频谱是stationary,或者在时间上变化缓慢.在fs 为48k时,使用512 s ...

  2. AC3 Rematrix

    当L R channel highly correlated时,AC3 encoder 使用rematrix技术压缩L/R的和和差. 原始信号为left,right,使用rematrix压缩信号为le ...

  3. AC3 overview

    1.AC3 encode overview AC3 encoder的框图如下: AC3在频域采用粗量化(coarsely quantizing)来获取较高的压缩率. 1).输入PCM 经过MDCT变换 ...

  4. ffmpeg最全的命令参数

    Hyper fast Audio and Video encoderusage: ffmpeg [options] [[infile options] -i infile]... {[outfile ...

  5. Motion control encoder extrapolation

    Flying Saw debug Part1 Encoder extrapolation Machine introduction A tube cutting saw, is working for ...

  6. 光流法(optical flow)

    光流分为稠密光流和稀疏光流 光流(optic flow)是什么呢?名字很专业,感觉很陌生,但本质上,我们是最熟悉不过的了.因为这种视觉现象我们每天都在经历.从本质上说,光流就是你在这个运动着的世界里感 ...

  7. Improved Variational Inference with Inverse Autoregressive Flow

    目录 概 主要内容 代码 Kingma D., Salimans T., Jozefowicz R., Chen X., Sutskever I. and Welling M. Improved Va ...

  8. Improving Variational Auto-Encoders using Householder Flow

    目录 概 主要内容 代码 Tomczak J. and Welling M. Improving Variational Auto-Encoders using Householder Flow. N ...

  9. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

随机推荐

  1. PAT (Advanced Level) Practice 1152 Google Recruitment (20 分)

    In July 2004, Google posted on a giant billboard along Highway 101 in Silicon Valley (shown in the p ...

  2. 论文阅读笔记(七)【TIP2018】:Video-Based Person Re-Identification by Simultaneously Learning Intra-Video and Inter-Video Distance Metrics

    是由一篇 IJCAI2016 扩的期刊. 该篇会议论文的阅读笔记[传送门] 期刊扩充的部分:P-SI2DL 1.问题描述: 在会议论文中介绍的SI2DL方法采用了视频三元组作为视频关系(是否匹配)的逻 ...

  3. ActiveMQ的JMS消息可靠机制

    JMS消息可靠机制 ActiveMQ消息签收机制: 客戶端成功接收一条消息的标志是一条消息被签收,成功应答. 消息的签收情形分两种: 1.带事务的session 如果session带有事务,并且事务成 ...

  4. HTML5,从零开始

    一.网页的组成部分 <!DOCTYPE html> <html> <head> <title>这是标题</title> <meta c ...

  5. [转]从实例谈OOP、工厂模式和重构

    有了翅膀才能飞,欠缺灵活的代码就象冻坏了翅膀的鸟儿.不能飞翔,就少了几许灵动的气韵.我们需要给代码带去温暖的阳光,让僵冷的翅膀重新飞起来.结合实例,通过应用OOP.设计模式和重构,你会看到代码是怎样一 ...

  6. ContestHunter 1201 最大子序和

    描述 输入一个长度为n的整数序列,从中找出一段不超过m的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m=4时,S=5+1-2+3=7当m=2或m=3时,S=5+1=6 输入 ...

  7. 数据预处理 | 通过 Z-Score 方法判断异常值

    判断异常值方法:Z-Score 计算公式 Z = (X-μ)/σ 其中μ为总体平均值,X-μ为离均差,σ表示标准差.z的绝对值表示在标准差范围内的原始分数与总体均值之间的距离.当原始分数低于平均值时, ...

  8. 剑指offer 56.删除有序链表中的重复结点

    56. 删除有序链表中的重复结点 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3-> ...

  9. arm9特点

    ARM9主要特点 ARM 处理器凭借它的低功耗.高性能等特点,被广泛应用于个人通信等嵌入式领域,而ARM7 也曾在中低端手持设备中占据了一席之地.然而,ARM7 的处理性能逐渐无法满足人们日益增长的高 ...

  10. C语言-const再理解(转)

    有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定.例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小.为了满足这一要求,可以使用const关键字对变量加以限定: co ...