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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐