zoukankan      html  css  js  c++  java
  • ac3算法的开发

    这段时间需要重新开发ac3的算法。公司原来的算法结构太烂了,维护太麻烦,

    boss痛下决心将一些算法重新开发一遍(原来的算法是买来的)。

    了解了一下ac3的开发文档,搞清了ac3的基本架构,目前的版本先支持

    bsid=7,8,9,10的情况。eac3在ac3定点化完成后继续开发。

    目前总算将ac3的定点化完成了,特此总结一下。

    ac3的解码流程如下:

     bitstream parsing -> 指数与尾数解码->和差解码(仅支持acomd==2) ->dynamic range -> IMDCT ->windowing->overlap processing ->down mixing ->output pcm

    ac3的一帧包含有6个blocks,以及一个header。header中包含ac3的类型,采样率信息,帧长,输入通道数等。

    每个block中输入通道的数目是都是相同的。

    1)ac3的频域的系数采用的是指数尾数编码方式,不同于dra等的采用huffman编码的方式。每个通道的第一个指数

    是基础指数,后续的尾数都是加上前一个指数来组成当前的真实指数。这样可以提高编码的效率。指数表示的该频域

    系数最高位的零的个数,解码就是将尾数根据指数右移特定的尾数来获取。被coupling的高频部分以及lfe通道都是

    独立的来计算指数的,不与正常通道进行指数累加。

    2)ac3采用了对于高频部分进行coupling的方式来提高编码效率,将某个block中的n个通道中高频部分只根据一个

    通道进行编码。被coupling的通道的高频部分就不需要进行再解码了。

    3)dynamic range 是ac3提供的用来控制输出音频信号的幅度的作用,以适应不同场合的使用满足不同听众的需求。

    4)ac3采用了256点IMDCT与512点IMDCT相结合的方式,对于需要更精确的频谱处理的时候就采用256点,反之

    采用512点的。两者的切换在码流中都有特定bit来规定。

    5)down mixing就是根据需要将多声道的合并成特定的声道进行输出。目前我们暂时只支持6->2, 2->2的方式。

    定点化比较的简单,audio的算法的定点相对于speech来说一向比较的简单。我规定的Q格式一直不变就可以满足

    公司对于conformance的需求了。

    由于快速算法中, 根据文档,它的IMDCT的核心部分是IFFT的处理, 因为我们公司有通用的FFT模块,为了方便就采用

    FFT来实现IFFT的方式来替换, 这样也便于以后模块的通用和优化. 在fft之前将虚数部分取反, fft处理后,将出来的数据

    虚数部分再取反就与IFFT的处理等价了.

  • 相关阅读:
    回溯法 | 子集树:装载问题
    再谈01背包 | 使用【跳跃点集合】代替【求解矩阵】解题
    线性代数 | 行列式的计算
    慢,也是一种态度
    回溯法 | 图的m着色问题
    回溯法 | 旅行商问题(TSP问题)
    回溯法 | n皇后问题
    基数排序 RadixSort
    03.父工程pom、整合测试、SpringBootApplication注解
    02.自定义banner、全局配置文件、@Value获取自定义配置、@ConfigurationProperties、profiles配置
  • 原文地址:https://www.cnblogs.com/wzgpeter/p/1863053.html
Copyright © 2011-2022 走看看