专利名称:一种自动放大音量的方法
技术领域:
本发明属于语音传输技术领域,尤其涉及一种在语音传输过程中,自动放大音量的方法。
背景技术:
当前,通过视频会议系统,以及采用例如即时通讯(IM)工具的软件,能够实现语音传输,从而实现两地的语音交互。在该语音传输过程中,经常会出现通话一方由于把本地系统音量调得比较低,而导致在接收端音量过低而使接收方无法听清楚的现象。此时,如果接收端用户以手动方式将本地系统音量调高,则又会影响到本地其它设备的放音效果,尤其是在多方参与的视频会议系统以及多方通话系统中,一个接收端用户往往同时接收到多个发送端用户的多路语音,而这些多路语音的音量高低不一,如果此时还选择整体调高本地音量,则可能导致原本为正常音量的语音也同样被放大,最终影响接收端用户的听觉质量。因此,需要在接收端引入一个音量自动放大机制。
在现有技术中,采用自动增益控制(AGC,Automatic Gain Control)技术实现音量的自动放大,该技术的核心思想在于将接收到的语音流分成固定大小的处理块(block),每个处理块中包含若干个样本点量化振幅值数据。根据当前接收到的语音的音量高低,按照某种算法为每个处理块计算出一个放大倍数(Gain),然后,将这个放大倍数乘以每个样本点的振幅值并输出,从而达到音量自动放大的效果。在计算放大倍数时,必须同时考虑放大倍数应当小于当前处理块的最大放大倍数,也就是说,控制放大后的振幅值不能超过最大的量化等级,例如,当语音的量化等级为16位时,应该保证放大后的样本点振幅值不能超过215-1,即不能超过32767。因此可见,在音量放大过程中,音量的放大受到处理块最大放大倍数的限制。
由此可见,现有技术所提供的方法虽然能够实现音量的自动放大,但是,语音放大效果会由于最大放大倍数的限制而受到影响,表现在在一段语音中,总会出现偶尔的音量超高时段,这些超高时段对应的样本点的振幅值相对于其周围样本点的振幅值高出很多;在现有技术中,为了使所有的样本点经过放大后都不失真,必须找出该语音段中最高的样本点振幅值,以该振幅值作为标准来计算所允许的最大放大倍数,并以该最大放大倍数作为语音放大过程中所采用的放大倍数的上限;由于超高振幅值样本点的存在,必然导致现有技术以该超高振幅值作为标准计算最大放大倍数,其所计算得到的最大放大倍数必然较小,以该较小的放大倍数作为语音放大过程中的放大倍数上限,会影响语音中大部分正常语音流的放大效果。
另外,现有技术在计算放大倍数时,忽略了处于静音期间的情况,当通话处于静音期间时,所计算出的放大倍数往往很大,而现有技术没有对静音期间进行任何限制,因此,在静音期间,会出现由于放大倍数很大而导致背景声音被超高放大从而在接收端出现啸叫声的现象,该啸叫声会严重影响接收端的听觉效果。
发明内容
有鉴于此,本发明的主要目的在于提供一种自动放大音量的方法,该方法引入失真率参数,从而将那些少数的超高振幅值样本点忽略掉,从而保证语音中大部分正常语音流的放大效果。进一步地,在本发明中,设置专门用于限制静音期间的最大放大倍数参数,利用该参数来避免语音放大过程中在静音期间出现啸叫声。
为实现上述目的,本发明提供了一种自动放大音量的方法,该方法包括步骤A根据预先设定的失真率参数,计算得到满足该失真率的最大振幅值,然后,样本点的最大振幅值除以该满足失真率的最大振幅值,得到最大放大倍数;
步骤B将语音处理块中的各个样本点的振幅值分别乘以步骤A得到的最大放大倍数,得到新的振幅值并输出。
其中,在步骤A和步骤B之间,该方法进一步包括步骤C比较步骤A所得到的最大放大倍数是否大于预先设定的最大放大倍数参数,如果是,则以预先设定的最大放大倍数参数作为最大放大倍数,然后执行步骤B,否则,直接执行步骤B。
其中,步骤A包括步骤A11统计语音中每个振幅值所对应的样本点的个数;步骤A12从最高振幅值的绝对值开始,至振幅值为0结束,逐一递减地选择振幅值作为当前振幅值,判断当前振幅值以及已经选择过的振幅值所对应的样本点的个数之和与一个处理块中的样本点个数的比值是否小于预先设定的失真率参数,如果是,则返回步骤A12,否则,以当前振幅值作为所述满足失真率参数的最大振幅值;步骤A13用语音中样本点的最大振幅值的绝对值除以满足失真率参数的最大振幅值,得到所述最大放大倍数。
其中,步骤A12包括步骤A121设当前振幅值i,该当前振幅值i的初始值为样本点的最大振幅值的绝对值-1;步骤A122计算当前振幅值i对应的样本点个数,将该样本点个数与已经选择过的振幅值所对应的样本点的个数相加,并将相加结果赋值给变量TotalNum;其中,TotalNum的初始值为0;步骤A123用TotalNum除以一个处理块中的样本点个数,得到当前失真率,判断该失真率是否小于预先设定的失真率参数,如果是,则执行步骤A124,否则,执行步骤A125;步骤A124当前振幅值i减1,并将相减结果赋值给当前振幅值i,然后,判断该当前振幅值i是否小于0,如果是,则退出本流程,否则,返回步骤A122;步骤A125将当前振幅值i作为所述满足失真率参数的最大振幅值。
其中,步骤A包括步骤A21将处理块中的所有样本点振幅值进行缩小映射,然后,统计出映射后的每个振幅值所包含的样本点个数;步骤A22从缩小映射后的最高振幅值开始,至缩小映射后的振幅值为0结束,逐一递减地选择缩小映射后的振幅值作为当前振幅值,判断当前振幅值以及已经选择过的振幅值所对应的样本点的个数之和与一个处理块中的样本点个数的比值是否小于预先设定的失真率参数,如果是,则返回步骤A22,否则,以当前振幅值作为所述满足失真率参数的最大振幅值;步骤A23用缩小映射后的最大振幅值的绝对值除以满足失真率参数的最大振幅值,得到所述最大放大倍数。
其中,步骤A21包括步骤A211设定i为处理块中各个样本点的序号,i的初始值为0;步骤A212利用公式(1)计算缩小映射后的样本点的振幅值SmallRangeSample=SmallRangeMaxAmplitude×|Samplei|MaxAmplitude;]]>公式(1)步骤A213对保存有该振幅值SmallRangeSample的数组ScaleNum[SmallRangeSample]进行加1操作,从而将该振幅值的样本点数保存在该数组中;步骤A214将样本点的序号i加1并将计算结果赋值给i,判断i是否小于处理块中的样本点个数,如果是,则返回步骤A212,否则,结束本流程。
其中,步骤A22包括步骤A221设在缩小映射后的当前振幅值为i,该缩小映射后的当前振幅值的初始值为缩小映射后的最大振幅值的绝对值-1;步骤A222计算缩小映射后的当前振幅值对应的样本点个数,将该缩小映射后的当前振幅值对应的样本点个数与已经选择过的振幅值所对应的样本点的个数TotalNum相加,并将相加结果赋值给TotalNum;其中,TotalNum为变量,其初始值为0;步骤A223用TotalNum除以一个处理块中的样本点个数,得到当前失真率,判断该失真率是否小于预先设定的失真率参数,如果是,则执行步骤A224,否则,执行步骤A225;步骤A224当前振幅值i减1,并将相减结果赋值给当前振幅值i,然后,判断该当前振幅值i是否小于0,如果是,则退出本流程,否则,返回步骤A222;步骤A225将当前振幅值i作为所述满足失真率参数的最大振幅值。
其中,步骤B包括步骤B1逐个将处理块中的样本点的振幅值乘以步骤A所得到的最大放大倍数,分别得到样本点的新的振幅值;步骤B2分别对各个样本点的新的振幅值与样本点最大振幅值的绝对值之间的数值关系进行判断如果一个样本点的新的振幅值大于样本点最大振幅值的绝对值,则将该样本点最大振幅值的绝对值赋值给该样本点的新的振幅值;和,如果一个样本点的新的振幅值小于样本点最大振幅值绝对值的负值,则将该样本点最大振幅值绝对值的负值赋值给该样本点的新的振幅值;步骤B3分别将各个样本点的新的振幅值输出。
其中,该方法进一步包括调节所述失真率参数。
其中,该方法进一步包括调节所述最大放大倍数参数。
其中,所述失真率参数为5%,最大放大倍数参数为5。
可见,本发明通过设置失真率参数,将超高振幅值样本点忽略,计算得到最大放大倍数,并利用该最大放大倍数进行语音放大,从而保证了语音中大部分正常语音流的放大效果,提高了语音放大的质量;另外,通过引入最大放大倍数参数,使计算得到的最大放大倍数不超过该最大放大倍数参数,从而避免了放大过程中在静音期间出现啸叫声,提高了语音放大过程中的听觉质量。
图1为实现本发明的流程图。
图2为本发明一实施例中实现图1所示步骤A的流程图。
图3为本发明一实施例中实现图2所示步骤202的流程图。
图4为本发明一实施例中实现图1所示步骤A的流程图。
图5为本发明一实施例中实现图4所示步骤401的流程图。
图6为本发明一实施例中实现图4所示步骤402的流程图。
具体实施例方式
本发明为一种自动放大音量的方法,该方法引入失真率参数,利用该参数来忽略那些少数的超高振幅值的样本点,从而保证语音中大部分正常语音流的放大效果。另外,该方法还引入最大放大倍数参数,利用该参数解决静音期间的啸叫声问题。
下面结合附图对本发明进行详细描述。
参见图1,实现本发明需要以下步骤步骤A根据预先设定的失真率参数,计算得到满足该失真率的最大振幅值;样本点的最大振幅值除以计算得到的满足失真率的最大振幅值,得到最大放大倍数;步骤B将语音处理块中的各个样本点的振幅值分别乘以最大放大倍数,得到新的振幅值并输出。
其中,为了消除在静音期间可能出现的啸叫声问题,在步骤A和步骤B之间,本发明还可进一步包括以下步骤步骤C比较步骤A所得到的最大放大倍数是否大于预先设定的最大放大倍数参数,如果是,则以预先设定的最大放大倍数参数作为最大放大倍数,然后执行步骤B,否则,直接执行步骤B。
下面对步骤A和步骤B的具体实现进行详细介绍。在以下详细介绍中,均假设当前处理的语音流采样率为8000Hz,量化等级为16位,带符号,因此,样本点的最大振幅值为MaxAmplitude=215-1=32767,同时,假设每个语音处理块包含的样本点数SampleNumPerBlock=128;本发明同样也可适用于任何采样率、量化等级以及任何处理块大小的语音流。
一、步骤A的具体实现参见图2,在本发明一个实施例中,实现步骤A需要以下步骤步骤201统计每个振幅值所对应的样本点的个数;在本发明实施例中,采用数组ScaleNum[Samplei]保存每个振幅值所对应的样本点的个数,其中,i为处理块中的样本点的序号,其取值范围为0~SampleNumPerBlock,Samplei为处理块中第i个样本点的未放大时的振幅值,其取值范围为0~MaxAmplitude,其中,MaxAmplitude为最大振幅值的绝对值;利用该数组,统计每个振幅值所对应的样本点的个数的具体实现为逐个取处理块中的样本点,得到该样本点的振幅值Samplei,然后,对保存有该振幅值Samplei的数组ScaleNum[Samplei]进行加1操作,重复以上步骤,从而各个振幅值所对应的数组ScaleNum[Samplei]分别存储该数组对应的振幅值Samplei所对应的样本点个数;步骤202从最高振幅值的绝对值MaxAmplitude开始,至振幅值为0结束,逐一递减地选择振幅值作为当前振幅值,判断当前振幅值以及已经选择过的振幅值所对应的样本点的个数之和与一个处理块中的样本点个数SampleNumPerBlock的比值是否小于预先设定的失真率参数,如果是,则返回步骤202,否则,以当前振幅值作为满足失真率参数的最大振幅值MaxDistortionSample;其中,参见图3,利用步骤201中所述的数组ScaleNum[Samplei],具体实现步骤202为步骤301设当前振幅值i,该当前振幅值的初始值为MaxAmplitude-1,其中,MaxAmplitude为最大振幅值的绝对值,在本发明实施例中,取MaxAmplitude=32767,则该当前振幅值的初始值为32766;步骤302计算当前振幅值对应的样本点个数ScaleNum[i],将该ScaleNum[i]与已经选择过的振幅值所对应的样本点的个数TotalNum相加,并将相加结果赋值给TotalNum;其中,TotalNum的初始值为0;步骤303~步骤304用TotalNum除以一个处理块中的样本点个数SampleNumPerBlock,得到当前失真率,判断该当前失真率是否小于预先设定的失真率参数,如果是,则执行步骤305,否则,执行步骤307;步骤305~步骤306当前振幅值i减1,并将相减结果赋值给当前振幅值i,然后,判断该当前振幅值i是否小于0,如果是,则退出本流程,提示用户计算最大放大倍数失败,否则,返回步骤302;步骤307将当前振幅值i作为所述满足失真率参数的最大振幅值MaxDistortionSample;以上为步骤202的具体实现,参见图2,在执行完步骤202之后,还需要执行步骤203,以实现步骤A步骤203用最大振幅值的绝对值MaxAmplitude除以满足失真率参数的最大振幅值MaxDistortionSample,得到所述最大放大倍数Amplifier;二、步骤B的具体实现逐个将处理块中的样本点的振幅值乘以步骤A所得到的最大放大倍数,分别得到样本点的新的振幅值,分别对各个样本点的新的振幅值与MaxAmplitude之间的数值关系进行判断如果一个样本点的新的振幅值大于MaxAmplitude,则将该MaxAmplitude赋值给该样本点的新的振幅值,如果一个样本点的新的振幅值小于-MaxAmplitude,则将该-MaxAmplitude赋值给该样本点的新的振幅值;然后,分别将各个样本点的新的振幅值输出。
以上为本发明的一个实施例的具体实现,由于样本点的最大振幅值一般较大,如32767,因此,为了能够减少自动放大音量过程中的计算量,参见图4,还可采用如下方式实现步骤A步骤401将处理块中的所有样本点振幅值进行缩小映射,然后,统计出映射后的每个振幅值所包含的样本点个数;在本发明实施例中,将样本点振幅值从0~MaxAmplitude映射到较小空间域0~SmallRangeMaxAmplitude中,其中,SmallRangeMaxAmplitude为缩小映射后的最大振幅值的绝对值,根据实际测试可以得到该值,在本发明实施例中,SmallRangeMaxAmplitude=512;参见图5,步骤401的具体实现为步骤501设定i为处理块中各个样本点的序号,i的初始值为0;步骤502计算映射后的样本点的振幅值SmallRangeSample=SmallRangeMaxAmplitude×|Samplei|MaxAmplitude;]]>步骤503对保存有该振幅值SmallRangeSample的数组ScaleNum[SmallRangeSample]进行加1操作,从而将该振幅值的样本点数保存在该数组中;步骤504~步骤505将样本点的序号i加1并将计算结果赋值给i,判断i是否小于SampleNumPerBlock,如果是,则返回步骤502,否则,结束本流程;参见图4,执行步骤401之后,再执行以下步骤402步骤402从缩小映射后的最高振幅值的绝对值SmallRangeMaxAmplitude开始,至缩小映射后的振幅值为0结束,逐一递减地选择缩小映射后的振幅值作为当前振幅值,判断当前振幅值以及已经选择过的振幅值所对应的样本点的个数之和与一个处理块中的样本点个数的比值是否小于预先设定的失真率参数,如果是,则返回步骤402,否则,以当前振幅值作为所述满足失真率参数的最大振幅值;参见图6,步骤402的具体实现为
步骤601设缩小映射后的当前振幅值为i,该缩小映射后的当前振幅值的初始值为SmallRangeMaxAmplitude-1,在本发明实施例中为512-1=511;步骤602计算缩小映射后的当前振幅值对应的样本点个数ScaleNum[i],将该ScaleNum[i]与已经选择过的振幅值所对应的样本点的个数TotalNum相加,并将相加结果赋值给TotalNum;其中,TotalNum的初始值为0;步骤603~步骤604用TotalNum除以一个处理块中的样本点个数SampleNumPerBlock,得到当前失真率,判断该当前失真率是否小于预先设定的失真率参数,如果是,则执行步骤605,否则,执行步骤607;步骤605~步骤606当前振幅值i减1,并将相减结果赋值给当前振幅值i,然后,判断该当前振幅值i是否小于0,如果是,则退出本流程,提示用户计算最大放大倍数失败,否则,返回步骤602;步骤607将当前振幅值i作为所述满足失真率参数的最大振幅值MaxDistortionSample;以上为步骤402的具体实现,其中,步骤402的具体实现与步骤202的具体实现基本一致,不同之处仅在于在步骤601中,以缩小映射后的值SmallRangeMaxAmplitude-1作为i的初始值,从而大大减少了运算量;在执行完步骤402之后,还需要执行步骤403,以实现步骤A步骤403用缩小映射后的最大振幅值的绝对值SmallRangeMaxAmplitude除以满足失真率参数的最大振幅值MaxDistortionSample,得到所述最大放大倍数Amplifier;可见,利用如上步骤实现步骤A,由于将样本点的振幅值从一个很大的范围缩小映射到一个较小范围,并在这个范围内计算最大放大倍数,因此,能够大大减小计算放大倍数时的计算量,从而有利于该方法的实际应用。
在本发明中,用户可以根据实际需要对所述的失真率参数和最大放大倍数参数进行调节如果用户不允许语音放大后的语音流存在失真现象,并且想最大限度的放大音量,则可将失真率参数设为0,而将最大放大倍数参数设置为一个比较大的数,如10;如果为了避免在静音期间由于背景声音被过高放大而出现啸叫声,则可将最大放大倍数参数的值调低;在本发明实施例中,优选失真率参数5%,最大放大倍数参数为5,在此情况下接收端的语音放大的综合效果最佳。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种自动放大音量的方法,其特征在于,该方法包括步骤A根据预先设定的失真率参数,计算得到满足该失真率的最大振幅值,然后,样本点的最大振幅值除以该满足失真率的最大振幅值,得到最大放大倍数;步骤B将语音处理块中的各个样本点的振幅值分别乘以步骤A得到的最大放大倍数,得到新的振幅值并输出。
2.根据权利要求1所述的方法,其特征在于,在步骤A和步骤B之间,该方法进一步包括步骤C比较步骤A所得到的最大放大倍数是否大于预先设定的最大放大倍数参数,如果是,则以预先设定的最大放大倍数参数作为最大放大倍数,然后执行步骤B,否则,直接执行步骤B。
3.根据权利要求1或2所述的方法,其特征在于,步骤A包括步骤A11统计语音中每个振幅值所对应的样本点的个数;步骤A12从最高振幅值的绝对值开始,至振幅值为0结束,逐一递减地选择振幅值作为当前振幅值,判断当前振幅值以及已经选择过的振幅值所对应的样本点的个数之和与一个处理块中的样本点个数的比值是否小于预先设定的失真率参数,如果是,则返回步骤A12,否则,以当前振幅值作为所述满足失真率参数的最大振幅值;步骤A13用语音中样本点的最大振幅值的绝对值除以满足失真率参数的最大振幅值,得到所述最大放大倍数。
4.根据权利要求3所述的方法,其特征在于,步骤A12包括步骤A121设当前振幅值i,该当前振幅值i的初始值为样本点的最大振幅值的绝对值-1;步骤A122计算当前振幅值i对应的样本点个数,将该样本点个数与已经选择过的振幅值所对应的样本点的个数相加,并将相加结果赋值给变量TotalNum;其中,TotalNum的初始值为0;步骤A123用TotalNum除以一个处理块中的样本点个数,得到当前失真率,判断该失真率是否小于预先设定的失真率参数,如果是,则执行步骤A124,否则,执行步骤A125;步骤A124当前振幅值i减1,并将相减结果赋值给当前振幅值i,然后,判断该当前振幅值i是否小于0,如果是,则退出本流程,否则,返回步骤A122;步骤A125将当前振幅值i作为所述满足失真率参数的最大振幅值。
5.根据权利要求1或2所述的方法,其特征在于,步骤A包括步骤A21将处理块中的所有样本点振幅值进行缩小映射,然后,统计出映射后的每个振幅值所包含的样本点个数;步骤A22从缩小映射后的最高振幅值开始,至缩小映射后的振幅值为0结束,逐一递减地选择缩小映射后的振幅值作为当前振幅值,判断当前振幅值以及已经选择过的振幅值所对应的样本点的个数之和与一个处理块中的样本点个数的比值是否小于预先设定的失真率参数,如果是,则返回步骤A22,否则,以当前振幅值作为所述满足失真率参数的最大振幅值;步骤A23用缩小映射后的最大振幅值的绝对值除以满足失真率参数的最大振幅值,得到所述最大放大倍数。
6.根据权利要求5所述的方法,其特征在于,步骤A21包括步骤A211设定i为处理块中各个样本点的序号,i的初始值为0;步骤A212利用公式(1)计算缩小映射后的样本点的振幅值SmallRangeSample=SmallRangeMaxAmplitude×|Samplei|MaxAmplitude;]]>公式(1)步骤A213对保存有该振幅值SmallRangeSample的数组ScaleNum[SmallRangeSample]进行加1操作,从而将该振幅值的样本点数保存在该数组中;步骤A214将样本点的序号i加1并将计算结果赋值给i,判断i是否小于处理块中的样本点个数,如果是,则返回步骤A212,否则,结束本流程。
7.根据权利要求5所述的方法,其特征在于,步骤A22包括步骤A221设在缩小映射后的当前振幅值为i,该缩小映射后的当前振幅值的初始值为缩小映射后的最大振幅值的绝对值-1;步骤A222计算缩小映射后的当前振幅值对应的样本点个数,将该缩小映射后的当前振幅值对应的样本点个数与已经选择过的振幅值所对应的样本点的个数TotalNum相加,并将相加结果赋值给TotalNum;其中,TotalNum为变量,其初始值为0;步骤A223用TotalNum除以一个处理块中的样本点个数,得到当前失真率,判断该失真率是否小于预先设定的失真率参数,如果是,则执行步骤A224,否则,执行步骤A225;步骤A224当前振幅值i减1,并将相减结果赋值给当前振幅值i,然后,判断该当前振幅值i是否小于0,如果是,则退出本流程,否则,返回步骤A222;步骤A225将当前振幅值i作为所述满足失真率参数的最大振幅值。
8.根据权利要求1或2所述的方法,其特征在于,步骤B包括步骤B1逐个将处理块中的样本点的振幅值乘以步骤A所得到的最大放大倍数,分别得到样本点的新的振幅值;步骤B2分别对各个样本点的新的振幅值与样本点最大振幅值的绝对值之间的数值关系进行判断如果一个样本点的新的振幅值大于样本点最大振幅值的绝对值,则将该样本点最大振幅值的绝对值赋值给该样本点的新的振幅值;和,如果一个样本点的新的振幅值小于样本点最大振幅值绝对值的负值,则将该样本点最大振幅值绝对值的负值赋值给该样本点的新的振幅值;步骤B3分别将各个样本点的新的振幅值输出。
9.根据权利要求1所述的方法,其特征在于,该方法进一步包括调节所述失真率参数。
10.根据权利要求2所述的方法,其特征在于,该方法进一步包括调节所述最大放大倍数参数。
11.根据权利要求2所述的方法,其特征在于,所述失真率参数为5%,最大放大倍数参数为5。
全文摘要
本发明为一种自动放大音量的方法,该方法包括步骤A根据预先设定的失真率参数,计算得到满足该失真率的最大振幅值,然后,样本点的最大振幅值除以该满足失真率的最大振幅值,得到最大放大倍数;步骤B将语音处理块中的各个样本点的振幅值分别乘以步骤A得到的最大放大倍数,得到新的振幅值并输出。该方法通过设置失真率参数,忽略超高振幅值样本点,计算得到最大放大倍数,利用该最大放大倍数进行语音放大,从而保证了语音中大部分语音流的放大效果,提高了语音放大质量;另外,通过引入最大放大倍数参数,使计算得到的最大放大倍数不超过该最大放大倍数参数,从而避免了放大过程中在静音期间出现啸叫声,提高了语音放大过程中的听觉质量。
文档编号H04N7/15GK1756074SQ200410080390
公开日2006年4月5日 申请日期2004年9月29日 优先权日2004年9月29日
发明者王麒 申请人:腾讯科技(深圳)有限公司