% 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会被用来计算合成激励的能量