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的处理等价了.

  • 相关阅读:
    微信小程序实现滚动到指定位置
    微信小程序,scroll-view组件的使用,跳转到指定的锚点/定位跳转
    小程序,报渲染层错误。图片无法渲染。
    input Input 输入判断/正则
    js,某元素在浏览器页面浮动/飘动
    前端模块化
    npx create-react-app命令不成功,更改成淘宝镜像
    深入理解jdk和jre(转)
    Java学习路线图·影响一代又一代程序员的经典书籍!(转)
    ZAB协议(转)
  • 原文地址:https://www.cnblogs.com/wzgpeter/p/1863053.html
Copyright © 2011-2022 走看看