基于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变声器电子工程学院摘要语音信号处理中的变声处理已经有了比较成熟的算法,本文阐述了变声算法的基础原理,利用数字滤波器,自相关法,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程序
% 载入声音[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程序
% 载入声音[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的变声器设计与实现,从原理到具体实现,为读者带来深入了解和实践指导。
一、变声器的原理和应用变声器是一种可以改变声音频率和谐波结构的设备,它在音乐创作、电子音乐制作以及语音处理中有着广泛的应用。
通过改变声音的音调和音色,变声器可以为音频增加特殊效果,为音乐创作和语音处理带来更多可能性。
二、MATLAB在音频处理中的应用MATLAB作为一种强大的科学计算软件,拥有丰富的音频处理工具和函数库,可以方便地进行音频数据处理和分析。
在音频处理中,MATLAB可以实现音频的读取、录制、分析、处理和合成,为音频处理带来了极大的便利。
三、基于MATLAB的变声器设计1. 我们需要了解音频信号的基本特性,包括音频信号的采样和量化过程,以及MATLAB中的音频数据表示方式。
2. 我们需要设计变声器的算法,包括音频信号的频率变换、时域变换和谐波结构的改变。
3. 接下来,我们可以使用MATLAB编写变声器的代码,包括音频信号的读取、处理和输出,以及界面设计和交互操作。
4. 我们还可以对设计好的变声器进行优化和测试,以确保其性能和效果达到预期的要求。
四、实现和应用通过上述步骤,我们可以在MATLAB中成功设计并实现一个变声器,可以对音频进行实时处理和效果展示。
在使用过程中,我们还可以根据具体音频的特点和需求,调整变声器的参数和效果,以获得更加理想的音频处理效果。
五、个人观点和总结基于MATLAB的变声器设计与实现,不仅可以帮助我们更好地理解音频处理的原理和方法,还可以为音乐创作和语音处理带来更多的可能性。
通过学习和实践,我们可以更深入地了解音频处理的相关知识,并掌握MATLAB在音频处理领域的应用技巧,为自己的学习和工作增添新的动力和乐趣。
基于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 关于变声原理分析一般情况下,在进行性别变声的过程中,我们需要考虑的因素主要包括几个方面,诸如基音的周期、基音的频率、共振峰的频率等等,其主要变化诸如以上几个因素的频率来实现声音的转变。
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算法的数字变声器
基于M A T L A B算法的数字变声器Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】基于MATLAB算法的数字变声器【摘要】变声器的原理是通过改变输入声音频率,进行改变声音的音色、音调,使输出声音在感官上与原声音不同。
变声器是借助对声音音色和音调的双重复合改变,实现输出声音的改变。
通过自己发声,共振峰频率的改变是基于重采样实现的。
同时用LPC倒谱分析法分析共振峰的范围,通过MATLAB编写程序并构置GUI界面。
实验中通过MATLAB软件对采集来的语言信号进行频谱分析,讨论不同人之间的噪音源参数和共振峰参数,通过对不同人语言信号频率和幅度的改变来实现不同人之间的语音转换。
【关键词】短时自相关法; LPC倒谱;语音信号; matlab GUI;1引言随着生活水平的提高,科技的不断进步,很多人为了娱乐,从而希望改变自己的声音;还有如今的许多的访问节目为了保护被访问者,都对声音进行了相应的处理。
本设计通过编写matlab程序,借助对声音音色和音调的双重复合改变,实现输出声音的改变。
共振峰频率的改变是基于重采样实现的,从重采样原理知道,这也同时印发了基频的变化,为保证基频变化和共振峰频率变化的独立、互不相关,在基频移动时必须考虑抵消重采样带来的偏移,理论上只要基频检测足够精确,确实可以保证基频改变和共振峰频率改变间的互不相关。
保证变声效果的自然度主要是没有采用基因检测将基因移动和共振峰变化彻底隔离的缘故。
本次课程设计就是运用我们所学到的理论知识,用MATLAB软件来实现对语音信号的变声处理,理论联系实际,从而更好地掌握以及运用所学习的知识。
2数字变声器的原理与算法基本原理语音科学家将人类发声过程视作一个由声门源输送的气流经以声道、口、鼻腔组成的滤波器调制而成的。
人类语音可分为有声语音和无声语音,前者是由声带振动激励的脉冲信号经声腔调制变成不同的音,它是人类语言中元音的基础,声带振动的频率称为基频。
基于matlab的数字音效处理器_毕业设计论文
基于matlab的数字音效处理器《数字信号处理》课程项目终期报告题目:数字音效处理器目录第一章绪论 (1)1.1 项目背景及研究意义 (1)1.2 数字信号处理概述 (1)第二章总体方案设计 (3)2.1 项目需求分析 (3)2.2 开发平台及工具选择 (3)2.3 项目功能设计 (3)第三章人机交互界面设计 (4)第四章数字语音信号简单处理效果设计 (5)4.1 低音增强 (5)4.2 回声特效 (6)4.3 添加背景音乐 (8)4.4 回旋效果 (9)4.5 快/慢放特效 (11)第五章自适应语音分割、倒序 (13)5.1 目标实现 (13)5.2 原理简述 (13)5.3 实现步骤 (13)5.4 应用实践 (16)5.5 核心代码分析 (16)5.5 算法优化(快速自适应倒序) (18)第六章项目实施过程 (19)第七章总结与展望 (20)7.1 项目总结 (20)7.2 项目展望 (20)附录 (21)参考文献 (37)第一章绪论1.1 项目背景及研究意义随着科技的发展,数字信号处理器DSP(Digital Signal Processor)被广泛的应用在各种电子产品中,从便携的个人数字助手PDA(Personal Digital Assistant)到家庭影院,电子产品对人们的生活产生着巨大的影响。
人们不仅对图像的质量有很高的要求,近年来对声音质量的需求也与日俱增。
这种需求已经不单局限在聆听,而上升为一种听觉享受。
在实际生活中,除了符合建筑声学标准的录音室、音乐厅等外,一般的室内都很难达到比较完美的音质及效果,通常需要使用音效处理器来进行处理、美化,这使得音效器的发展,得到了更为广泛的关注。
1.2 项目背景及研究意义数字信号处理(DigitalSignalProcessing,DSP)是利用专门或通用的数字信号芯片,以数字计算的方法对信号进行处理,具有处理速度快、灵活、精确、抗干扰能力强、体积小等优点。
matlab变声器课程设计
matlab变声器课程设计一、课程目标知识目标:1. 理解Matlab编程基础,掌握其音频处理功能;2. 学习并掌握数字信号处理中音频变声的基本原理;3. 了解不同声音变换技术的应用场景及其效果。
技能目标:1. 能够使用Matlab编写简单的音频读取、播放程序;2. 能够运用Matlab进行音频信号的时域、频域分析;3. 能够独立设计并实现基础的变声器程序,完成声音的变调、变速等效果。
情感态度价值观目标:1. 培养学生对音频信号处理的兴趣,激发其探索精神;2. 增强学生团队协作意识,提高沟通与表达能力;3. 引导学生正确看待变声技术,培养其遵守网络道德和法律法规的意识。
课程性质:本课程为实践性较强的选修课程,结合Matlab软件与数字信号处理理论,旨在提高学生的实际操作能力和创新能力。
学生特点:学生具备一定的编程基础,对新鲜事物充满好奇,喜欢动手实践。
教学要求:注重理论与实践相结合,鼓励学生自主探究,关注学生个体差异,提供个性化指导。
通过课程学习,使学生能够将所学知识应用于实际问题解决中,提高其综合素质。
二、教学内容1. Matlab编程基础:- 变量、数据类型及运算符;- 程序控制结构;- 函数编写与调用。
2. 音频处理基本理论:- 音频信号的数字化;- 音频信号的时域和频域分析;- 变声技术原理。
3. Matlab音频处理工具箱:- 音频文件的读取与播放;- 音频信号的编辑与处理;- 音频效果器的应用。
4. 变声器设计与实现:- 变调技术;- 变速技术;- 声音特效添加。
教学内容安排与进度:第一周:Matlab编程基础及音频处理基本理论;第二周:音频处理工具箱的使用方法;第三周:变声器设计原理及实例分析;第四周:学生动手实践,完成变声器设计与实现;第五周:成果展示与评价。
教材章节及内容:第一章:Matlab编程基础;第二章:数字信号处理基础;第三章:音频信号处理;第四章:Matlab音频处理工具箱;第五章:音频变声器设计与实现案例。
基于matlab的数字音效处理器_毕业设计论文
基于matlab的数字音效处理器《数字信号处理》课程项目终期报告题目:数字音效处理器目录第一章绪论 (1)1.1 项目背景及研究意义 (1)1.2 数字信号处理概述 (1)第二章总体方案设计 (3)2.1 项目需求分析 (3)2.2 开发平台及工具选择 (3)2.3 项目功能设计 (3)第三章人机交互界面设计 (4)第四章数字语音信号简单处理效果设计 (5)4.1 低音增强 (5)4.2 回声特效 (6)4.3 添加背景音乐 (8)4.4 回旋效果 (9)4.5 快/慢放特效 (11)第五章自适应语音分割、倒序 (13)5.1 目标实现 (13)5.2 原理简述 (13)5.3 实现步骤 (13)5.4 应用实践 (16)5.5 核心代码分析 (16)5.5 算法优化(快速自适应倒序) (18)第六章项目实施过程 (19)第七章总结与展望 (20)7.1 项目总结 (20)7.2 项目展望 (20)附录 (21)参考文献 (37)第一章绪论1.1 项目背景及研究意义随着科技的发展,数字信号处理器DSP(Digital Signal Processor)被广泛的应用在各种电子产品中,从便携的个人数字助手PDA(Personal Digital Assistant)到家庭影院,电子产品对人们的生活产生着巨大的影响。
人们不仅对图像的质量有很高的要求,近年来对声音质量的需求也与日俱增。
这种需求已经不单局限在聆听,而上升为一种听觉享受。
在实际生活中,除了符合建筑声学标准的录音室、音乐厅等外,一般的室内都很难达到比较完美的音质及效果,通常需要使用音效处理器来进行处理、美化,这使得音效器的发展,得到了更为广泛的关注。
1.2 项目背景及研究意义数字信号处理(DigitalSignalProcessing,DSP)是利用专门或通用的数字信号芯片,以数字计算的方法对信号进行处理,具有处理速度快、灵活、精确、抗干扰能力强、体积小等优点。
matlab女声变男声程序
matlab女声变男声程序返回列表发新帖回复查看: 823|回复: 3|关注: 0打印上一主题下一主题 [未答复] MATLAB做女生变男声的程序 [复制链接] hoaei新手5 麦片财富积分0502主题5帖子最佳答案发消息电梯直达跳转到指定楼层 1#2013-10-17 19:32:12 | 只看该作者回帖奖励发表于我在做一个女声变男声的程序想法是将女生的音谱向左压缩7/8,使得基频也随之改变,变成女声基频的7/8,最后是有男声的声音,但是男声似乎被截掉了一些语音信号。
比如女生原话是(“请问你是谁啊”),可男声却是(“请问你是谁”),(“啊”)没有了,同时处理后的男声语音文件播放时,还隐约能听到一些女声的声音。
以下是代码:<blockquote>%变声2复制代码其中qu_wan_ting是原始音频文件,参看附件,pinpuyasuo是一个子函数,可以对一个矩阵进行线性压缩,若a=[1 2 3 4 5 6], 如果压缩比为3:6,压缩后a=[2 4 6]; 压缩比若为4:6,则a=[1.5 3 4.5 6],不过由于这是对经过fft的频谱进行压缩的,所以这个函数还是左右对称压缩的。
以下是压缩函数代码:%频谱压缩function [hw2,num]=pinpuyasuo(hw,kn,km)N=length(hw);hw2=hw;for i=1:N/2n=fix(i*km/kn);xiaoshu=(i*km/kn-n);if(n>N/2)break;endtryhw2(i)=hw(n)*(1-xiaoshu)+hw(n+1)*xiaoshu;catchhw2(i)=hw(n)*(1-xiaoshu); endhw2(N-i+1)=hw(N-n+1)*(1-xiaoshu)+hw(N-n)*xiaoshu; endnum=i;end复制代码qu_wan_ting.mat193.23 KB, 下载次数: 47 原始女声音频文件分享到:女声变男声不知道为什么代码不见了,补发一下 %变声2clear allload qu_wan_ting;[m,n]=size(y1);%y1是音频文件t=1:m;N=2^ceil(log2(m));fs=11025;hw=fft(y1,N);HW=abs(hw);W=(0:N-1)*fs/N;figure(1);subplot(211);plot(W,HW);title('1')axis([0,fs,0,20]);[hw2,num]=pinpuyasuo(hw,17,22);%hw2(num/2:N-num/2+1)=hw2(num/2:N-num/2+1)*0; subplot(212);plot(W,abs(hw2));axis([0,fs,0,20]);y2=ifft(hw2);y2=real(y2);%./abs(real(y2)).*abs(y2);y2=y2(1:max(t)); y2=guiyihua(y2)/2;figure(10);subplot(211); y1=guiyihua(y1)/2; plot(t,y1); subplot(212); plot(t,y2);wavplay(y2,fs); 复制代码回复此楼支持举报探索者~新手6 麦片财富积分0502主题23帖子最佳答案发消息3#发表于 2013-12-9 17:23:51 | 只看该作者你是想问什么,你的变声代码第28行“y2=guiyihua(y2)/2;”,"guiyihua"是什么,回复此楼支持举报 qsj8362234入门141 麦片财富积分5050021主题1004帖子31最佳答案QQ发消息关注者: 14#发表于 2013-12-9 17:47:52 | 只看该作者'阿'是单音信号吧,可以单独看看这个音的频谱。
数字变声器
数字变声器河北北方学院宣化教学部吕路广摘要为了实现由男声变换到女声,在语音信号参数分析过程采用短时自相关法提取语音信号的基音周期,同时用LPC倒谱分析法分析共振峰的范围,通过matlab编写程序修改语音参数并接近于女声的范围,构置GUI界面。
在实验中,输入一段语音信号,输出时即实现了由男声到女声的变换效果。
因此对于语音信号参数的修改能够实现男女声音之间的变换。
关键词短时自相关法 LPC倒谱语音信号 matlab GUI前言为了锻炼自己数字信号处理的实践能力,也为了更好的完成老师布置的作业,本设计通过编写matlab程序,修改相关声音参数,使其频率发生相应的变化,在输出时达到变声。
目录数字变声器 (1)第1章采样 (4)1 一些基本概念 (4)1.1声道 (4)1.2基音 (4)1.3共振峰 (4)1.4物理原理 (4)第2章设计方案 (5)2.1 设计原理 (5)2.2 设计步骤 (5)第3章建模 (5)3.1 基于短时自相关法的基音周期估值 (5)3.1.1构建巴特沃斯低通滤波器 (5)3.1.2语音信号的短时自相关函数 (6)3.2 LPC倒谱法提取共振峰 (6)3.3 线性预测语音信号合成 (7)第4章 GUI界面设计以及仿真图形和程序 (8)4.1 界面设计 (8)4.2 仿真图形 (9)4.2.1 原声 (10)4.2.2 女声 (10)4.2.3 童声 (10)4.2.4 老人声 (10)4.2.5 音调变高 (11)4.2.6 音调变低 (11)4.2.7 语速变慢 (11)4.2.8 语速变快 (12)4.3 程序流程图如下 (12)4.4每个控件的程序如下 (13)4.4.1“录音”radiobutton(radiobutton1) (13)4.4.2“打开”radiobutton(radiobutton2) (13)4.4.3“开始”按钮(pushbutton1) (14)4.4.4“保存”按钮(pushbutton2) (14)4.4.5“打开音频文件按钮”(pushbutton3) (15)4.4.6“原声”按钮(pushbutton5) (15)4.4.7“女声”按钮(pushbutton7) (16)4.4.8“童声”按钮(pushbutton6) (17)4.4.9“老人”按钮(pushbutton12) (19)4.4.10“音调变高”按钮(pushbutton11) (20)4.4.11“音调变低”按钮(pushbutton9) (21)4.4.12“语速变慢”按钮(pushbutton14) (21)4.4.13“语速变快”按钮(pushbutton8) (23)第4章分析总结 (24)参考文献 (24)致谢 (24)第1章采样1 一些基本概念1.1声道声道是很多动物及人类都有的一个腔室,从声源产生的声音经由此处滤出。
基于MATLAB算法的数字变声器
基于MATLAB算法的数字变声器【摘要】变声器的原理是通过改变输入声音频率,进行改变声音的音色、音调,使输出声音在感官上与原声音不同。
变声器是借助对声音音色和音调的双重复合改变,实现输出声音的改变。
通过自己发声,共振峰频率的改变是基于重采样实现的。
同时用LPC倒谱分析法分析共振峰的范围,通过MATLAB编写程序并构置GUI界面。
实验中通过MATLAB软件对采集来的语言信号进行频谱分析,讨论不同人之间的噪音源参数和共振峰参数,通过对不同人语言信号频率和幅度的改变来实现不同人之间的语音转换。
【关键词】短时自相关法; LPC倒谱;语音信号; matlab GUI;1引言随着生活水平的提高,科技的不断进步,很多人为了娱乐,从而希望改变自己的声音;还有如今的许多的访问节目为了保护被访问者,都对声音进行了相应的处理。
本设计通过编写matlab程序,借助对声音音色和音调的双重复合改变,实现输出声音的改变。
共振峰频率的改变是基于重采样实现的,从重采样原理知道,这也同时印发了基频的变化,为保证基频变化和共振峰频率变化的独立、互不相关,在基频移动时必须考虑抵消重采样带来的偏移,理论上只要基频检测足够精确,确实可以保证基频改变和共振峰频率改变间的互不相关。
保证变声效果的自然度主要是没有采用基因检测将基因移动和共振峰变化彻底隔离的缘故。
本次课程设计就是运用我们所学到的理论知识,用MATLAB软件来实现对语音信号的变声处理,理论联系实际,从而更好地掌握以及运用所学习的知识。
2数字变声器的原理与算法2.1基本原理语音科学家将人类发声过程视作一个由声门源输送的气流经以声道、口、鼻腔组成的滤波器调制而成的。
人类语音可分为有声语音和无声语音,前者是由声带振动激励的脉冲信号经声腔调制变成不同的音,它是人类语言中元音的基础,声带振动的频率称为基频。
无声语音则是声带保持开启状态,禁止振动引发的。
一般来说,由声门振动决定的基频跟说话人的性别特征有关,如下表,而无声语音则没有体现这个特征。
数字变声器
数字变声器设计方案基于FFT算法的数字变声器201242216河北北方学院宣化教学部河北宣化 075100【摘要】本数字变声器是实现男声变女声和女声变男声以及变成童声的系统。
设计本数字变声器的目的是锻炼自己的学习实践能力。
通过matlab编写程序修改语音参数来实现男声女声之间的变换。
【关键词】变音算法数字滤波器语音信号数字滤波器频谱分析 MATLAB1 引言变声器在现实生活中应用广泛,变声器是通过改变输入音频的音色、音调,并将变声后的音频输出的工具。
根据变声器材质不同,变声器分为变声器硬件和变声器软件。
变声器硬件,即通过硬件实现变声的工具;变声器软件,即通过软件实现变声的工具,软件类变声器,运行平台皆为电脑系统。
无论是硬件变声器,还是软件变声器,其原理都是,通过改变输入声音频率,进而改变声音的音色、音调,使输出声音在感官上与原声音不同。
我们每个人的声音不同,源于我们的每个人的音色和音调不同,我们所说的男中音、男高音,就是音调的不同,而即便音调一致,我们依然能区分出两个不同人的声音,或不同乐器的声音,这就是音色的不同。
变声器,正是借助对声音音色和音调的双重复合改变,实现输出声音的改变。
我们这里的变声器就是matlab来实现变声。
2 数字变声器的原理和算法发音方法,发音时,喉头、口腔、鼻腔节制气流的方式和状态,包括发音时构成阻碍和克服阻碍的方式,气流强弱的情况及声带是否振动等几个方面。
人类语音可分为有380声语音和无声语音,前者是由声带振动激励的脉冲信号经声腔调制变成不同的音,它是人类语言中元音的基础,声带振动的频率称为基频。
无声语音则是声带保持开启状态,禁止振动引发的。
一般来说,由声门振动决定的基频跟说话人的性别特征有关,如下表,而无声语音则没有体现这个特征。
说话人的个性化音色和语音的另外一个声学参数——共振峰频率的分布有关。
儿童由于声道短,其共振峰频率高于成年人,成年女性的声道一般短于成年男性,所以女性的共振峰频率一般高于男性。
基于MATLAB GUI的变声器设计与实现
基于MATLAB GUI的变声器设计与实现
孟若兰;刘艳丽;陈锦苗;李昊天;王琪瑶
【期刊名称】《电子测试》
【年(卷),期】2018(000)017
【摘要】现阶段计算机在我国信号处理领域中的应用范围已经越来越广泛,基于MATLAB GUI的变声器设计便是当前专业领域最受关注的一个焦点问题,本文将对此议题进行深入的分析与探究.
【总页数】2页(P19-20)
【作者】孟若兰;刘艳丽;陈锦苗;李昊天;王琪瑶
【作者单位】承德医学院生物医学工程系,河北承德,067000;承德医学院生物医学工程系,河北承德,067000;承德医学院生物医学工程系,河北承德,067000;承德医学院生物医学工程系,河北承德,067000;承德医学院生物医学工程系,河北承
德,067000
【正文语种】中文
【相关文献】
1.基于MATLAB GUI的数字滤波器设计与实现 [J], 韩芝侠;王强;脱慧
2.基于MATLAB GUI图像处理系统的设计与实现 [J], 厉俊
3.基于MATLAB GUI图像处理系统的设计与实现 [J], 厉俊
4.基于Matlab GUI的计算方法实验系统设计与实现 [J], 王际朝;张健;阮宗利
5.基于MATLAB/GUI的光伏电池工程用数学模型仿真系统的设计与实现 [J], 吴春芳
因版权原因,仅展示原文概要,查看原文内容请购买。
基于某matlab的数字音效处理器——数字信号处理课设报告材料
一:应用背景利用所学习的数字信号处理知识,自己动手制作一个有趣的音效处理系统,看看能不能完成声音的逐渐放大和逐渐衰减、看看能不能让自己的声音发生一些改变(变得尖声尖气或粗声粗气)、看看改变声音播放速度有什么方法等等,你还可以自己想想还有什么有趣的变化,可以通过我们已有的知识让它实现。
作为课程设计,以下要求分为基本必做部分和提高必做部分,在提高部分你可以选择全部内容和部分内容,当然分数值是不一样。
二、基于MATLAB数字音效处理器2.1:实现步骤基本要求描述(40分)1)语音信号的采集(2分)要求利用Windows下的录音机,录制一段自己的话音,时间在5s内,存为*.WA V的文件。
然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。
2)语音信号的频谱分析(10分)要求首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,分析基频。
3)设计数字滤波器和画出其频率响应(10分)给出各滤波器的性能指标:(1)低通滤波器性能指标fb=1 000 Hz,fc=1 200 Hz,As=100 dB,Ap=1 dB。
(2)高通滤波器性能指标fc=4 800 Hz,fb=5 000 Hz As=100 dB,Ap=1 dB。
(3)带通滤波器性能指标fb1=1 200 Hz,fb2=3 000 Hz,fc1=1 000 Hz,fc2=3 200 Hz,As =100 dB,Ap=1 dB。
4)用滤波器对信号进行滤波(5分)要求学生用自己设计的各滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
5)比较滤波前后语音信号的波形及频谱(10分)要求在一个窗口同时画出滤波前后的波形及频谱,做出分析。
6)回放语音信号(1分)在Matlab中,函数sound可以对声音进行回放。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于MATLAB算法的数字变声器【摘要】变声器的原理是通过改变输入声音频率,进行改变声音的音色、音调,使输出声音在感官上与原声音不同。
变声器是借助对声音音色和音调的双重复合改变,实现输出声音的改变。
通过自己发声,共振峰频率的改变是基于重采样实现的。
同时用LPC倒谱分析法分析共振峰的范围,通过MATLAB编写程序并构置GUI界面。
实验中通过MATLAB软件对采集来的语言信号进行频谱分析,讨论不同人之间的噪音源参数和共振峰参数,通过对不同人语言信号频率和幅度的改变来实现不同人之间的语音转换。
【关键词】短时自相关法;LPC倒谱;语音信号;matlab GUI;1引言随着生活水平的提高,科技的不断进步,很多人为了娱乐,从而希望改变自己的声音;还有如今的许多的访问节目为了保护被访问者,都对声音进行了相应的处理。
本设计通过编写matlab程序,借助对声音音色和音调的双重复合改变,实现输出声音的改变。
共振峰频率的改变是基于重采样实现的,从重采样原理知道,这也同时印发了基频的变化,为保证基频变化和共振峰频率变化的独立、互不相关,在基频移动时必须考虑抵消重采样带来的偏移,理论上只要基频检测足够精确,确实可以保证基频改变和共振峰频率改变间的互不相关。
保证变声效果的自然度主要是没有采用基因检测将基因移动和共振峰变化彻底隔离的缘故。
本次课程设计就是运用我们所学到的理论知识,用MATLAB软件来实现对语音信号的变声处理,理论联系实际,从而更好地掌握以及运用所学习的知识。
2数字变声器的原理与算法2.1基本原理语音科学家将人类发声过程视作一个由声门源输送的气流经以声道、口、鼻腔组成的滤波器调制而成的。
人类语音可分为有声语音和无声语音,前者是由声带振动激励的脉冲信号经声腔调制变成不同的音,它是人类语言中元音的基础,声带振动的频率称为基频。
无声语音则是声带保持开启状态,禁止振动引发的。
一般来说,由声门振动决定的基频跟说话人的性别特征有关,如下表,而无声语音则没有体现这个特征。
说话人的个性化音色和语音的另外一个声学参数——共振峰频率的分布有关。
儿童由于声道短,其共振峰频率高于成年人,成年女性的声道一般短于成年男性,所以女性的共振峰频率一般高于男性。
在进行性别变声时,主要考虑基音周期、基频和共振峰频率的变化。
其中男生、女生和童声的基频、共振峰的关系如图1所示;基音周期改变时,基频、共振峰同时变化,若伸展既有男变女、女变童,反之亦可。
本实验是基于打开一种声音进行相关参数提取,修改接近于女声、男声或童声,实现声音的变换。
2.2实现过程及算法采用线性预测参数合成法。
线性预测参数合成法利用LPC语音分析方法,通过分析自然语音样本,计算出LPC系数,就可以建立信号产生模型,从而合成出语音。
大致流程如图2所示。
2.2.1基于短时自相关法的基音周期估值对语言信号进行低通滤波,然后进行自相关计算。
在低通滤波时,采用巴特沃斯滤波器。
根据人的说话特征设定相应指标参数,对本段语音设计算出巴特沃斯模拟滤波器的阶数N为5,3dB截止频率Ωc,Ωc=(100.1a p−1)−12n,算出Ωc为0.175,归一化低通原型系统函数为:G a(p)=1p5+b4p4+b3p3+b2p2+b1p+b0其中b0=1.0000,b1=3.2361,b2=5.2361,b3=5.2361,b4=3.2361将p=s/Ωc带人G a(p)中,得到低通滤波器,H s=Ωc5s5+b4Ωc2s4+b2Ωc3s2+b1Ωc4s+b0Ωc5根据设定的滤波器编写matlab程序,当信号经过低通滤波器后,对原始信号滤波产生结果如下图2所示,低通滤波后,保留基音频率,然后再用8kHz采样频率进行采样,采样序列为x(n),然后进行下一步的自相关计算。
2.2.2语音信号的短时自相关函数图3 原始信号低通滤波图2 制作流程定义语音信号自相关函数如下:R n (k )=∑x n (n )x n (n +k )n =k −n −1n =0其中k 为信号延迟点数: x n (n )为语音信号;N 为语音帧长度。
经过低通滤波之后,取160个样点数,帧长取10ms ,对每帧语音求短时自相关,取得自相关最大点数,自相关函数在基音周期处表现为峰值,这些峰值点之间的间隔的平均值就是基音周期。
2.2.3 LPC 倒谱法提取共振峰通过线性预测分析得到合成滤波器的系统函数为H (Z )=11−∑a i z −ipi =1 其冲击响应为h(n),a i 为预测系数。
然后求h(n)的倒谱h ˆ(n),首先根据同态分析方法,有Hˆ(z)=logH(z),因为H (z )是最小相位的,即在单位圆内是解析的,所以H ˆ(z)可以展开成级数形式,即(z)=∑h ˆ(n )z −n ∞n =1,也就是说(z)的逆变换(n)是存在的,设(n)=0,将等式两端分别对z −1求导,得到:∑n hˆ(n )∞n =1z−n +1=∑ui z −i +1pi =11−∑a i z−ipi =1有(1-∑a i z −i pi =1)∑n (n )∝n =1z−n +1=∑u i z −i +1∝n =1, 令式左右两边Z 的各次幂前系数分别相等得到:(1)=1 (n)=a n +∑(1−i n )a i (n −i )n −1i =1 1≤n ≤p (n)=∑(1−i n)a i h ˆ(n −i )n −1i =1 n>p 在本实验中,取预测阶数为10,语音的样点数为160,按照上式可直接从预测系数a i 求得倒谱(n),这个倒谱是根据线性预测模型得到,即称为LPC 倒谱。
2.2.4线性预测语音信号合成根据线性预测的基本思想,用过去M 个样点值来预测现在或未来的样点值:y ˆ(n )=∑a i y (n −i )M i =1H ˆH ˆh ˆh ˆh ˆhˆh ˆh ˆh ˆhˆyˆ(n )是预测信号,a i 为预测系数,y(n)为取样信号,预测误差(n ): E {ε2(n)}=E {[y (n )−∑a i y (n −i )M i =1]2}为使E {ε2(n)}最小,对a i 求偏导,并令其为零,有:E {[y (n )−∑a i y (n −i )M i =1]y(n-)}=0 =1,…,M上式表明采用最佳预测系数时,预测误差与过去的样点值正交。
由于语音信号的短时平稳性,要分帧处理,对于每一个样点值记为 y n (n)…, y n (n+N-1),这段语音记为Yn 。
对于语音段Yn ,并记Φn (j,i)=E {y n (m −j )y m (m −i )},对于语音段Yn ,它的自相关函数为:R n (j )=∑y n (m )y n (m −j )n −1m =j n=1,…,M 根据Yule —walker 方程,可以解出样值,用这种方法定期地改变激励参数u(n)和预测系数a i ,并使用修改过后的基因周期和共振峰参数,就能合成出语音,合成语音样本如下:S (n )=∑a i s (n −i )pi =1+Gu(n)a i 为预测系数;G 为模型增益;u(n)为激励;合成样本s(n);p 为预测器阶数;2.2.5流程图开始 导入语音数据S 算法 数据归一化 建立滤波器重建语言 合成并加窗 确定帧数线性预测法预测p 个系数 计算 减小基音周期 打开音频 男变女 开始运行 女变男 变童声3数字变声器的软件实现及仿真结果 3.1 界面设计在设计数字变声器的界面时,使用了MATLAB 提供的可视化的界面环境Guide 。
相比通 过编写程序进行GUI 的设计,可视化的界面环境更加方便快捷。
见图41按钮组:设计中使用了两个按钮组,把打开、原声、男变女、女变男、童声三项功能放在一组;另一个把语音的图像 即4个axes 放在了一组。
2按钮:最常用的控件,用于相应用户的鼠标单击,按钮上有说明文字说明其作用。
设计中使用了五个按钮,分别用于打开、原声、男变女、女变男、童声。
3 轴: 用于显示图像。
3.2回调函数对控件的Callback 属性编程是实现GUI 的基本机制,我们下来就要在各函数中编写程序代码,完成各回调函数的功能。
(1)打开function dakai_Callback(hObject, eventdata, handles)[filename,pathname]=uigetfile({'*.wav','ALL FILES'},'选择声音'); if isequal([filename pathname],[0,0]) return ; endstr=[pathname filename]; [temp,Fs]=audioread(str); temp1=resample(temp,80,441); handles.y=temp1;handles.y1=temp;handles.Fs=Fs;guidata(hObject,handles);(2)原声function yuansheng_Callback(hObject, eventdata, handles)c=handles.Fs;sound(handles.y1,c);plot(handles.axes1,handles.y1)title(handles.axes1,'时域图');ysize=size(handles.y1);y1=fft(handles.y,length(handles.y1));ysize=size(y1);plot(handles.axes2,abs(y1));xlabel(handles.axes2,'频率');ylabel(handles.axes2,'幅度');title(handles.axes2,'频率特性');(3)男变女function nanbiannv_Callback(hObject, eventdata, handles)FL = 80 ; % 帧移WL = 240 ; % 窗长P = 10 ; %预测系数个数s = handles.y;fs = handles.Fs;% 定义常数s = s/max(s); % 归一化L = length(s); % 读入语音长度FN = floor(L/FL)-2; % 计算帧长,floor;向负无穷方向% 预测和重建滤波器exc = zeros(L,1); % 激励信号,double类零矩阵L行1列zi_pre = zeros(P,1); % 预测滤波器状态s_rec = zeros(L,1); % 重建语音zi_rec = zeros(P,1);% 变调滤波器exc_syn_t = zeros(L,1); % 合成的激励信号,创建一个L行1列的0脉冲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); %线性预测计算预测系数% A是预测系数,E会被用来计算合成激励的能量s_f=s((n-1)*FL+1:n*FL); % 本帧语音%利用filter函数重建语音[exc1,zi_pre] = filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL) = exc1; %计算激励%利用filter函数重建语音[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(n) = findpitch(s_Pitch); %计算基音周期ptG = sqrt(E*PT(n)); %计算合成激励的能量G% 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);PT1 =floor(PT(n)/2); %减小基音周期poles = roots(A);deltaOMG =100*2*pi/fs;for p=1:10 %增加共振峰if imag(poles(p))>0poles(p) = poles(p)*exp(1j*deltaOMG);elseif imag(poles(p))<0poles(p) = poles(p)*exp(-1j*deltaOMG);endendendA1=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(handles.axes4,exc_syn_t)xlabel(handles.axes4,'时域图');ylabel(handles.axes4,'频率');title(handles.axes4,'幅度');handles.y=s_syn_t;guidata(hObject,handles);plot(handles.axes3,s_syn_t);%y1size=size(s_syn_t);plot(handles.axes3,s_syn_t);title(handles.axes3,'频率特性');sound(handles.y,8000);%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(3)女变男function nvbiannan_Callback(hObject, eventdata, handles)FL = 80 ; % 帧移WL = 240 ; % 窗长P = 10 ; %预测系数个数s = handles.y;fs = handles.Fs;% 定义常数s = s/max(s); % 归一化L = length(s); % 读入语音长度FN = floor(L/FL)-2; % 计算帧长,floor;向负无穷方向% 预测和重建滤波器exc = zeros(L,1); % 激励信号,double类零矩阵L行1列zi_pre = zeros(P,1); % 预测滤波器状态s_rec = zeros(L,1); % 重建语音zi_rec = zeros(P,1);% 变调滤波器exc_syn_t = zeros(L,1); % 合成的激励信号,创建一个L行1列的0脉冲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); %线性预测计算预测系数% A是预测系数,E会被用来计算合成激励的能量s_f=s((n-1)*FL+1:n*FL); % 本帧语音%利用filter函数重建语音[exc1,zi_pre] = filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL) = exc1; %计算激励%利用filter函数重建语音[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(n) = findpitch(s_Pitch); %计算基音周期ptG = sqrt(E*PT(n)); %计算合成激励的能量G% 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);PT1 =floor(PT(n)/2); %减小基音周期poles = roots(A);deltaOMG =100*2*pi/fs;for p=1:10 %增加共振峰if imag(poles(p))>0poles(p) = poles(p)*exp(1j*deltaOMG);elseif imag(poles(p))<0poles(p) = poles(p)*exp(-1j*deltaOMG);endendendA1=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%绘图handles.y=s_syn_t;guidata(hObject,handles);%绘图plot(handles.axes4,exc_syn_t)xlabel(handles.axes4,'时域图');ylabel(handles.axes4,'频率');title(handles.axes4,'幅度');handles.y=s_syn_t;guidata(hObject,handles);plot(handles.axes3,s_syn_t);%y1size=size(s_syn_t);plot(handles.axes3,s_syn_t);title(handles.axes3,'频率特性');(4)变童声function tongsheng_Callback(hObject, eventdata, handles)FL = 80 ; % 帧移WL = 240 ; % 窗长P = 10 ; %预测系数个数s = handles.y;fs = handles.Fs;% 定义常数s = s/max(s); % 归一化L = length(s); % 读入语音长度FN = floor(L/FL)-2; % 计算帧长,floor;向负无穷方向% 预测和重建滤波器exc = zeros(L,1); % 激励信号,double类零矩阵L行1列zi_pre = zeros(P,1); % 预测滤波器状态s_rec = zeros(L,1); % 重建语音zi_rec = zeros(P,1);% 变调滤波器exc_syn_t = zeros(L,1); % 合成的激励信号,创建一个L行1列的0脉冲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); %线性预测计算预测系数% A是预测系数,E会被用来计算合成激励的能量s_f=s((n-1)*FL+1:n*FL); % 本帧语音%利用filter函数重建语音[exc1,zi_pre] = filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL) = exc1; %计算激励%利用filter函数重建语音[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(n) = findpitch(s_Pitch); %计算基音周期ptG = sqrt(E*PT(n)); %计算合成激励的能量G% 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);PT1 =floor(PT/2);poles = roots(A);deltaOMG = 700*2*pi/8000;for p=1:10if imag(poles(p))>0 ;poles(p) = poles(p)*exp(1i*deltaOMG);elseif imag(poles(p))<0 ;poles(p) = poles(p)*exp(-1i*deltaOMG);endendendA1=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);endplot(handles.axes4,exc_syn_t)xlabel(handles.axes4,'时域图');ylabel(handles.axes4,'频率');title(handles.axes4,'幅度');handles.y=s_syn_t;guidata(hObject,handles);plot(handles.axes3,s_syn_t);%y1size=size(s_syn_t);plot(handles.axes3,s_syn_t);title(handles.axes3,'频率特性');sound(handles.y,8000)3.2.1仿真结果(1)男声变女声前后图形对(2)女生变男生前后图形对比(3)男声变童声图形对比图6男声变童声前后图形对比4 结束语在开始制作时毫无头绪,但经过老师和同学的讲解,及自己所找到的各种文献及例子一点一点的探索,最终一点点做出来了。