%实验要求一:语音信号变速实验
clear all; clc; close all;
[xx,fs]=wavread('C7_4_y.wav'); % 读取文件
xx=xx-mean(xx); % 去除直流分量
x=xx/max(abs(xx)); % 归一化
N=length(x); % 数据长度
time=(0:N-1)/fs; % 信号的时间刻度
wlen=240; % 帧长
inc=80; % 帧移
overlap=wlen-inc; % 重叠长度
tempr1=(0:overlap-1)'/overlap; % 斜三角窗函数w1
tempr2=(overlap-1:-1:0)'/overlap; % 斜三角窗函数w2
n2=1:wlen/2+1; % 正频率的下标值
X=enframe(x,wlen,inc)'; % 分帧
fn=size(X,2); % 帧数
T1=0.1; r2=0.5; % 端点检测参数
miniL=10; % 有话段最短帧数
mnlong=5; % 元音主体最短帧数
ThrC=[10 15]; % 阈值
p=12; % LPC阶次
frameTime=FrameTimeC(fn,wlen,inc,fs); % 计算每帧的时间刻度
in=input('请输入伸缩语音的时间长度是原语音时间长度的倍数:','s');%输入伸缩长度比例
rate=str2num(in);
for i=1 : fn % 求取每帧的预测系数和增益
u=X(:,i);
[ar,g]=lpc(u,p);
AR_coeff(:,i)=ar;
Gain(i)=g;
end
% 基音检测
[voiceseg,vosl,SF,Ef,period]=pitch_Ceps(x,wlen,inc,T1,fs); %基于倒谱法的基音周期检测
Dpitch=pitfilterm1(period,voiceseg,vosl); % 对T0进行平滑处理求出基音周期T0
tal=0; % 初始化
zint=zeros(p,1);
%% LSP参数的提取
for i=1 : fn
a2=AR_coeff(:,i); % 取来本帧的预测系数
lsf=lpctolsf(a2); % 调用ar2lsf函数求出lsf
Glsf(:,i)=lsf; % 把lsf存储在Glsf数组中
end
% 通过内插把相应数组缩短或伸长
fn1=floor(rate*fn); % 设置新的总帧数fn1
Glsfm=interp1((1:fn),Glsf',linspace(1,fn,fn1))';% 把LSF系数内插
Dpitchm=interp1(1:fn,Dpitch,linspace(1,fn,fn1));% 把基音周期内插
Gm=interp1((1:fn),Gain,linspace(1,fn,fn1));%把增益系数内插
SFm=interp1((1:fn),SF,linspace(1,fn,fn1)); %把SF系数内插
%% 语音合成
for i=1:fn1;
lsf=Glsfm(:,i); % 获取本帧的lsf参数
ai=lsftolpc(lsf); % 调用lsf2ar函数把lsf转换成预测系数ar
sigma=sqrt(Gm(i));
if SFm(i)==0 % 无话帧
excitation=randn(wlen,1); % 产生白噪声
[synt_frame,zint]=filter(sigma,ai,excitation,zint);
else % 有话帧
PT=round(Dpitchm(i)); % 取周期值
exc_syn1 =zeros(wlen+tal,1); % 初始化脉冲发生区
exc_syn1(mod(1:tal+wlen,PT)==0)=1;% 在基音周期的位置产生脉冲,幅值为1
exc_syn2=exc_syn1(tal+1:tal+inc); % 计算帧移inc区间内的脉冲个数
index=find(exc_syn2==1);
excitation=exc_syn1(tal+1:tal+wlen);% 这一帧的激励脉冲源
if isempty(index) % 帧移inc区间内没有脉冲
tal=tal+inc; % 计算下一帧的前导零点
else % 帧移inc区间内有脉冲
eal=length(index); % 计算有几个脉冲
tal=inc-index(eal); % 计算下一帧的前导零点
end
gain=sigma/sqrt(1/PT); % 增益
[synt_frame,zint]=filter(gain,ai,excitation,zint);%用激励脉冲合成语音
end
if i==1 % 若为第1帧
output=synt_frame; % 不需要重叠相加,保留合成数据
else
M=length(output); % 重叠部分的处理
output=[output(1:M-overlap); output(M-overlap+1:M).*tempr1+...
synt_frame(1:overlap).*tempr2; synt_frame(overlap+1:wlen)];
end
end
output(find(isnan(output)))=0;
bn=[0.964775 -3.858862 5.788174 -3.858862 0.964775]; % 滤波器系数
an=[1.000000 -3.928040 5.786934 -3.789685 0.930791];
output=filter(bn,an,output); % 高通滤波
output=output/max(abs(output)); % 幅值归一化
%% 作图
% figure(1)
ol=length(output); % 输出数据长度
time1=(0:ol-1)/fs; % 求出输出序列的时间序列
subplot 211; plot(time,x,'k'); title('原始语音波形');
axis([0 max(time) -1 1]); xlabel('时间/s'); ylabel('幅值')
subplot 212; plot(time1,output,'k'); title('合成语音波形');
xlim([0 max(time1)]); xlabel('时间/s'); ylabel('幅值')
没有合适的资源?快使用搜索试试~ 我知道了~
语音合成基于matlab语音信号变速【含Matlab源码 565期】.zip
共13个文件
m:11个
wav:1个
jpg:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 163 浏览量
2021-10-11
18:01:34
上传
评论 2
收藏 83KB ZIP 举报
温馨提示
CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:C7_4_y_1.m; 调用函数:其他m文件; 语音信号,其格式为MP4; 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到 Matlab的当前文件夹中; 步骤二:双击打开C7_4_y_1.m文件;(若有其他m文件,无需运行) 步骤三:点击运行,等程序运行完得到结果; 4、语音处理系列仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 语音处理系列程序定制或科研合作方向:语音隐藏、语音压缩、语音识别、语音去噪、语音评价、语音加密、语音合成、语音分析、语音分离、语音处理、语音编码、音乐检索、特征提取、声源定位、情感识别、语音采集播放变速等;
资源推荐
资源详情
资源评论
收起资源包目录
【语音合成】基于matlab语音信号变速【含Matlab源码 565期】.zip (13个子文件)
【语音合成】基于matlab语音信号变速【含Matlab源码 565期】
pitch_vad.m 1KB
lsftolpc.m 1KB
C7_4_y_1.m 4KB
lpctolsf.m 2KB
pitfilterm1.m 398B
FrameTimeC.m 136B
findSegment.m 753B
enframe.m 3KB
C7_4_y.wav 55KB
运行结果1.jpg 30KB
pitch_Ceps.m 1006B
lpcff.m 154B
linsmoothm.m 564B
共 13 条
- 1
资源评论
- 小殇2022-06-15用户下载后在一定时间内未进行评价,系统默认好评。
海神之光
- 粉丝: 5w+
- 资源: 6477
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 操作系统实验ucore lab3
- DG储能选址定容模型matlab 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠 这段程序是一个改进的粒子群算法,主要用于解决电力系统中的优化问题 下面我将对程序进行详
- final_work_job1(1).sql
- 区块链与联邦学习结合:FedChain项目详细复现指南
- 西门子S7 和 S7 Plus 协议开发示例
- 模块化多电平变流器 MMC 的VSG控制 同步发电机控制 MATLAB–Simulink仿真模型 5电平三相MMC,采用VSG控制 受端接可编辑三相交流源,直流侧接无穷大电源提供调频能量 设置频率
- 微电网(两台)主从控制孤岛-并网平滑切的分析 分析了: 1.孤岛下VF控制 2.并网下PQ控制 3.孤岛下主从控制 4.孤岛到并网的平滑切控制 5.除模型外还对分布式发电与主动配电网一些常见问题做了
- 第四组二手产品.zip
- 基于小程序的智慧物业平台源代码(java+小程序+mysql+LW).zip
- MVIMG_20241222_194113.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功