首页> 中国专利> 一种基于变换域的数字音频混合方法

一种基于变换域的数字音频混合方法

摘要

本发明涉及一种数字混音方法,更具体的说,涉及一种基于变换域的数字音频混合方法。包括如下步骤:1)输入多个已数字化的音频流,进行分帧处理,得到各帧的时域音频序列;2)对多个音频流以帧为单位进行覆盖性频域插值,得到各帧频域混音后的时域音频序列;该覆盖性频域插值是先将原始音频序列由时域变换到频域,然后进行覆盖性频域插值运算,再由频域变回时域,最后得到混音音频序列;3)将混音信号的各帧数据组合成一个完整的输出音频流。与现有技术相比,本发明最大优点是有效地解决了经典混音中的溢出问题,在对数据的动态范围有严格限制的情况下,能够提供很好的“音效级”混合效果。本发明特别适用于嵌入式终端上的实时双路音频流混合。

著录项

  • 公开/公告号CN1770256A

    专利类型发明专利

  • 公开/公告日2006-05-10

    原文格式PDF

  • 申请/专利号CN200410088428.2

  • 发明设计人 杜云峰;刘建;

    申请日2004-11-02

  • 分类号G10H1/00;G10K15/08;G10L19/02;

  • 代理机构北京泛华伟业知识产权代理有限公司;

  • 代理人高存秀

  • 地址 100080 北京市海淀区中关村路17号

  • 入库时间 2023-12-17 17:12:18

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2010-05-05

    授权

    授权

  • 2006-07-05

    实质审查的生效

    实质审查的生效

  • 2006-05-10

    公开

    公开

说明书

技术领域

本发明涉及一种数字混音方法,更具体的说,涉及一种基于变换域的数字音频混合方法。

背景技术

所谓混音就是用一个输出设备播放多个音频流,提供一个单输出多输入的通道。目前经典的混音方法都是采用基于时域的线性叠加方法。

传输声音这种连续的、时间要求严格的流与传输别的数据不同。这涉及声波转换为数字信号,数字信号恢复为声波。虽然AD/DA由硬件完成,但录音和播放由用户设置。特别需要注意的是,不象典型的视频流在空间/时间域占有唯一的位置,在同一时间和位置的图象元素叠加是无任何意义的,但人耳可以感知在同一空间/时间播放的多个音频流。例如多个终端参与的音频会议,由于这些终端物理上并不在一起,而每个终端通常只有一套音频输出设备(功放+音箱),为了能够在每个终端同时接收多个与会者的声音,必须进行多路音频流混合。

当多个音频源在一个房间播放时,人耳听到的声波是各个声源声波的线性叠加,这正是模拟混音的基础。该事实表明数字混音也可以线性相加。假设有n路输入音频流进行混音,Xi(t)是t时刻的第i路输入声音的线性样本,则t时刻的混音值为:

m(t)=∑Xi(t),i=0,1,……,n-1                            (1)

数字音频的重要参数是采样率,显然,各路输入音频流的采样率相同是混音的前提。

然而此种方法在数字系统上实现的最大问题是如何防止溢出导致的失真。对于单声道16比特量化的音频数据在计算机中每个采样点需占用2个字节的空间,即如果输入样本是16比特,求和缓冲区也是16比特,那两路音频流相加就容易使求和区溢出。即使提供了高精度的求和缓冲区,使得在求和过程中是不会溢出,但是这不能保证求和结果的幅值仍适合输出硬件器件的要求范围(输出器件范围通常与输入一致也是16比特)。

为了解决上述问题,简单的方法是对超出范围的值箝位,更复杂一点方法是对求和结果分帧进行归一化定标。箝位指的是在运算中发生“溢出”时,将序列的当前值直接赋为最大值,如:若取值范围为0~65535,求和结果超过65535时,把当前值赋为最大值65535。然而这种方法只能减少因“溢出”而导致的“削波失真”的失真程度,而无法从根本上消除溢出。对求和结果分帧进行归一化定标指的是根据求和结果对每一帧乘以一个因子,使得该帧中的最大值在取值范围内,从而解决溢出的问题。这种方法的缺点是由于无法预测各帧的最大值,各帧所乘的因子大小不一,造成声音时大时小的问题,极大地影响了收听效果。

发明内容

本发明的目的是克服现有技术的不足,从根本上消除混音过程中由于溢出带来的“削波失真”;同时考虑人耳的特征,最大程度的减小混音过程对音效的影响;提供一种基于变换域的数字音频混合方法。

为达到上述目的,本发明提供的基于变换域的数字音频混合方法,包括如下步骤:

1)输入多个已数字化的音频流,进行分帧处理,得到各帧的时域音频序列;

2)对多个音频流以帧为单位进行覆盖性频域插值,得到各帧频域混音后的时域音频序列;该覆盖性频域插值是先将原始音频序列由时域变换到频域,然后进行覆盖性频域插值运算,再由频域变回时域,最后得到混音音频序列;

3)将混音信号的各帧数据组合成一个完整的输出音频流。

所述步骤2)还包括如下子步骤:

21)取两个音频流中相应的两个帧,分别做离散傅立叶变换/快速傅立叶变换,得到两个离散频谱;

22)对步骤21)中得到的两个离散频谱进行覆盖性插值,得到一个混音频谱;

23)对步骤22)中得到的混音频谱做离散傅立叶逆变换/快速傅立叶逆变换,得到混音后的时域音频序列。

所述步骤步骤22)中的覆盖性插值过程如下:

将两个离散频谱乘上一个插值函数,使得插值序列中奇数/偶数序号的谱线与第一个离散频谱的相应谱线相同,偶数/奇数序号的谱线与第二个离散频谱的相应谱线相同。

所述步骤3)中需消除由于帧移造成的帧与帧之间的相互重叠,具体做法是:

若帧长为N,帧移为M,则最后输出音频流中的一帧取前一混音帧的前N-M项作为该输出帧的前N-M项,取后一混音帧的前M项作为该输出帧的后M项。

与现有技术相比,本发明提供的基于变换域的数字音频混合方法,其最大优点是有效地解决了经典混音中的溢出问题,尤其对于嵌入式终端(如定点DSP)上的实时双路音频流混合,提供了足以令人满意的音效级混音效果。变换域混音算法的设计初衷是针对嵌入式移动终端开发的,目的是为了在移动终端上提共形成特定语音效果的实时音效处理。所以在不过分苛求音质的情况下,频域混音算法能够提供很好的“音效级”混合效果,例如将一段语音与一段背景声音实时混合到一起,作为手机的音效铃声等等。实际上对于任何嵌入式系统,“溢出”问题都是最让人头痛的,因为嵌入式系统相对于桌面系统需要更高的集成度以减小其体积,而体积有限的情况下存贮器(输入缓冲区,累加器,输出缓冲区)的容量必然不会很大,因而对数据的动态范围便会有严格的限制。

附图说明

图1是本发明提供的基于变换域的数字音频混合方法实施例流程图;

图2是覆盖性频域插值示意图。

具体实施方式

对音频信号进行处理的一个基本概念就是对声音样本以缓冲区为单位处理,即对输入的声音样本分帧。将已数字化的音频信号序列依次存入一个数据区,在音频信号处理中一般用循环队列的方式来存储这些数据,以便用一个有限容量的数据区来应付数量极大的音频数据(已处理过的音频数据可以依次抛弃,让出存储空间来存入新数据)。在进行处理时,按帧(frame)从此数据区中取出数据,处理完成后再取下一帧,依次循环。在取数据时,前一帧和后一帧的交叠部分称为帧移(overlap)。为了保证重构信号具有更好的连续性,一般做语音信号处理都采用帧移的方式。

已取出的一帧音频数据x(n)要经过加窗处理,这就是用一定的窗函数w(n)来乘x(n),从而形成加窗音频数据xw(n),xw(n)=x(n)×w(n)。在音频信号处理中常用的窗函数是矩形窗(Triangular)和哈明窗(Hamming),表达式如下(其中N为帧长):

矩形窗

哈明窗

下面结合附图与优选实施例,进一步描述本发明提供的基于变换域的数字音频混合方法。

图1是本发明的一个优选实施例流程图,包括如下步骤:

步骤101:输入已数字化的音频流1和音频流2,该音频流1和音频流2的采样率相同,分别用序列表示音频流1和音频流2。将两个音频信号序列分别存入两个数据区,采用循环队列的方式来存储这些数据,以便用一个有限容量的数据区来应付数量极大的音频数据。

步骤102:将序列的各项分别读入各自的缓冲区。将序列读入缓冲区时,可以一次读入若干个采样点的数据值,一般一次读入后面窗长N点数据,当然也可以一个采样点一个采样点地读入。

步骤103:若已经读完一帧数据(达到一帧),在加窗后进入步骤104;若还未读完一帧数据,回到步骤102,继续读取数据。需注意的是,程序实现不能保证每一帧的数据同时读完,但是哪一路快的话,可以等待另一路读完,只要在进入步骤105之前都读完当前这一帧即可。

分别对加矩形窗函数w(n)截取其一帧,帧长为N(该加窗运算在达到一帧后进行)。即:

>>x>>(>n>)>>=ver>>x>~>>>(>n>)>>×>w>>(>n>)>>n>=>0,1,2>,>·>·>·>N>->1>->->->>(>4>)>>>s>

>>y>>(>n>)>>=ver>>y>~>>>(>n>)>>×>w>>(>n>)>>n>=>0,1,2>,>·>·>·>N>->1>->->->>(>5>)>>>s>

步骤104:对x(n),y(n)做N点离散傅立叶变换(DFT),即:

          DFT[x(n)]=X(k)    k=0,1,2…N-1                   (6)

          DFT[y(n)]=Y(k)    k=0,1,2…N-1                   (7)

易知,该步骤中的DFT变换也可以用FFT变换代替。

在此需要说明的是,一般N都取偶数,因为对应DFT的快速算法FFT要求输入序列的点数为2的N次方,例如8,16,32,64,128,…,1024,2048,4096等等,显然这些均为偶数。所以为了提高数据精度,在不进行人为补0的情况下,N一般都取2的整数幂,以便于直接利用FFT算法快速计算DFT变换。

步骤105:对X(k)、Y(k)进行覆盖性频域插值。

当N为偶数时,设插值函数T(n)=[1+(-1)n]/2,n=0,±1,±2,……即:

则令

      Z(k)=X(k)T(k)+Y(k)T(k+1)    k=0,1,…N-1                (9)

或    Z(k)=X(k)T(k+1)+Y(k)T(k)    k=0,1,…N-1                (10)

以上两种形式均可,相当于把俩个频谱的对应谐波分量进行覆盖性插值,称为覆盖性频域插值(Frequency Replacement-Insertion)。因为实序列的谱线是关于原点和N/2(N为偶数)共轭对称的,按上述定义的插值函数T(n)恰好把俩个共轭谱线(对应同一谐波分量)同时(插值)替换了。

步骤106:对覆盖性插值后得到的频谱Z(k)做离散傅立叶逆变换(IDFT)。得到与Z(k)对应得时域序列z(n),即:

      z(n)=IDFT[Z(k)]    n=0,1,…N-1                        (11)

易知,这一步也可以通过IFFT得到z(n)。

步骤107:将经过频域混音后的信号z(n)写入缓冲区。在这一过程中应注意帧移(overlap)的影响。

设后一帧与前一帧的帧移为M(0≤M<N)。

则令:

>>x>1>>(>n>)>>=ver>>x>~>>>(>n>+>N>->M>)>>×>w>>(>n>)>>n>=>0,1,2>,>·>·>·>N>->1>->->->>(>12>)>>>s>

>>y>1>>(>n>)>>=ver>>y>~>>>(>n>+>N>->M>)>>×>w>>(>n>)>>n>=>0,1,2>,>·>·>·>N>->1>->->->>(>13>)>>>s>

x1(n)、y1(n)为后一帧的时域音频序列。

对x1(n)、y1(n)重复步骤102~步骤106的操作,得到z1(n)。

设为混音后的时域音频序列,则z(n)的前N-M个点与z1(n)的前M个点便一起构成了的第一帧的N个点,即:

>ver>>z>~>>>(>n>)>>×>w>>(>n>)>>=> >>>z>>(>n>)>>>>n>=>0,1,2>,>·>·>·>N>->M> >>>z>1>[>n>->>(>N>->M>)>>]>>>n>=>N>->M>,>·>·>·>N>->1> > >->->->>(>14>)>>>s>

以上是得到了混音序列的完整一帧。

步骤108:以此类推,只要对和重复步骤102~步骤107,即可得出最后的混音序列

频域混音作为一种非线性变换,相对于时域混音的线性叠加方法从根本上克服了混音中的“溢出”问题,从而彻底解决了经典混音算法中的“削波失真”问题。

由上述可知,频域混音先是对原音频信号的频谱进行抽取,然后再在频域构造新的频谱以生成新的音频信号,实际上是对原音频信号谐波成分的重构。

就如MP3压缩一样,MP3为了获得更大的压缩比,实际上是一种对音频数据的有损压缩;而频域混音为了避免经典混音算法中的溢出问题,实际上是一种对音频数据的有损混音。然而通过听觉实验可以发现这种程度的失真人耳一般是很难察觉出来的。

频域混音算法的设计初衷是针对嵌入式移动终端开发的,目的是为了在移动终端上提共形成特定语音效果的实时音效处理。所以在不过分苛求音质的情况下,频域混音算法能够提供很好的“音效级”混合效果,例如将一段语音与一段背景声音实时混合到一起,作为手机的音效铃声等等。实际上对于任何嵌入式系统,“溢出”问题都是最让人头痛的,因为嵌入式系统相对于桌面系统需要更高的集成度以减小其体积,而体积有限的情况下存贮器(输入缓冲区,累加器,输出缓冲区)的容量必然不会很大,因而对数据的动态范围便会有严格的限制。

频域混音的最大特点是有效地解决了经典混音中的溢出问题,尤其对于嵌入式终端(如定点DSP)上的实时双路音频流混合,提供了足以令人满意的音效级混音效果。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号