matlab变声程序代码

上传人:第*** 文档编号:33560310 上传时间:2018-02-15 格式:DOCX 页数:4 大小:17.62KB
返回 下载 相关 举报
matlab变声程序代码_第1页
第1页 / 共4页
matlab变声程序代码_第2页
第2页 / 共4页
matlab变声程序代码_第3页
第3页 / 共4页
matlab变声程序代码_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《matlab变声程序代码》由会员分享,可在线阅读,更多相关《matlab变声程序代码(4页珍藏版)》请在金锄头文库上搜索。

1、% ct1clear all,close all, clc;% 定义常数FL = 80; % 帧长WL = 240; % 窗长P = 10; % 预测系数个数s,fs = wavread(sunday_2.wav); % 载入语音 ss = 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)

2、;% 合成滤波器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); % 合成滤波器的状态% 变速不变调滤波器(假设速度减

3、慢一倍)v=.5;exc_syn_v = zeros(vL,1); % 合成的激励信号(脉冲串)s_syn_v = zeros(vL,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 会被用来计

4、算合成激励的能量 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) =

5、 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-

6、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% 的输入得到新的合成语音,听一听是不是速度变慢了,但音调没有变。FL_v = floor

7、(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

8、)/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; %计算得到的加长合成语音% (13) 将基音周期减小一半,将共振峰频率增加 150Hz,重新合成语音,听听是啥感受PT1 =floor(PT/2); %减小基音周期 poles = roots(A);deltaOMG = 150*2*pi/8000;for p=1:10 %增加共振峰频率,实轴上方的极点逆时针转,下方顺时针转if imag(poles(p)0 poles(p) = poles(

9、p)*exp(j*deltaOMG);elseif imag(poles(p)0 poles(p) = poles(p)*exp(-j*deltaOMG);endendA1=poly(poles);if n=27figure;zplane(1,A1);endtempn_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*F

10、L-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% (6) s ,exc 和 s_rec 的区别figure;subplot(3,1,1), plot(exc), xlabel(n (samples),

11、ylabel(Amplitude), title(激励信号);subplot(3,1,2), plot(s), xlabel(n (samples), ylabel(Amplitude), title(原语音信号);subplot(3,1,3), plot(s_rec), xlabel(n (samples), ylabel(Amplitude), title(重建语音信号);figure;subplot(3,1,1), plot(exc), xlabel(n (samples), ylabel(Amplitude), title(激励信号), XLim(15*FL+1,16*FL);subp

12、lot(3,1,2), plot(s), xlabel(n (samples), ylabel(Amplitude), title(原语音信号), XLim(15*FL+1,16*FL);subplot(3,1,3), plot(s_rec), xlabel(n (samples), ylabel(Amplitude), title(重建语音信号), XLim(15*FL+1,16*FL);sound(exc);pause(2);sound(s);pause(2);sound(s_rec);pause(2);%原始语音与合成语音的差别figure;subplot(3,1,1), plot(ex

13、c_syn), xlabel(n (samples), ylabel(Amplitude), title(合成激励信号);subplot(3,1,2), plot(s), xlabel(n (samples), ylabel(Amplitude), title(原语音信号);subplot(3,1,3), plot(s_syn), xlabel(n (samples), ylabel(Amplitude), title(合成语音信号);sound(s);pause(2);sound(s_syn);pause(2);%变速不变调figure;subplot(3,1,1), plot(exc_sy

14、n_v), xlabel(n (samples), ylabel(Amplitude), title(合成慢速激励信号) ,XLim(0,length(exc_syn_v);subplot(3,1,2), plot(s), xlabel(n (samples), ylabel(Amplitude), title(原语音信号), XLim(0,length(s);subplot(3,1,3), plot(s_syn_v), xlabel(n (samples), ylabel(Amplitude), title(合成慢速语音信号), XLim(0,length(s_syn_v); sound(s

15、);pause(2);sound(s_syn_v);pause(4);%变调不变速figure;subplot(3,1,1), plot(exc_syn_t), xlabel(n (samples), ylabel(Amplitude), title(合成高调激励信号) ,XLim(0,length(exc_syn_t);subplot(3,1,2), plot(s), xlabel(n (samples), ylabel(Amplitude), title(原语音信号), XLim(0,length(s);subplot(3,1,3), plot(s_syn_t), xlabel(n (samples), ylabel(Amplitude), title(合成高调语音信号), XLim(0,length(s_syn_t); sound(s);pause(2);sound(s_syn_t);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号