一、简介
基于matlab线性预测系数和预测误差的语音合成
二、源代码
clear all; clc; close all;
[x, fs] = audioread('girl.wav'); % 读入数据文件
x=x(:,1);
sound(x,fs)
pause(4);
x=x-mean(x); % 消除直流分量
x=x/max(abs(x)); % 幅值归一
xl=length(x); % 数据长度
time=(0:xl-1)/fs; % 计算出时间刻度
p=12; % LPC的阶数为12
wlen=200; inc=80; % 帧长和帧移
msoverlap = wlen - inc; % 每帧重叠部分的长度
y=enframe(x,wlen,inc)'; % 分帧
fn=size(y,2); % 取帧数
% 语音分析:求每一帧的LPC系数和预测误差
for i=1 : fn
u=y(:,i); % 取来一帧
A=lpc(u,p); % LPC求得系数
aCoeff(:,i)=A; % 存放在aCoeff数组中
errSig = filter(A,1,u); % 计算预测误差序列
resid(:,i) = errSig; % 存放在resid数组中
end
% 语音合成:求每一帧的合成语音叠接成连续语音信号
for i=1:fn
A = aCoeff(:,i); % 取得该帧的预测系数
residFrame = resid(:,i); % 取得该帧的预测误差
synFrame(i,:) = filter(1, A', residFrame); % 预测误差激励,合成语音
end;
outspeech=Filpframe_OverlapS(synFrame,wlen,inc);
ol=length(outspeech);
if ol<xl % 把outspeech补零,使与x等长
outspeech=[outspeech zeros(1,xl-ol)];
else
outspeech=outspeech(1:xl);
end
sound(outspeech,fs)
% 作图
subplot 211; plot(time,x);
xlabel(['时间/s']); ylabel('幅值'); ylim([-1 1.1]);
title('(a)原始语音信号')
三、运行结果
四、备注
版本:2014a
完整代码或代写加1564658423
标签:误差,预测,合成,wlen,源码,语音,inc 来源: https://www.cnblogs.com/homeofmatlab/p/14940940.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。