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

转载于:https://www.cnblogs.com/fellow1988/p/8870834.html

AC3 encoder flow相关推荐

  1. AC3 overview

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

  2. AC3 Rematrix

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

  3. ECCV2020最佳论文 | 全面解析光流计算模型RAFT

    作者| flow 编辑| 3D视觉开发者社区 导语: RAFT这篇文章荣获了ECCV 2020的best paper,可以说实至名归,也将在光流领域的研究历史中留下浓重彩墨的一笔,本文将从RAFT算法 ...

  4. 光流估计算法RAFT的论文和代码阅读

    RAFT论文和代码阅读 RAFT: Recurrent All-Pairs Field Transforms for Optical Flow Zachary Teed and Jia Deng EC ...

  5. ECCV 2020 best paper: RAFT算法解析

    ECCV 2020 best paper: RAFT 作者| flow 编辑| 3D视觉开发者社区 3D开发者社区该文链接| https://mp.weixin.qq.com/s/IknaCBVllJ ...

  6. 【代码小记】赏析《RAFT:运动属性的光流感知》

    一.方法:预测当前帧各像素'运动'('位移量' ΔF) 简化架构: 补充: 方法: 3.1特征提取 key:相邻帧:映射:低分辨率(单分辨率):残差块 消融实验1-组件性能 单分辨率提取特征 key: ...

  7. LiteFlowNet:用于光流估计的轻量级卷积神经网络

    LiteFlowNet:用于光流估计的轻量级卷积神经网络 原文链接 摘要   FlowNet2 [14] 是用于光流估计的最先进的卷积神经网络 (CNN),需要超过 160M 的参数才能实现准确的流估 ...

  8. gst-inspect-1.0汇总自用

    gst-inspact-1.0列表(完善中) $ gst-inspect-1.0  cluttergst3:  clutterautovideosink: Generic bin qmlgl:  qm ...

  9. 记录-简易多媒体流分析工具参数

    Simple multimedia streams analyzer usage: ffprobe [OPTIONS] [INPUT_FILE] Main options: -L show licen ...

最新文章

  1. C# TripleDES NoPadding 时对待加密内容进行补字节(8个字节为一个Block)
  2. gridview格式化日期字段
  3. win10+python373安装pycrypto
  4. DataFrame的多dtype创建方法
  5. Python基础——字符串、列表、元组
  6. 【备战NOIP】[算法总结] 二分查找
  7. 在Winform中屏蔽UnityWebPlayer的右键以及自带Logo解决方案整理
  8. AD09 覆铜步骤及设计规则
  9. 借助Hugo和Academic主题在github.io建立个人网站
  10. windows Mac 虚拟机显示模糊的问题
  11. 为小巨人记一笔,等待明日新星的升起
  12. js打印html表格内容,js实现简单的打印表格
  13. 大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作
  14. vue生成二维码图片并且下载图片到本地
  15. 数据库课程设计——学生选课管理信息系统
  16. python 数值运算 m op n_测验1 Python基本语法元素 (第1周)
  17. 删掉微信好友服务器还有吗,微信被删除的好友怎么找回来 在对方不知情的情况下找回已删除的微信好友教程...
  18. 《我的世界》Python编程入门(2)Minecraft(我的世界) 游戏简介
  19. 解决:操作必须使用一个可更新的查询
  20. java lamda 常用写法 List篇

热门文章

  1. 光收发器(卡)指示灯状态说明
  2. TCP/IP、Http、Socket的区别
  3. astropy常用命令 python天文绘图
  4. mate10 Android 功耗,6个方法完美解决华为Mate10耗电快的问题
  5. kafka学习知识点总结(三)
  6. lpc43xx双核处理器之双核通信
  7. 计算机二级access操作题真题及答案,计算机二级Access数据库考试真题及答案
  8. 安卓设备与win11pc远程桌面的连接
  9. html图片滤镜,纯CSS图片滤镜项目CSSgram简介
  10. Threejs在vue中使用(场景、相机、渲染器、gltf模型添加、环境贴图等)