编程语言
首页 > 编程语言> > 【语音合成】基于matlab线性预测系数和预测误差语音合成【含Matlab源码 564期】

【语音合成】基于matlab线性预测系数和预测误差语音合成【含Matlab源码 564期】

作者:互联网

一、简介

基于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