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 变音文档

《数字信号处理B》课程项目实施报告题目:数字音效处理器组号: 91任课教师: 方勇组长: 11123701 马骁成员:11123802 梅烜玮成员: 11120989 毛顺亿成员: 11120991 程佳静成员: 11123627 肖淞联系方式:二零一三年10月19日摘要:本论文介绍了在matlab平台下的数字音效处理的实现。

主要使用了matlab中的GUI、FDAtools、audio函数、fft函数、filter函数等制作了图形用户界面、声音的采集和播放、信号在时域和频率的多种处理、滤波器的制作和应用。

通过对声音的时域和频域分析,利用梳状滤波器、IIR2阶滤波器、信号加权线性叠加算法、频域差值算法等理论工具最后实现出对声音的均衡、变声、回声和混音的音效处理。

关键字:数字音效处理、滤波器、matlab目录项目分工 (2)摘要 (3)目录 (4)一、课程项目实施方案 (5)数字音效处理器概述 (5)1.2 设计平台Matlab简介 (5)设计思想 (5)功能指标 (5)1.5 功能原理概述 (5)回声简介 (5)1.5.2 混音音效简介 (6)1.5.3 男女变声简介 (6)1.5.4 均衡器简介 (7)二、系统设计及可行性分析 (7)2.1 系统综述 (7)音频的采集与播放 (8)去噪数字滤波器的设计 (8)音效算法以及理论分析 (11)2.4.1 回音的实现方法和理论分析 (11)混音实现方法和理论分析 (13)2.4.3 男女变声实现方法和理论分析 (13)均衡器 (20)2.4.5 GUI设计 (21)三、系统性能与结果分析 (22)3.1 算法性能和结果分析 (22)3.1.1 回音音效处理 (22)3.1.2 混音音效处理 (25)3.1.3男女变声 (25)3.1.4均衡器 (27)对项目进行所遇到的问题的分析和解决 (30)问题 (30)3.2.2 理论分析问题 (30)参考文献 (32)附录1 组员心得 (33)附录2源程序 (35)一、课程项目实施方案数字音效处理器概述数字音效处理器,是用数字音频信号处理技术来提升和达到各种声音效果的电子装置或者音频变换系统,包括均衡器(EQ)、数字混响器、立体声、特殊音效器等。

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程序

% 载入声音[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实现声音转换数字信号处理——声音转换课题报告 1.课题研究目标利用matlab或其他编程软件对音频信号进行处理,要求实现声音的转换。

如男声和女声的转换,老人声音与童声的转换。

2.课题使用工具Matlab 3.课题技术线路分析和处理音频信号,首先要对声音信号进行采集。

Matlab的数据采集工具箱提供了一整套命令和函数,通过调用这些命令和函数,可直接控制声卡进行数据采集。

Windows自带的录音机程序也可驱动声卡来采集语音信号,并能保存为wav格式文件,供matlab相关函数直接读取,写入和播放。

本文以wav格式音频信号作为分析处理的输入数据,用matlab 处理音频信号的基本流程是:先将wav格式音频信号经wavread函数转换成matlab列数组变量;用matlab强大的运算能力进行数据分析和处理,即时域分析,频域分析,信号合成,识别和增强等;处理后的数据如是音频数据,则可用wavread转换成wav格式文件或用sound,wavplay等函数直接回放。

4.课题实现的原理本程序使用的方法是通过改变基频然后时长规整的方式来达到目的。

(1)更改基频通过资料的查询和整理,可以知道不同人的基频不同统计如下:正常成年男声:0~200Hz;正常成年女声:200~450Hz;小孩声音的基频要比女声的高,老年人的基频要比男声的低。

经过整理统计可知女声基频=男声基频*1.5。

本程序使用的是通过抽样与插值的方式来达到基频的改变。

以女变男为例:用整数D对语音信号X(n)进行抽取Xd=X(Dn);然后将X(n)的抽样频率提高到I(整数)倍,即为对X(n)的插值。

D/I=3/2;(2)时长规整通过抽样插值来改变基频也使播放速度,播放本程序使用的是用重叠叠加算法来达到时长规整。

重叠叠加算法原理:它分为两个阶段——分解和合成将原始信号以帧长N,帧间距sa进行分解,然后以帧间距ss进行合成。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

变声原理语音基本概念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 TB r e i =-π所以T i πθ2F i = T ri π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 进行程序设计,结果如下:从图中可看出,经过变声器处理以后,语音信号的频域发生了很明显的变化,共振峰发生明显的移动。

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

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

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

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

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

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

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

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

相关文档
最新文档