当前位置:文档之家› 数字变声器的设计

数字变声器的设计

摘要变声器是通过改变输入音频的音色、音调,并将变声后的音频输出的工具。

变声器是通过改变输入音频的音色、音调,并将变声后的音频输出的工具。

根据变声器材质不同,变声器分为变声器硬件和变声器软件。

变声器硬件,即通过硬件实现变声的工具本次课程设计是数字变声器的设计,整个程序使用MATLAB软件编写的。

一个GUI界面实现录入一段10~15秒的语音,同时绘制出该语音的时域波形和频域波形,并实现了对该语音的保存和打开。

关键字:变声器;MATLAB软件;变声基本原理;语音;GUI;目录前言 (1)第1章方案选择 (2)1.1设计方案 (2)1.2方案的选择 (2)第2章变声的基本原理 (3)2.1 基本概念 (3)2.2 变声的原理 (4)2.2.1 生成脉冲序列 (4)2.2.2 计算预测系数 (5)2.2.3 声道参数 (5)第3章程序设计及仿真分析 (7)3.1程序设计 (7)3.1.1 分帧处理 (7)3.1.2 计算预测系数 (7)3.1.3 计算激励信号 (7)3.1.4 重建语音 (8)3.1.5 基音周期 (8)3.1.6 合成激励的能量 (9)3.1.7 变声处理 (10)第4章GUI的设计 (11)4.1 GUI简介 (11)4.2 GUI界面设计 (11)4.3 GUI界面运行流程图 (13)4.4回调函数 (14)4.4.1切换按钮 (14)4.4.2 按钮 (15)参考文献 (19)设计总结 (20)前言我们每个人的声音不同,源于我们的每个人的音色和音调不同,我们所说的男中音、男高音,就是音调的不同,而即便音调一致,我们依然能区分出两个不同人的声音,或不同乐器的声音,这就是音色的不同。

变声器,正是借助对声音音色和音调的双重复合改变,实现输出声音的改变。

目前,语音伪装系统(变声器)被广泛应用于社会的各个领域。

语音伪装设备经常出现在以下几个方面:为了防止打击报复,保护举报人的人身安全的匿名举报系统;记者采访时对采访对象声音的处理,保护被采访人的安全;应用于电台或电视台,可对热线电话进行声音的处理。

独居女士和小孩;可用变声器应付骚扰电话和陌生人来访。

另外,在智能手机或者平板电脑等便携式移动终端中利用变声器开发的小游戏等。

因此,变声器的应用范围及其广泛。

我们每个人的声音不同,源于我们的每个人的音色和音调不同,我们所说的男中音、男高音,就是音调的不同,而即便音调一致,我们依然能区分出两个不同人的声音,或不同乐器的声音,这就是音色的不同。

变声器,正是借助对声音音色和音调的双重复合改变,实现输出声音的改变。

本次课程设计就是运用我们所学到的理论知识,用MATLAB软件来实现对语音信号的变声处理,理论联系实际,从而更好地掌握以及运用所学习的知识。

第1章方案选择1.1设计方案方案一:通过先对语音信号进行FFT变化得到频谱,然后搬移和改变基频,从而放大一部分频率并且减小一部分频率,从而实现对语音信号的变声处理。

另外还可以调整语速从而改变声音。

方案二:我们可以采用线性预测参数合成法。

线性预测参数合成法利用LPC语音分析方法,通过分析自然语音样本,计算出LPC系数,就可以建立信号产生模型,从而合成出语音,我们用周期脉冲序列构成的激励信号经过时变数字滤波器,并定期的改变激励参数和预测系数就能合成出语音。

然后我们可以通过调整共振峰来实现语音的变声。

1.2方案的选择方案一简单易懂,但是这种方法不易用参数进行控制,而且这种方法是通过频谱的搬移和改变来减小一部分的干扰,所以变声后的杂音较大,我们可以将它和滤波器结合起来。

方案二——线性预测参数合成法是目前比较简单和实用的一种语音合成方法,以其低数据率、低复杂度、低成本,受到特别的重视。

LPC语音分析方法可以有效地估计基本语音参数,如基音、共振峰、谱、声道面积函数等,可以对语音的基本模型给出精确的估计,而且计算速度较快。

这种方法可以比较容易的用参数进行控制。

综上所述:我们采用方案二——线性预测参数合成法来实现语音信号的变声处理。

第2章变声的基本原理2.1 基本概念1. 声道:声道是很多动物及人类都有的一个腔室,从声源产生的声音经由此处滤出。

人的声道包括声道则包括喉腔、咽头、口腔和鼻腔。

2. 基音:一般的声音都是由发音体发出的一系列频率、振幅各不相同的振动复合而成的。

这些振动中有一个频率最低的振动,由它发出的音就是基音,其余为泛音。

发音体整体振动产生的音,叫做基音,决定音高;发音体部分振动产生的音,叫做泛音,决定音色;基音和泛音结合一起而形成的音,叫做复合音,日常我们所听到的声音多为复合音。

3.共振峰:共振峰是指在声音的频谱中能量相对集中的一些区域,共振峰不但是音质的决定因素,而且反映了声道(共振腔)的物理特征。

声音在经过共振腔时,受到腔体的滤波作用,使得频域中不同频率的能量重新分配,一部分因为共振腔的共振作用得到强化,另一部分则受到衰减,得到强化的那些频率在时频分析的语图上表现为浓重的黑色条纹。

由于能量分布不均匀,强的部分犹如山峰一般,故而称之为共振峰。

在语音声学中,共振峰决定着元音的音质,而在计算机音乐中,它们是决定音色和音质的重要参数。

无论是人声还是乐器,它们的声音特性都源自两个因素,一个是发声系统,如人的声带或乐器的振动簧片,另一个是共鸣系统。

乐器不同的共鸣系统使其在一定频域中的分音的振幅得以突出,这样,这些区域就产生了这个乐器所特有的共振峰值,这些共振峰值同共鸣体的大小、形状的材料密切相关。

由于一件乐器的结构是稳定的,因此在一件乐器发出的所有音调中,不论基频如何,都会表现出相同的共振峰值,只不过其显著性有强有弱罢了。

这就可以帮助我们解释为什么在很多的乐器中,同一乐器所发出的不同音调具有相同的音质。

在语音声学中,人声也同样受自身生理如鼻孔、咽腔、口腔大小的影响有自身的共振峰区。

通过利用这些共鸣空间的形状和大小不同的变化(例如改变咽喉、嘴形),我们就能改变声音的共振峰。

我们之所以能够区分不同的人声、元音,主要也是依靠它们的共振峰分布的位置。

2.2 变声的原理声音的合成我们采用的方法是线性预测参数合成法。

如图 2.1,我们让周期脉冲序列构成的激励信号通过时变数字滤波器,然后通过改变激励参数和预测系数,就能合成出语音。

图 2.1 线性预测参数合成2.2.1 生成脉冲序列语音信号是一种随时间而变化的信号,主要分为浊音和清音两大类。

浊音的基音周期、清浊音信号幅度和声道参数等都随时间而缓缓变化。

由于发生器官的惯性运动,可以认为在一小段时间里(一般为10~30ms)语音信号近似不变,即语音信号具有短时平稳性。

这样可以把语音信号分为一些短段(称为分析帧)来进行处理。

语音信号的分帧是采用可移动的有限长度窗口进行加权的方法来实现的。

一般每秒帧数约为33~100帧,视实际情况而定。

分帧虽然可以采用连续分段的方法,但是一般要采用交叠分段的方法。

如图2.2所示,这是为了使帧与帧之间平滑过渡,保持其连续性。

前一帧和后一帧的交叠部分称为帧移,帧移与帧长的比值一般取为0~1/2。

图2.2 交叠分段方式所以我们首先将信号分成若干个10ms长的段,假设每个段内基音周期固定不变,但段和段之间则不同,具体为:PT=80+5mod(m;50) (3.1)其中PT表示基音周期,m表示段序号,我们知道每段的长度为80。

2.2.2 计算预测系数设语音信号的养殖序列为s(n),n=1,2,…,n,其中语音信号的当前取样值,即第n时刻的取样值s(n)。

而p阶线性预测,是根据信号过去p个取样值的加权和来预测信号当前取样的s(n),此时的预测器称为p阶预测器。

设(n)为s(n)的预测值,则有:(3.2)式中,,,…,称为线性预测系数,式(4.1)称为线性预测器,预测器的阶数为p 阶。

2.2.3 声道参数从物理声学可以容易推导出均匀断面的共振峰。

例如,对成人声道L=17cm长,其共振频率计算公式为:=c(2i-1)/4L, ( i=1,2,3,…,i) (3.3)其中,i是共振频率的序号,c=340m/s为声速。

按此算出前三个共振频率为,=1500Hz,=2500Hz。

由于发音时,声道的形状很少是均匀断面的。

因此必须通过语音信号来计算共振峰。

一个二阶谐振器的传输函数可以写为(3.4)实践表明,用前3个共振峰代表一个元音足够了。

对于较复杂的辅音或鼻音共振峰的个数要到5个以上。

多个叠加可以得到声道的共振峰模型在此,我们可以由传输函数和其中的预测系数和求出共振峰。

假设__D_Dd__________ðĝϨϨ_________|在时域冲击响应中的贡献为A,并且有__D_Dd__________׍ĝϨ因此共振峰频率为999.9447Hz。

实现代码如下:clear all;close all;clc;;a=[1,-];b=[1];[r,p,k]=residues(b,a);omega=abs(angle(p(1)));T=1/8000;freq=omega/(2*pi*T);从上面看,我们可以通过调整预测系数从而调整共振峰来实现语音信号的变声。

第3章程序设计及仿真分析3.1程序设计3.1.1 分帧处理对语音信号加Hamming窗处理,方法是用窗序列沿着语音样点值序列逐帧从左向右移动。

Hamming窗的窗函数如下:=(4.1)确定了窗函数以后,对语音信号的分帧处理,实际上就是对各帧进行某帧进行某种变换或运算。

代码如下:WL = 240;hw = hamming(WL);s_w = s(n*FL-WL+1:n*FL).*hw;3.1.2 计算预测系数代码如下:[A E] = lpc(s_w, P);3.1.3 计算激励信号对每帧语音信号s(n),和预测模型系数{},用filter函数计算激励信号e(n)。

此时应该注意在系数变化的情况下连续滤波,需要维持滤波器的状态不变,要利用filter函数的和参数。

这里要利用_pre,利用_pre作为初始状态得到最终状态,本次循环得到的最终状态作为下次循环的初始状态,并把每次循环得到的激励保存下来。

代码如下:s_f=s((n-1)*FL+FL+1:n*FL); %本帧语音[exc_f,zi_pre]=filter(A,1,s_f,zi_pre); %计算s_f的激励exc((n-1)*FL+1:n*FL)=exc_f; %保存得到的激励3.1.4 重建语音用计算得到的激励信号e(n)和预测模型系数{},用fliter函数计算重建语音。

同样要注意维持滤波器的状态不变。

这里我们由激励得到语音,并且要利用_rec,利用_rec作为初始状态的到最终状态,本次循环得到的最终状态作为下次循环的初始状态,并且把每次循环得到的重建语音保存下来。

代码如下:[rec_f,zi_rec]=filter(1,A,exc_f,zi_rec); %计算重建语音s_rec((n-1)*FL+1:n*FL)=rec_f; %保存得到的重建语音3.1.5 基音周期基音周期是表征语音信号本质特征的参数,属于语音分析的范畴,只有准确分析并且提取出语音信号的特征参数,才能够利用这些参数进行语音合成处理。

相关主题