www.pudn.com > DHMM_MATLAB.rar > My_lpc.m
% by lkk@mails.tsinghua.edu.cn
function [lpc_number] = My_lpc(frames,rank);
% 输入:
% frames 输入帧
% rank lpc阶数
% 输出:
% lpc_number lpc系数矩阵,rank行n列向量
[windowsize, numframes] = size(frames);
lpc_number = [];
% 用自相关法计算lpc系数
for nFrame = 1:numframes
R = zeros(rank+1,1);
alpha = zeros(rank,rank);
E = zeros(rank+1,1);
k = zeros(rank,1);
for i = 1:rank+1
R(i) = sum(frames(i:windowsize,nFrame).*frames(1:windowsize-i+1,nFrame));
end
E(1) = R(1);
for i = 1:rank
tmpSum = 0;
for j = 1:i-1
tmpSum = tmpSum + alpha(j,i-1)*R(i-j+1);
end
k(i) = (R(i+1) - tmpSum)/E(i);
alpha(i,i) = k(i);
for j = 1:i-1
alpha(j,i) = alpha(j,i-1) - k(i)*alpha(i-j,i-1);
end
E(i+1) = (1-k(i)*k(i))*E(i);
end
% lpc系数
lpc_number = [lpc_number,alpha(:,rank)];
end