MATLAB变声器

合集下载

男声变女声matlab程序

男声变女声matlab程序
%预测与重建滤波器
exc = zeros(L,1);%激励信号(预测误差)
zi_pre = zeros(P,1);%预测滤波器的状态
s_rec = zeros(L,1);%重建语音
zi_rec = zeros(P,1);
%合成滤波器
exc_syn = zeros(L,1);%合成的激励信号(脉冲串)
PT = findpitch(s_Pitch);%计算基音周期PT
G = sqrt(E*PT);%计算合成激励的能量G
tempn_syn = [1:n*FL-last_syn]';
exc_syn1 = zeros(length(tempn_syn),1);
exc_syn1(mod(tempn_syn,PT)==0) = G;%某一段算出的脉冲
[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;%计算得到的合成语音
%载入声音
[s,fs,nbits] = wavread('222');
%播放原始声音
sound(s,fs,nbits);
FL = 80;%帧长
WL = 240;%窗长
P = 10;%预测系数个数
s = s/max(s);%归一化
L = length(s);%读入语音长度
FN = floor(L/FL)-2;%计算帧数
exc_syn1 = exc_syn1((n-1)*FL-last_syn+1:n*FL-last_syn);

MATLAB变声器

MATLAB变声器

MATLAB变声器电子工程学院摘要语音信号处理中的变声处理已经有了比较成熟的算法,本文阐述了变声算法的基础原理,利用数字滤波器,自相关法,LPC,LPC系数求根法等方法在MATLAB上改变语音信号的基频和共振峰以实现变声,并总结了现有变声算法的缺陷,对用不同的变换域能否改进变声算法做了粗略分析。

关键词:变声算法,LPC,变换域目录研究背景 (3)变声原理 (3)语音基本概念 (3)变声原理 (4)变声过程 (5)分帧处理 (5)计算LPC系数 (5)计算原始激励 (6)计算基音周期 (6)计算激励能量 (7)合成脉冲序列 (7)更改声道参数 (7)合成变声语音 (8)程序设计 (8)传统变声算法缺陷 (9)合成激励与原始激励差别较大 (9)不能实现定向变声 (10)实现定向变声的猜想 (11)小波域是否存在恒定音色参数粗略分析 (11)统计上的变换是否利于寻找恒定音色参数猜想 (11)下一步研究计划 (12)研究背景语音信号是人们日常生活中十分常见的信号,语音也是人与人之间传递信息的一种十分重要的方式。

随着智能终端以及互联网的普及,语音信号大量地以数字形式出现,语音信号处理变得越来越重要,变声处理是语音信号处理的基础之一,所以在这样的大背景下,研究变声算法并改进变声算法是很有意义而且有必要的。

另一方面,传统的变声算法是对发声过程的简单模拟进行语音合成,在模拟过程中改变参数以实现变声,而传统的变声算法存在一些缺陷,若要改进变声算法使其更灵活有效,那么细致的研究传统的变声算法是很有必要的。

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

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

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

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

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

男声变女声matlab程序

男声变女声matlab程序

% 载入声音[s,fs,nbits] = wavread('222');%播放原始声音sound(s,fs,nbits);FL = 80; % 帧长WL = 240; % 窗长P = 10; % 预测系数个数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);% 合成滤波器exc_syn = zeros(L,1); % 合成的激励信号(脉冲串)s_syn = zeros(L,1); % 合成语音last_syn = 0; % 存储上一个(或多个)段的最后一个脉冲的下标zi_syn = zeros(P,1); % 合成滤波器的状态% 变调不变速滤波器exc_syn_t = zeros(L,1); % 合成的激励信号(脉冲串)s_syn_t = zeros(L,1); % 合成语音last_syn_t = 0; % 存储上一个(或多个)段的最后一个脉冲的下标zi_syn_t = 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); % 用线性预测法计算P个预测系数% A是预测系数,E会被用来计算合成激励的能量s_f = s((n-1)*FL+1:n*FL); % 本帧语音,下面就要对它做处理%用filter函数s_f计算激励[exc1,zi_pre] = filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL) = exc1; %计算得到的激励%用filter函数和exc重建语音[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); % 计算基音周期PTG = sqrt(E*PT); % 计算合成激励的能量Gtempn_syn = [1:n*FL-last_syn]';exc_syn1 = zeros(length(tempn_syn),1);exc_syn1(mod(tempn_syn,PT)==0) = G; %某一段算出的脉冲exc_syn1 = exc_syn1((n-1)*FL-last_syn+1:n*FL-last_syn);[s_syn1,zi_syn] = filter(1,A,exc_syn1,zi_syn);exc_syn((n-1)*FL+1:n*FL) = exc_syn1; %计算得到的合成激励s_syn((n-1)*FL+1:n*FL) = s_syn1; %计算得到的合成语音last_syn = last_syn+PT*floor((n*FL-last_syn)/PT);%男声变女声PT1 =floor(PT/2); %减小基音周期poles = roots(A);deltaOMG =150*2*pi/fs;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);endendA1=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);end%绘图plot(s_syn_t),xlabel('n (samples)'), ...ylabel('Amplitude'), title('变换后语音信号'),...xlim([0,length(s_syn_t)]);%播放改变后的声音sound(2*s_syn_t);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% findpitch函数% 计算一段语音的基音周期function PT = findpitch(s)[B, A] = butter(5, 700/4000);s = filter(B,A,s);R = zeros(143,1);for k=1:143R(k) = s(144:223)'*s(144-k:223-k);end[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*RopRop = R2;Top = T2; endif R3 > 0.85*RopRop = R3;Top = T3; endPT = Top;return。

MATLAB变声程序代码

MATLAB变声程序代码

% ct1clear all,close all, clc;% 定义常数FL = 80; % 帧长WL = 240; % 窗长P = 10; % 预测系数个数[s,fs] = wavread('sunday_2.wav'); % 载入语音s 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);% 合成滤波器exc_syn = zeros(L,1); % 合成的激励信号(脉冲串)s_syn = zeros(L,1); % 合成语音last_syn = 0; %存储上一个(或多个)段的最后一个脉冲的下标zi_syn = zeros(P,1); % 合成滤波器的状态% 变调不变速滤波器exc_syn_t = zeros(L,1); % 合成的激励信号(脉冲串)s_syn_t = zeros(L,1); % 合成语音last_syn_t = 0; %存储上一个(或多个)段的最后一个脉冲的下标zi_syn_t = 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); %用线性预测法计算P个预测系数% A是预测系数,E会被用来计算合成激励的能量if n == 27% (3) 观察预测系统的零极点图zplane(1,A);ends_f = s((n-1)*FL+1:n*FL); % 本帧语音,下面就要对它做处理% (4) 用filter函数s_f计算激励,注意保持滤波器状态[exc1,zi_pre] = filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL) = exc1; %计算得到的激励% (5) 用filter函数和exc重建语音,注意保持滤波器状态[s_rec1,zi_rec] = filter(1,A,exc1,zi_rec);s_rec((n-1)*FL+1:n*FL) = s_rec1; %计算得到的重建语音% 注意下面只有在得到exc后才会计算正确s_Pitch = exc(n*FL-222:n*FL);PT = findpitch(s_Pitch); % 计算基音周期PT(不要求掌握)G = sqrt(E*PT); % 计算合成激励的能量G(不要求掌握)%方法3:本段激励只能修改本段长度tempn_syn = [1:n*FL-last_syn]';exc_syn1 = zeros(length(tempn_syn),1);exc_syn1(mod(tempn_syn,PT)==0) = G; %某一段算出的脉冲exc_syn1 = exc_syn1((n-1)*FL-last_syn+1:n*FL-last_syn);[s_syn1,zi_syn] = filter(1,A,exc_syn1,zi_syn);exc_syn((n-1)*FL+1:n*FL) = exc_syn1; %计算得到的合成激励s_syn((n-1)*FL+1:n*FL) = s_syn1; %计算得到的合成语音last_syn = last_syn+PT*floor((n*FL-last_syn)/PT);% (11) 不改变基音周期和预测系数,将合成激励的长度增加一倍,再作为filter% 的输入得到新的合成语音,听一听是不是速度变慢了,但音调没有变。

男声变女声matlab程序

男声变女声matlab程序

% 载入声音[s,fs,nbits] = wavread('222');%播放原始声音sound(s,fs,nbits);FL = 80; % 帧长WL = 240; % 窗长P = 10; % 预测系数个数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);% 合成滤波器exc_syn = zeros(L,1); % 合成的激励信号(脉冲串)s_syn = zeros(L,1); % 合成语音last_syn = 0; % 存储上一个(或多个)段的最后一个脉冲的下标zi_syn = zeros(P,1); % 合成滤波器的状态% 变调不变速滤波器exc_syn_t = zeros(L,1); % 合成的激励信号(脉冲串)s_syn_t = zeros(L,1); % 合成语音last_syn_t = 0; % 存储上一个(或多个)段的最后一个脉冲的下标zi_syn_t = 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); % 用线性预测法计算P个预测系数% A是预测系数,E会被用来计算合成激励的能量s_f = s((n-1)*FL+1:n*FL); % 本帧语音,下面就要对它做处理%用filter函数s_f计算激励[exc1,zi_pre] = filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL) = exc1; %计算得到的激励%用filter函数和exc重建语音[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); % 计算基音周期PTG = sqrt(E*PT); % 计算合成激励的能量Gtempn_syn = [1:n*FL-last_syn]';exc_syn1 = zeros(length(tempn_syn),1);exc_syn1(mod(tempn_syn,PT)==0) = G; %某一段算出的脉冲exc_syn1 = exc_syn1((n-1)*FL-last_syn+1:n*FL-last_syn);[s_syn1,zi_syn] = filter(1,A,exc_syn1,zi_syn);exc_syn((n-1)*FL+1:n*FL) = exc_syn1; %计算得到的合成激励s_syn((n-1)*FL+1:n*FL) = s_syn1; %计算得到的合成语音last_syn = last_syn+PT*floor((n*FL-last_syn)/PT);%男声变女声PT1 =floor(PT/2); %减小基音周期poles = roots(A);deltaOMG =150*2*pi/fs;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);endendA1=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);end%绘图plot(s_syn_t),xlabel('n (samples)'), ...ylabel('Amplitude'), title('变换后语音信号'),...xlim([0,length(s_syn_t)]);%播放改变后的声音sound(2*s_syn_t);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% findpitch函数% 计算一段语音的基音周期function PT = findpitch(s)[B, A] = butter(5, 700/4000);s = filter(B,A,s);R = zeros(143,1);for k=1:143R(k) = s(144:223)'*s(144-k:223-k);end[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*RopRop = R2;Top = T2; endif R3 > 0.85*RopRop = R3;Top = T3; endPT = Top;return。

MATLAB变声器

MATLAB变声器

MATLAB变声器电子工程学院摘要语音信号处理中的变声处理已经有了比较成熟的算法,本文阐述了变声算法的基础原理,利用数字滤波器,自相关法,LPC,LPC系数求根法等方法在MATLAB上改变语音信号的基频和共振峰以实现变声,并总结了现有变声算法的缺陷,对用不同的变换域能否改进变声算法做了粗略分析。

关键词:变声算法,LPC,变换域目录研究背景 (3)变声原理 (3)语音基本概念 (3)变声原理 (4)变声过程 (5)分帧处理 (5)计算LPC系数 (5)计算原始激励 (6)计算基音周期 (6)计算激励能量 (7)合成脉冲序列 (7)更改声道参数 (7)合成变声语音 (8)程序设计 (8)传统变声算法缺陷 (9)合成激励与原始激励差别较大 (9)不能实现定向变声 (10)实现定向变声的猜想 (11)小波域是否存在恒定音色参数粗略分析 (11)统计上的变换是否利于寻找恒定音色参数猜想 (11)下一步研究计划 (12)研究背景语音信号是人们日常生活中十分常见的信号,语音也是人与人之间传递信息的一种十分重要的方式。

随着智能终端以及互联网的普及,语音信号大量地以数字形式出现,语音信号处理变得越来越重要,变声处理是语音信号处理的基础之一,所以在这样的大背景下,研究变声算法并改进变声算法是很有意义而且有必要的。

另一方面,传统的变声算法是对发声过程的简单模拟进行语音合成,在模拟过程中改变参数以实现变声,而传统的变声算法存在一些缺陷,若要改进变声算法使其更灵活有效,那么细致的研究传统的变声算法是很有必要的。

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

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

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

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

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

基于matlab的变声器设计与实现

基于matlab的变声器设计与实现

文章主题:基于MATLAB的变声器设计与实现在音乐和语音处理领域,变声器是一种常见的设备,它可以改变声音的音调和音色,为音乐创作和语音处理带来了更多的可能性。

在本文中,我们将探讨基于MATLAB的变声器设计与实现,从原理到具体实现,为读者带来深入了解和实践指导。

一、变声器的原理和应用变声器是一种可以改变声音频率和谐波结构的设备,它在音乐创作、电子音乐制作以及语音处理中有着广泛的应用。

通过改变声音的音调和音色,变声器可以为音频增加特殊效果,为音乐创作和语音处理带来更多可能性。

二、MATLAB在音频处理中的应用MATLAB作为一种强大的科学计算软件,拥有丰富的音频处理工具和函数库,可以方便地进行音频数据处理和分析。

在音频处理中,MATLAB可以实现音频的读取、录制、分析、处理和合成,为音频处理带来了极大的便利。

三、基于MATLAB的变声器设计1. 我们需要了解音频信号的基本特性,包括音频信号的采样和量化过程,以及MATLAB中的音频数据表示方式。

2. 我们需要设计变声器的算法,包括音频信号的频率变换、时域变换和谐波结构的改变。

3. 接下来,我们可以使用MATLAB编写变声器的代码,包括音频信号的读取、处理和输出,以及界面设计和交互操作。

4. 我们还可以对设计好的变声器进行优化和测试,以确保其性能和效果达到预期的要求。

四、实现和应用通过上述步骤,我们可以在MATLAB中成功设计并实现一个变声器,可以对音频进行实时处理和效果展示。

在使用过程中,我们还可以根据具体音频的特点和需求,调整变声器的参数和效果,以获得更加理想的音频处理效果。

五、个人观点和总结基于MATLAB的变声器设计与实现,不仅可以帮助我们更好地理解音频处理的原理和方法,还可以为音乐创作和语音处理带来更多的可能性。

通过学习和实践,我们可以更深入地了解音频处理的相关知识,并掌握MATLAB在音频处理领域的应用技巧,为自己的学习和工作增添新的动力和乐趣。

基于MATLAB GUI的变声器设计与实现

基于MATLAB GUI的变声器设计与实现

1 关于MATLAB 和 GUI 的概念和含义分析1.1 关于MATLAB 的概述MATLAB 是两个词组组合而成的,这两词组分别是matrix 和laboratory。

其用汉语可以翻译成为矩形实验室或者矩形工厂。

其原理或者功能是,MATLAB 能够将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,这便为我国的科学研究、工程设计以及必须进行有效数值计算的众多科学领域带来了一场全新的变革,其成功为这些科学领域提供了一种全面且科学的解决方案,并且成功突破了传统非交互式程序设计语言(如C、Fortran)编辑模式的局限性。

总而言之,MATLAB 是能够在一定程度上作为代表当今国际科学计算软件水平的一个重要产物。

1.2 关于 GUI 的概述关于 GUI,其英文全称为Graphical User Interface。

为了应用方便,都习惯性使用其简称—— GUI。

GUI 用汉语翻译称为人机交互图形用户界面设计。

从理论层面来进行解释,其主要指的是采用图形方式显示的计算机操作用户界面。

GUI 和传统意义上所使用的计算机命令界面相比较,其最大的一个优势或者特点便是其所具备的图形界面。

但从视觉上来分析,图形界面要比命令界面更具有可接受性,更能够吸引住大众的目光。

2 基于MATLAB GUI 的变声器设计为了实现变声的目的,从男声变女声、女声变男声、老人变童声等需要在分析语音信号参数的过程当中适时采用短时自相关法提取语音信号的基音周期。

与此同时,也会应用到LPC 即倒谱分析法分析共振峰的范围,然后再通过MATLAB 编写程序来对语音参数进行修改,进而使其更加接近想要的声音的范围,构置GUI 界面。

2.1 关于变声原理分析一般情况下,在进行性别变声的过程中,我们需要考虑的因素主要包括几个方面,诸如基音的周期、基音的频率、共振峰的频率等等,其主要变化诸如以上几个因素的频率来实现声音的转变。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MATLAB变声器电子工程学院摘要语音信号处理中的变声处理已经有了比较成熟的算法,本文阐述了变声算法的基础原理,利用数字滤波器,自相关法,LPC,LPC系数求根法等方法在MATLAB上改变语音信号的基频和共振峰以实现变声,并总结了现有变声算法的缺陷,对用不同的变换域能否改进变声算法做了粗略分析。

关键词:变声算法,LPC,变换域目录研究背景 (3)变声原理 (3)语音基本概念 (3)变声原理 (4)变声过程 (5)分帧处理 (5)计算LPC系数 (5)计算原始激励 (6)计算基音周期 (6)计算激励能量 (7)合成脉冲序列 (7)更改声道参数 (7)合成变声语音 (8)程序设计 (8)传统变声算法缺陷 (9)合成激励与原始激励差别较大 (9)不能实现定向变声 (10)实现定向变声的猜想 (11)小波域是否存在恒定音色参数粗略分析 (12)统计上的变换是否利于寻找恒定音色参数猜想 (12)下一步研究计划 (12)研究背景语音信号是人们日常生活中十分常见的信号,语音也是人与人之间传递信息的一种十分重要的方式。

随着智能终端以及互联网的普及,语音信号大量地以数字形式出现,语音信号处理变得越来越重要,变声处理是语音信号处理的基础之一,所以在这样的大背景下,研究变声算法并改进变声算法是很有意义而且有必要的。

另一方面,传统的变声算法是对发声过程的简单模拟进行语音合成,在模拟过程中改变参数以实现变声,而传统的变声算法存在一些缺陷,若要改进变声算法使其更灵活有效,那么细致的研究传统的变声算法是很有必要的。

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

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

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

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

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

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

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

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

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

4,短时平稳特性:语音信号是一种随时间而变化的信号,主要分为浊音和清音两大类。

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

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

因而处理语音信号之前要把语音信号分为一些短段(称为分析帧),然后再来进行处理。

人声和乐器声的产生需要两个阶段,一个是发声系统,如人的声带或乐器的振动簧片,另一个是共鸣系统。

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

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

这就可以解释为什么同一乐器所发出的不同音调具有相同的音质。

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

人在说话的过程中,正是通过利用这些共鸣空间的形状和大小不同的变化(例如改变嘴形),以能改变声音的共振峰说出不同的元音。

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

简单来讲不同的人说同一句话的共振峰不同,同一个人说不通的话共振峰也不同。

变声原理变声是通过改变人声的基音频率和共振分分布以达到变声的目的,其具体过程是是模拟人声的发声过程,以脉冲信号代替声带振动,以FIR滤波器代替声道,用脉冲信号通过FIR滤波器进行语音合成。

首先对原始语音信号进行分解,然后得出原始激励参数(基音周期和激励能量)和声道参数(共振峰分布),用得出的参数构建激励和滤波器,再根据变声需要更改参数,就可以达到变声的目的。

过程如下变声过程●分帧处理语音信号具有短时平稳特性,所以在处理之前要进行分帧处理,将一段长的语音信号分解为10~30ms的语音信号逐段进行处理。

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

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

分帧一般要采用交叠分段的方法。

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

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

在程序中对语音信号加Hamming窗处理,方法是用窗序列沿着语音样点值序列逐帧从左向右移动。

●计算LPC系数线性预测编码(LPC)是主要用于音频信号处理与语音处理中根据线性预测模型的信息用压缩形式表示数字语音信号谱包络(en:spectral envelope)的工具。

它是最有效的语音分析技术之一,也是低位速下编码方法高质量语音最有用的方法之一,它能够提供非常精确的语音参数预测。

LPC就是根据之前的P个信号构建滤波器,对之后的信号进行预测。

MATLAB中就有LPC函数,其形式为:[A,E]=lpc(s_w,P);其中A是LPC预测系数,用来构建滤波器,E是预测误差,在后面会用来计算激励能量,s_w是语音信号,P是预测阶数。

●计算原始激励用得到的LPC系数构建滤波器,对语音信号进行逆滤波就可以得到语音信号的激励,另外应该注意在系数变化的情况下连续滤波,需要维持滤波器的状态不变,要利用filter函数的错误!未找到引用源。

和错误!未找到引用源。

参数。

程序如下[exc1,zi_pre] = filter(A,1,s_f,zi_pre);exc1就是原始激励,用于计算基音周期。

●计算基音周期程序中用自相关法计算基音周期。

如果s(n)是一个周期为P的信号,则其自相关函数也是周期为P的信号,且在信号周期的整数倍处,自相关函数取最大值。

语音的浊音信号具有准周期性,其自相关函数在基音周期的整数倍处取最大值。

计算两相邻最大峰值间的距离,就可以估计出基因周期。

其实现代码如下function PT=findpitch(s)[B,A]=butter(5,700/4000);s=filter(B,A,s);R=zeros(143,1);for k=1:143R(k)=s(144:223)'*s(144-k:223-k);end[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*RopRop=R2;Top=T2;endif R3>0.85*RopRop=R3;Top=T3;endPT=Top;return● 计算激励能量激励能量G 用于构建脉冲序列时当作脉冲序列的振幅,激励能量和线性预测误差E 和基音周期PT 有关,其公式为G = sqrt(E*PT);● 合成脉冲序列合成的脉冲序列可根据变声的需要更改原始的基音周期PT ,如PT1 =floor(PT/2);而后以PT1为周期,G 为振幅构建脉冲序列,作为合成语音的激励● 更改声道参数利用LPC 求根法以更改共振峰分布。

具体过程为,对由线性预测系数A 构成的多项式求根,而共振峰频率F 和频谱宽带B 和这些根有对应关系。

设i i i i e r z θ⋅=为一个根,则其共轭值i i i i e r z θ-⋅=也是一个根,i 对应的共振峰频率F 和3dB 带宽B 存在以下关系:i θπ=i TF 2 i T B r e i =-π所以T i πθ2F i = T r i πln B i -=其中T 是采样周期。

在程序中,我们只更改共振峰频率,程序如下poles = roots(A);deltaOMG =100*2*pi/fs;for p=1:10if imag(poles(p))>0poles(p) = poles(p)*exp(peak*1j*deltaOMG); %peak 是变声系数 elseif imag(poles(p))<0poles(p) = poles(p)*exp(-peak*1j*deltaOMG);endendA1=poly(poles);A1是更改过声道参数的线性预测系数,用以构建滤波器合成变声语音。

合成变声语音用脉冲序列作为激励,A1作为滤波器参数,合成变声语音,[s_syn1_t,zi_syn_t] = filter(1,A1,exc_syn1_t,zi_syn_t);程序设计利用MATLAB的GUI进行程序设计,结果如下:从图中可看出,经过变声器处理以后,语音信号的频域发生了很明显的变化,共振峰发生明显的移动。

从听觉角度来说,变声效果也比较明显。

传统变声算法缺陷传统的变声算法形成时间较早,是对发声系统粗略的模仿实现语音合成,虽然能实现明显的变声效果,但还存在一些缺陷,这里只针对研究开发过程中发现的不足来说。

合成激励与原始激励差别较大合成激励是以原始激励的基音周期为周期的脉冲序列,忽视了原始激励中的泛音频率,而语音信号中泛音频率也是决定声音音色的重要因素,所以对泛音的忽视直接影响了变声效果。

完成变声器的编程之后,我尝试用基音周期不变的合成激励与原始的声道参数进行语音合成,对比合成语音和原始语音,结果如下可以很明显地看出合成激励和原始激励在频谱上有较大区别,而从听觉上而言,虽然能听出二者音色相似,但用合成激励合成的语音中有较多杂音。

从这个简单的实验可以看出,激励中的泛音对语音信号也有着相当重要的作用,当激励中去除泛音时,对语音信号的频谱分布和听觉上有着较大影响。

所以变声算法中,只考虑基音来构建合成激励是有很大缺陷的。

不能实现定向变声所谓定向变声,是指把一个人的声音定向地变成另一个人的声音。

每个人都有自己独特的音色,也就意味着每个人的声音信号有独特且恒定的参数存在,一开始我猜想是这个参数便是共振峰分布,后来发现,虽然不同的人说相同的话的语音共振峰确实有明显的区别,但是同一个人说不同的话共振峰的区别也非常大,下图分别是同一个人读“为中华崛起而读书”和“现在开始录音”的时域和频域图:可见共振峰分布并不相同,其实每个元音的共振峰分布本来就不一样,这就意味着,共振峰分布不仅决定了音色,也决定了语音内容。

相关文档
最新文档