📄 lpc_lpcc_v2.m
字号:
function ccc = lpc_lpcc_v2(x)
%计算x的LPC参数和LPCC参数,并组合在一起存放。
%一行代表一帧,每行前半部分为LPC参数,后半部分为LPCC参数。
n_lpc=12; % LPC参数的阶数
n_lpcc=12; % LPCC参数的阶数
% % 归一化倒谱提升窗口
% w = 1 + 6 * sin(pi * [1:12] ./ 12);
% w = w/max(w);
% 预加重滤波器
xx=double(x);
xx=filter([1 -0.9375],1,xx);
% 语音信号分帧
xx=enframe(xx,256,80);
% 计算每帧的LPC和LPCC参数
for i=1:size(xx,1)
y = xx(i,:);
s = y' .* hamming(256);
c1 = lpc(s,n_lpc);
cc1(i,:) = c1(2:n_lpc+1); %不要LPC第1个值(都等于1)
a = lpc(s,n_lpc-1);
c2 = lpc2lpcc(a);
cc2(i,:) = c2;
% cc2(i,:) = c2(2:n_lpcc+1); %不要LPCC第1个值(0阶倒谱,实际上是直流分量)
end
%合并lpc参数和lpcc参数,一行代表一帧,每行前半部分为LPC参数,后半部分为LPCC参数。
ccc=[cc1,cc2];
function lpcc = lpc2lpcc(lpc)
%由LPC系数求得LPCC系数
n_lpc=length(lpc); % LPC参数的阶数
n_lpcc=12; % LPCC参数的阶数
lpcc=zeros(n_lpcc,1);
lpcc(1)=lpc(1);
for i=2:n_lpc
lpcc(i)=lpc(i);
for j=1:i-1
lpcc(i)=lpcc(i)+lpc(j)*lpcc(i-1)*(i-1)/i;
end
end
%如果LPCC参数的阶数大于LPC参数的阶数,则多出部分通过外推得到
if n_lpcc>n_lpc
for i=n_lpc+1:n_lpcc
lpcc(i)=0;
for j=1:n_lpc
lpcc(i)=lpcc(i)+lpc(j)*lpcc(i-1)*(i-1)/i;
end
end
end
lpcc=-lpcc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -