MATLAB变声程序代码.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
% ct1 clear 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); ? ?? ???end ? ?? ??? ? ?? ???s_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) =

文档评论(0)

152****6253 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档