?? 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 + -