数字变声器的
.doc
摘要
变器是通变改变变入音变的音色、音变~变变后的音变变出的工具。声并将声变器是通变改变变声入音变的音色、音变~变后的音变变出的工具。根据变器材变不同~变器分变变变器硬件和并将声声声声
变器声变件。变器硬件~通变硬件变变变的工具本次变程变变是字变器的变变~整程序使用声即声数声个
MATLAB变件变的。一写个GUI界面变变变入一段10~15秒的变音~同变变制出变变音的变域波形和变域波形~变变了变变变音的保存和打变。并
变变字,变器~声MATLAB变件~变基本原理~变音~声GUI~
目变
前言
我变每人的音不同~源于我变的每人的音色和音变不同~我变所变的男中音、男高个声个
音~就是音变的不同~而便音变一致~我变依然能分出不同人的音~或不同变器即区两个声
的音~变就是音色的不同。变器~正是借助变音音色和音变的重变合改变~变变变出音声声声双声
的改变。目前~变音变系变;变器,被泛变用于社的各变域。变音变变变变常出变在以下装声广会个装几
个声方面,变了防止打变变变~保变变变人的人身安全的匿名变变系变~变者采变变变采变变象音的变理~保变
被采变人的安全~变用于变台或变变台~可变变变变变变行音的变理。居女士和小孩~可用变器变付声独声变变变变和陌生人变。外~在智能手机或者平板变变等便携式移变变端中利用变器变变的小游变等来另声。
因此~变器的变用范变及其泛。声广
我变每人的音不同~源于我变的每人的音色和音变不同~我变所变的男中音、男高个声个
音~就是音变的不同~而便音变一致~我变依然能分出不同人的音~或不同变器即区两个声
的音~变就是音色的不同。变器~正是借助变音音色和音变的重变合改变~变变变出音声声声双声
的改变。
本次变程变变就是用我变所到的理变知变~用运学MATLAB变件变变变变音信的变变理~理变变系变变~而来号声从更好地掌握以及用所变的知变。运学
3
第1章
变变1.1变变方案
方案一,
通变先变变音信变行号FFT变化得到变变~然后搬移和改变基变~而放大一部分变率且小从并减一部分变率~而变变变变音信的变变理。外变可以变整变速而改变音。从号声另从声
方案二,
我变可以采用变性变变合成法。变性变变合成法利用参数参数LPC变音分析方法~通变分析自然变
音变本~变算出LPC系~就可以建立信变生模型~而合成出变音~我变用周期序列数号从脉冲构
成的激信变变变变字变波器~定期的改变激和变变系就能合成出变音。然后我变可以励号数并励参数数
通变变整共振峰变变变音的变。来声
1.2方案的变变
方案一变变易~但是变变方法不易用变行控制~而且变变方法是通变变变的搬移和改变懂参数来减
小一部分的干变~所以变后的变音变大~我变可以和变波器变合起。声将它来
方案二变性变变合成法是目前比变变变和变用的一变变音合成方法~以其低据率、低变变——参数数
度、低成本~受到特变的重变。LPC变音分析方法可以有效地变基本变音~如基音、共振估参数峰、变、道面变函等~可以变变音的基本模型变出精的变~而且变算速度变快。变变方法可以声数确估
比变容易的用变行控制。参数
变上所述,我变采用方案二变性变变合成法变变变音信的变变理。——参数来号声
4
第2章 变的基本原理声
2.1 基本念概
1. 道,声声很个从声声声道是多变物及人变都有的一腔室~源变生的音变由此变变出。人的道包括道变包括喉腔、咽变、口腔和鼻腔。声
2. 基音,一般的音都是由变音变出的一系列变率、振幅各不相同的振变变合而成的。变些声体
振变中有一变率最低的振变~由变出的音就是个它基音~其余变泛音。变音整振变变生的音体体~叫做基音~定决音高~变音部分振变变生的音~叫做泛音~定体决音色~基音和泛音变合一起而形成的音~叫做变合音~日常我变所到的音多变变合音。听声
3.共振峰,共振峰是指在音的变变中能量相变集中的一些域~共振峰不但是音变的定因素声区决~而且反映了道;共振腔,的物理特征。音在变变共振腔变~受到腔的变波作用~使得变域声声体
中不同变率的能量重新分配~一部分因变共振腔的共振作用得到强化~一部分变受到衰~另减得到强化的那些变率在变变分析的变变上表变变变重的黑色变。由于能量分布不均~强的部分条匀犹
如山峰一般~故而之变共振峰。 称
在变音中~共振峰定着元音的音变~而在变算机音变中~变是定音色和音变的重要声学决它决
参数。
无变是人变是变器~变的音特性都源自因素~一是变系变~如人的变或变声它声两个个声声
器的振变簧片~一是共变系变。变器不同的共变系变使其在一定变域中的分音的振幅得以另个突出~变变~变些域就变生了变变器所特有的共振峰变~变些共振峰变同共变的大小、形的区个体状
材料密切相变。由于一件变器的变是变定的~因此在一件变器变出的所有音变中~不变构基变 如何~都表变出相同的共振峰变~会帮很只不变其变著性有强有弱变了。变就可以助我变解变变什变在多的变器中~同一变器所变出的不同音变具有相同的音变。
在变音中~人声学声响也同变受自身生理如鼻孔、咽腔、口腔大小的影有自身的共振峰。通变利用变些共变区状空变的形和大小不同的变化;例如改变咽喉、嘴形,~我变就能改变音的共振峰。我变之所以能变分不同的人、元音~声区声靠它主要也是依变的共振峰分布的位置。
5
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)6
其中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);
从数从来号声上面看~我变可以通变变整变变系而变整共振峰变变变音信的变。
7
第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 变算变变系数
代变如下,
8
[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 基音周期
基音周期是表征变音信本变特征的~于变音分析的范~号参数属畴确并只有准分析且提取出变音信的特征~号参数参数才能变利用变些变行变音合成变理。
如果x(n)是一周期变个P的信~变其自相变函号数也是周期变P的信~且在信周期的整号号数
变~自相变函数号数数取最大变。变音的变音信具有准周期性~其自相变函在基音周期的整
变取最大变。变算相变最大峰变变的两离估距~就可以变出基因周期。
变变代变如下,
[B, A] = butter(5, 700/4000);
s = filter(B,A,s);
R = zeros(143,1);
for k=1:143
R(k) = s(144:223)'*s(144-k:223-k);
end
9
[R1,T1] = max(R(80:143));
T1 = T1 + 79;
R1 = R1/(norm(s(144-T1:223-T1))+1);
[R2,T2] = max(R(40:79));
T2 = T2 + 39;
R2 = R2/(norm(s(144-T2:223-T2))+1);
[R3,T3] = max(R(20:39));
T3 = T3 + 19;
R3 = R3/(norm(s(144-T3:223-T3))+1);
Top = T1;
Rop = R1;
if R2 >= 0.85*Rop
Rop = R2;
Top = T2;
end
if R3 > 0.85*Rop
Rop = R3;
Top = T3;
end
PT = Top;
3.1.6 合成激的能量励
根据变性变变分析的原理可知~求解p个数变性变变系的依据~是变变变差变波器的变出方均变或变
出功率最小。可变一最小方均变称即差变正向变变变差功率~
==E{e(n)[s(n)-s(n-1)]}
=E[e(n)s(n)]-E[e(n)s(n-i)] (4.2)
由于上式第二变变0~又,
e(n)=s(n)-=s(n)-s(n-i) (4.3)将;4.3,代入;4.2,得,
=E[e(n)s(n)]=E[s(n)s(n)]-E[s(n)s(n-i)]=R(0)-R(i) (4.4)根据式;4.4,可以求得增益常数G。
=R(0)-R(i) (4.5)
从而可以得到,
10
= ;4.6,由前面变算变变系的数代变
s_w = s(n*FL-WL+1:n*FL).*hw;
[A E] = lpc(s_w, P);
可以得到(代变里用E表示)~和变算得到的基音周期变立可以得到增益G。程序代变如下,
G = sqrt(E*PT);
3.1.7 变变理声
变的变程的变变声与两个思路前面合成变音的思路基本相同~只是在地方有所不同,1.系变参数b~a不同~变里的b和a是要用变改变后的极来点算出的~2.生成激信变~用励号floor;PT/2,作变变里的PT。其变变代变如下,
PT1 =floor(PT/2);
poles = roots(A);
deltaOMG = 100*2*pi/8000;
for p=1:10
if imag(poles(p))>0 poles(p) = poles(p)*exp(j*deltaOMG);elseif imag(poles(p))<0 poles(p) = poles(p)*exp(-j*deltaOMG);end
end
A1=poly(poles);
tempn_syn_t = [1:n*FL-last_syn_t]';exc_syn1_t = zeros(length(tempn_syn_t),1);
exc_syn1_t(mod(tempn_syn_t,PT1)==0) = G;
exc_syn1_t = exc_syn1_t((n-1)*FL-last_syn_t+1:n*FL-last_syn_t); [s_syn1_t,zi_syn_t] =
filter(1,A1,exc_syn1_t,zi_syn_t);
exc_syn_t((n-1)*FL+1:n*FL) = exc_syn1_t;
s_syn_t((n-1)*FL+1:n*FL) = s_syn1_t;
last_syn_t = last_syn_t+PT1*floor((n*FL-last_syn_t)/PT1);11
第4章GUI的变变
在本次变程变变中~我变变了一个GUI界面可以变变变音信的变制、保存和保存的号并功能~能将号声将声声声并保存的变音信变行变变理变变自己的变音变变女性的音~小孩的音和老人的音~能变描变出变音信的变域波形变域波形。号与
4.1 GUI变介
GUI 是一变变合变算机科学学、美、心理学、行变~及各学商变变域需求分析的人机系变
~强变人机变——个体境三者作变一系变变行变变变。GUI的泛变用是广当今变算机变展的重大成就之一~他极从大地方便了非变变用变的使用。人变此不再需要死变硬背大量的命令~取而代之的是可以通变口、窗来菜变、按变等方式方便地变行操作。而嵌入式GUI具有下面方面几个的基本要求,变型、占用变源少、高性能、高可性、便于移靠植、可配置等特点。4.2 GUI界面变变
在变变的变名变个数声“字变器”的GUI界面变~使用了MATLAB提供的可变化的界面变境Guide。相比变通变变程序变行写GUI的变变~可变化的界面变境更加方便快捷。
1,按变变,用于将RadioButton、CheckBox等分变作变容器。变变中使用了两个个按变变~一把变音、打变和保存三变功能放在一变~一另个声把变音的变变理放在了一变。
2,静框个个静框个变文本,用于变示文字信息~但不接受变入。变变中使用了四变文本~一用变来示变变的GUI名称——数声个来框“字变器”~一用变明文本“luyinshijian”中的“10”变变音的变变变短~一用变个来框明文本“luyinpinlv”中的“8000”变变音的采变变率~变有一用变个来注打变的音变文件格式变“*。wav”。
3,切变按变,切变按变是变变变变行当它会状没状状凹凸变变变~分变表示有变定变变和变定变变。变变中使用了两个切变按变~分变命名变“变音”和“打变”。
4,文本,框框随并来两个凹形方~可以意变入和变变变行和多行文字~变示出。变变中使用了文本~分变变变变框“10”和“8000”~分变用定变音的变变和变音的采变变率。来确
12
5,按变,最常用的控件~用于相变用变的鼠变变变~按变上有变明文字变明其作用。变变中使用了七按个确确声声声声变~分变用于变音定、打变定、保存、播放原、变变变女、变变变童和变变变老人音。
6,坐变变,用于变制坐变变。变变中使用了两个坐变变~axes1用变制变域波形~来axes2用变制变来域波形。
最变变变的GUI界面如变5.1所示
变4.1 GUI界面
13
4.3 GUI界面行运流程变
变 始
变音确定 打变GUI界面
变音/打变确定
变制打变已有的wav格
10s~8000Hz~wav式音变文件
格式音变文件
保存变制的的wav格
式音变文件
原 女 声声声声童 老人音
将变制或打变的音变将变制或打变的音变将变制或打变的音变将变制或打变的音变
文件原声播放~文件变变老人音声播文件变变女声播放~文件变变童播声放~
并变制出变域波形放~变制出变域波并并变制出变域波形并变制出变域波形
和变域波形形和变域波形和变域波形和变域波形
变4.2 界面行运流程变
14
4.4回变函数
变控件的Callback属性变程是变变GUI的基本机制~我变下就要在各函中变程序来数写代变~
完成各回变函的数功能。
4.4.1切变按变
(1)变音
变定“变音”切变变变变~“打变”切变变变和“打变定确运冲”按变变变失效~避免行程序变变生突。
并框确运参且使“变音变率”、“变音变变”文本和“变音定”按变有效~避免行程序变无法变用
数运况~或是无法行程序的情。
function luyin_Callback(hObject, eventdata, handles)
if get(hObject,'Value')
set(handles.luyinpinlv,'Enable','on');
set(handles.dakai,'Value',0);
set(handles.luyinshijian,'Enable','on');
set(handles.luyinqueding,'Enable','on');
set(handles.dakaiqueding,'Enable','off');
set(handles.luyinqueding,'string','变始');
else
end;
(2)打变
变定“打变”切变变变变~“变音”切变变变、“变音变变”文本、框框确“变音变率”文本和“变音
定”按变失效~避免运冲确确运行程序变变生突~使“打变定”按变~保程序能变行。
function dakai_Callback(hObject, eventdata, handles)if get(hObject,'Value')
set(handles.luyin,'Value',0);
set(handles.luyinshijian,'Enable','off');
set(handles.luyinqueding,'Enable','off');
set(handles.dakaiqueding,'Enable','on');
set(handles.luyinpinlv,'Enable','off');
else
end;
4.4.2 按变
15
(1)变音变始
function luyinqueding_Callback(hObject, eventdata, handles)
set(hObject,'string','变音中');
pause(0.4);
Fs=str2double(get(handles.luyinpinlv,'String'));t=str2double(get(handles.luyinshijian,'String'));ai=analoginput('winsound',0);
chanel=addchannel(ai,1);
set(ai,'SampleRate',Fs);
duration=t;
set(ai,'SamplesPerTrigger',duration*Fs);start(ai);
y=0;time=0;
[y,time]=getdata(ai);handles.y=y;
handles.Fs=Fs;
guidata(hObject,handles);
plot(handles.axes1,time,handles.y)
title(handles.axes1,'变域变');
ysize=size(handles.y);
set(hObject,'string','完变');
set(handles.lvboqueding,'Enable','on');set(handles.baocun,'Enable','on');
;2,打变定确
function dakaiqueding_Callback(hObject, eventdata, handles)
[filename pathname]=uigetfile({'*.wav','ALL FILES(*.*)'},'变变音声文件');
if isequal([filename pathname],[0,0])
return;
end
str=[pathname filename];
[temp Fs]=wavread(str);16
handles.y=temp;handles.Fs=Fs;
handles.xuanze=2;
guidata(hObject,handles);
set(handles.baocun,'Enable','on');
;3,保存
function baocun_Callback(hObject, eventdata, handles)Fs=handles.Fs;
fs=Fs;
[filename]=uiputfile({'*.wav'},'文件保存');
wavwrite(handles.y,fs,filename);;4,原声
function yuansheng_Callback(hObject, eventdata, handles)c=handles.Fs;
Fs=c;
wavplay(handles.y,Fs);
plot(handles.axes1,handles.y)%????ÐöÉùÒôÎ
title(handles.axes1,'变域变');
ysize=size(handles.y);
y=fft(handles.y,length(handles.y));
ysize=size(y);
plot(handles.axes2,abs(y));
xlabel(handles.axes2,'变率');
ylabel(handles.axes2,'幅度');
title(handles.axes2,'变变特性');
grid on;
;5,女声
变用第4章中变变理的程序可声即
;6,童声
童声声将声数变变和女变变基本相同~只是女变变的回变函中共振峰增加100Hz变变增加700Hz即可。
(7)老人音声
function laorenshengyin_Callback(hObject, eventdata, handles)
FL = 80;
WL = 240; 17
P = 10;
s=handles.y;fs=handles.Fs;
s = s/max(s);
L = length(s);
FN = floor(L/FL)-2;
exc = zeros(L,1);
zi_pre = zeros(P,1);
s_rec = zeros(L,1);
zi_rec = zeros(P,1);
v=.5;
exc_syn_v = zeros(v\L,1);
s_syn_v = zeros(v\L,1);
last_syn_v = 0;
zi_syn_v = zeros(P,1);
hw = hamming(WL);
for n = 3:FN
s_w = s(n*FL-WL+1:n*FL).*hw;
[A E] = lpc(s_w, P);
s_f = s((n-1)*FL+1:n*FL);
[exc1,zi_pre] = filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL) = exc1;
[s_rec1,zi_rec] = filter(1,A,exc1,zi_rec);s_rec((n-1)*FL+1:n*FL) = s_rec1;
s_Pitch = exc(n*FL-222:n*FL);
PT = findpitch(s_Pitch);
G = sqrt(E*PT);
FL_v = floor(FL/v);
tempn_syn_v = [1:n*FL_v-last_syn_v]';exc_syn1_v = zeros(length(tempn_syn_v),1);exc_syn1_v(mod(tempn_syn_v,PT)==0) = G; exc_syn1_v = exc_syn1_v((n-1)*FL_v-last_syn_v+1:n*FL_v-
last_syn_v);
[s_syn1_v,zi_syn_v] = filter(1,A,exc_syn1_v,zi_syn_v);
last_syn_v = last_syn_v+PT*floor((n*FL_v-last_syn_v)/PT);
exc_syn_v((n-1)*FL_v+1:n*FL_v) =exc_syn1_v; s_syn_v((n-1)*FL_v+1:n*FL_v) = s_syn1_v; end
plot(handles.axes2,s_syn_v), xlabel(handles.axes2,'n (samples)'), ...
ylabel(handles.axes2,'Amplitude'), title(handles.axes2,'合成老人声音'),...
XLim([0,length(s_syn_v)]);
handles.y=s_syn_v;
guidata(hObject,handles);
ound(s_syn_v);
18
19
参献考文
[1] 变垚光等.精通MATLAB GUI变变.北京,变子工变出版社~2011.1[2] 精变变作变.MATLAB6.0科学运决算完整解方案.北京,人民变变出版社~2001.7[3] 王洪元.MATLAB变言及其在变子信息工程中的变用.北京,变大出清学版社~2004[4] 变雪英.字变音变理及数MATLAB仿真.北京,变子工变出版社~2010.7[5] 变阿奇.MATLAB变用程。教北京,变子工变出版社~2007.8
20
变变变变
通变本次的变算机通信变程变变~变我在除了变变本知变加深理解之外~变MATLAB变件以及变声器的工作原理有了更好的更深刻的理解。在变始变变之前我变变了大量变料~但是我正变变变当真却遇到了多的变变~变我变的变变变了变度~但同变很来学帮也是一次大的挑变~最变~在老变以及同的助下~克服了变变困变~变利的完成了本次变算机通信的变程变变。
变次变程变变使我得了理变变变变合的懂与学必要性~只有理变知变是变变不变的~只有把所的理变知变变相变合起~变中得出变变~与践来从践真会从独才能正变社服变~而提高自己的变变变手能力和变立思考能力。
最后~变变的力量是强大的。变变变程中~同之变的学帮当参互互助的相重要的~大家共同与很决变变~变变可以快解变变变程的遇到的各变各变的变变。
21