位置:51电子网 » 技术资料 » 音响技术

数字音频变调算法的研究

发布时间:2008/5/28 0:00:00 访问次数:752

1 引言

改变声音信号的音调是许多商用设备的一种功能,最典型的应属卡拉ok机了。由于发音音调高低因人而异,人们希望伴奏音乐的音调适合自己的嗓音,因此卡拉ok机中设计了专门的硬件来实现这一功能。例如雅马哈公司的用于数字变调的大规摸集成电路 yss222d和yss216b,内部集成了a/d,d/a和数字信号处理器,利用采样和重放数据时速度的不同来实现变调。功能,重放比采样速度快则升调,反之则降调。另外,为了使播放时间不变,还需对数据段进行复制或删除。由于商业保密的需要,具体算法未公开,据可询资料实现的系统,不能有效解决因复制或删除数据带来的相位不连续问题。

当前,声卡已成为计算机的基本配置,但无变调功能,为弥补这一缺憾,可以采用件的方法对声音文件重新编码,使声卡回放时音调改变。另外,数字音频工作站也需要软件实现变调功能。因此笔者讨论了3种软件实现算法,围绕着如何变调而不变时间,以及如何解决相位不连接问题,从变调原理着手,讨论了时域实现的理论依据,最后找到了一种有效的变调方法-- 频域处理法,实验证实效果良好。

2 变调的乐理基础
声音是由物体振动产生的,声音的基本要素有:音调、音强和音色。乐音体系根据振动频率即音调的不同,将乐音分成音级,基本音级广泛采用cdefgab这8个字母命名,某音级与往上数8个音级之间的距离称为"纯八度",世界上普遍采用的12平均律将一个纯八度分成12个均等的半音,相邻两个半音间的物理振动频率相差21/12倍,也就是说各半音间的振动频率成等比关系,一个纯八度频率相差2倍。

如果将信号中的所有频率成分升高或降低21/12倍,就能使音调升高或降低一个半音。假设原信号频率为f,变调后频率为f,二者的关系应该满足

f=fx2d/12, d=±1 ,±2,±3 (1)

当d>0时,升调,反之,降调;d每变化1,音调升高或降低一个半音。

3 时域实现的依据及存在的问题

一种实现变调的作法[1],[2]是采用硬件实现相似的办法,即改变wav文件头中有关采样率的信息。如果采样率提高,则声卡回放速度加快,产生升调的效果,同时回放时间变短;反之,产生降调的效果,回放时间变长。为保持时间不变,以帧为单位,利用信号的短时周期性,升调时将帧内后部数据段复制,降调时将帧内后部数据段删除,图1画出了一帧的数据处理情况。可以看到,若是升调,帧间数据是连续的,但由于数据段的复制,帧内数据段间相位不连续;若是降调,帧内数据连续,但帧间数据相位不连续,因此声音质量必然受到影响,产生喀嚓声。

另一种方法是,采用时域抽选和内插[4]。下面分析抽选和内插的频谱,看如何实现变调。抽选表示成下式

xd[n]=[nm] (2)

表示每m个采样值选1个,其余m-1个舍弃,则信号长度缩短为1/m。抽选后信号频谱和原信号频谱间的关系为

1 m-1
xd(ejω)=-σ x[ej(ω/m-2πi/m (3)
m i=0

图2所示粗线为m=2的抽选信号频谱,粗实线为m=2的抽选信号频谱,可以看出,抽选后信号的频率成分均为原来的2倍,所以能实现升调。为防止抽选后频谱混叠,抽选前必须作抗混叠数字低通滤波,截止频率为π/m。

再看看内插的频谱变化。内插时域表示成

xi[n]={x[n/l,n=o,±l,+2l,+3l, ... (4)
0, 其它

表示每两个采样值中插入l-1个零,整个信号长度增加为l倍。内插后信号频谱和原信号频谱间的关系为

xi(ejω)=x(ejlω) (5)

图2虚线所示为l=2的内插信号频谱,可以看出,所有频率成分均为原信号的1/2,所以能实现降调。为不产生镜像频率成分,内插后必须作反镜像数字低通滤波,截止频率π/l,也可用线性内插取代插零,而无须反镜像滤波。

抽选和内插后的数据量同样会变短或变长,下面来推导保持数据量不变的具体实现方法。根据上述抽选和内插的频谱变化情况,反推时域变化过程:若将信号作快速离散傅里叶变换(fft),将谱线沿频率轴扩张或收缩,再作反变换(ifft),得到的信号应该是被升调或降调,并且数据量保持不变。

非整数倍的变调可由抽选和内插结合实现,

1 引言

改变声音信号的音调是许多商用设备的一种功能,最典型的应属卡拉ok机了。由于发音音调高低因人而异,人们希望伴奏音乐的音调适合自己的嗓音,因此卡拉ok机中设计了专门的硬件来实现这一功能。例如雅马哈公司的用于数字变调的大规摸集成电路 yss222d和yss216b,内部集成了a/d,d/a和数字信号处理器,利用采样和重放数据时速度的不同来实现变调。功能,重放比采样速度快则升调,反之则降调。另外,为了使播放时间不变,还需对数据段进行复制或删除。由于商业保密的需要,具体算法未公开,据可询资料实现的系统,不能有效解决因复制或删除数据带来的相位不连续问题。

当前,声卡已成为计算机的基本配置,但无变调功能,为弥补这一缺憾,可以采用件的方法对声音文件重新编码,使声卡回放时音调改变。另外,数字音频工作站也需要软件实现变调功能。因此笔者讨论了3种软件实现算法,围绕着如何变调而不变时间,以及如何解决相位不连接问题,从变调原理着手,讨论了时域实现的理论依据,最后找到了一种有效的变调方法-- 频域处理法,实验证实效果良好。

2 变调的乐理基础
声音是由物体振动产生的,声音的基本要素有:音调、音强和音色。乐音体系根据振动频率即音调的不同,将乐音分成音级,基本音级广泛采用cdefgab这8个字母命名,某音级与往上数8个音级之间的距离称为"纯八度",世界上普遍采用的12平均律将一个纯八度分成12个均等的半音,相邻两个半音间的物理振动频率相差21/12倍,也就是说各半音间的振动频率成等比关系,一个纯八度频率相差2倍。

如果将信号中的所有频率成分升高或降低21/12倍,就能使音调升高或降低一个半音。假设原信号频率为f,变调后频率为f,二者的关系应该满足

f=fx2d/12, d=±1 ,±2,±3 (1)

当d>0时,升调,反之,降调;d每变化1,音调升高或降低一个半音。

3 时域实现的依据及存在的问题

一种实现变调的作法[1],[2]是采用硬件实现相似的办法,即改变wav文件头中有关采样率的信息。如果采样率提高,则声卡回放速度加快,产生升调的效果,同时回放时间变短;反之,产生降调的效果,回放时间变长。为保持时间不变,以帧为单位,利用信号的短时周期性,升调时将帧内后部数据段复制,降调时将帧内后部数据段删除,图1画出了一帧的数据处理情况。可以看到,若是升调,帧间数据是连续的,但由于数据段的复制,帧内数据段间相位不连续;若是降调,帧内数据连续,但帧间数据相位不连续,因此声音质量必然受到影响,产生喀嚓声。

另一种方法是,采用时域抽选和内插[4]。下面分析抽选和内插的频谱,看如何实现变调。抽选表示成下式

xd[n]=[nm] (2)

表示每m个采样值选1个,其余m-1个舍弃,则信号长度缩短为1/m。抽选后信号频谱和原信号频谱间的关系为

1 m-1
xd(ejω)=-σ x[ej(ω/m-2πi/m (3)
m i=0

图2所示粗线为m=2的抽选信号频谱,粗实线为m=2的抽选信号频谱,可以看出,抽选后信号的频率成分均为原来的2倍,所以能实现升调。为防止抽选后频谱混叠,抽选前必须作抗混叠数字低通滤波,截止频率为π/m。

再看看内插的频谱变化。内插时域表示成

xi[n]={x[n/l,n=o,±l,+2l,+3l, ... (4)
0, 其它

表示每两个采样值中插入l-1个零,整个信号长度增加为l倍。内插后信号频谱和原信号频谱间的关系为

xi(ejω)=x(ejlω) (5)

图2虚线所示为l=2的内插信号频谱,可以看出,所有频率成分均为原信号的1/2,所以能实现降调。为不产生镜像频率成分,内插后必须作反镜像数字低通滤波,截止频率π/l,也可用线性内插取代插零,而无须反镜像滤波。

抽选和内插后的数据量同样会变短或变长,下面来推导保持数据量不变的具体实现方法。根据上述抽选和内插的频谱变化情况,反推时域变化过程:若将信号作快速离散傅里叶变换(fft),将谱线沿频率轴扩张或收缩,再作反变换(ifft),得到的信号应该是被升调或降调,并且数据量保持不变。

非整数倍的变调可由抽选和内插结合实现,

相关IC型号
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!