==================================%应用MATLAB求解线性预测倒谱主程序
[x,f,p]=wavread('1.wav'); % x为全部采样点
%x=filter([1-0.9375],1,x);
len=160; %按照惯例,每一帧信号取20ms,采样8k的话,每帧160个采样点
y=buffer(x,len,len/2); % 分帧处理,一般情况下帧移选择在0.5个帧宽
[c,b]=size(y); % 返回行列数,b为列数,每行代表一帧
for n=1:b
yy=y(:,n); %提取一帧
p=10; %p为阶数,lpc计算阶数,8k的采样率选择10较为合适
A=real(LPC3(yy,p));
lpc1=A;
a=lpc2lpcc(lpc1);
lpcc(n,:)=a;
end
%==============================求解线性预测系数子程序
function lpc1=lpc3(y2,p); %求自相关函数
r=zeros(1,p+1);
for k=1:p+1
sum=0;
for m=1:160+1-k %160为每一帧的长度
sum=sum+y2(m).*y2(m-1+k);
end
r(k)=sum;
end
%根据durbin算法求线性预测系数
k=zeros(1,p);
k(1)=r(2)/r(1);
a=zeros(p,p);
a(1,1)=k(1);
e=zeros(1,p);
e(1)=(1-k(1)^2)*r(1);
%递推过程
for i=2:p
c=zeros(1,i);
sum=0;
for j=1:i-1
sum=sum+(a(i-1,j).*r(i+1-j));
end
c(i)=sum;
k(i)=(r(i+1)-c(i))/e(i-1); %求反射系数
a(i,i)=k(i);
for j=1:i-1
a(i,j)=a(i-1,j)-k(i).*a(i-1,i-j);
end
e(i)=(1-k(i)^2)*e(i-1); %求预测误差
end
%递推结束后提取预测系数
d=zeros(1,p); %p=10
for t=1:p
d(t)=a(p,t);
end
lpc1=d; %返回向量
%================================求解倒谱程序,以每一帧为单位
function lpcc=lpc2lpcc(lpc1) %lpc1为线性预测参数
n_lpc=8;n_lpcc=12;
lpcc=zeros(1,n_lpcc); %12个元素的数组,用来存放特征
lpcc(1)=lpc1(1); %第一个值相同
for n=2:n_lpc %求8前面的阶数
lpcc(n)=lpc1(n);
for l=1:n-1
lpcc(n)=lpcc(n)+lpc1(l)*lpcc(n-l)*(n-l)/n;
end
end
for n=n_lpc+1:n_lpcc %求8后面的阶数
lpcc(n)=0;
for l=1:n_lpc
lpcc(n)=lpcc(n)+lpc1(l)*lpcc(n-l)*(n-l)/n;
end
end
lpcc=-lpcc
lpcc求法(matlab)
4星 · 超过85%的资源 需积分: 50 142 浏览量
2011-04-06
11:05:41
上传
评论
收藏 1KB RAR 举报
joyo159
- 粉丝: 0
- 资源: 1
最新资源
- docker一键安装包
- Screenshot_20240430_144340_com.ss.android.ugc.live.jpg
- 回到山沟沟.mp3
- 基于matlab实现自适应波束形成RLS及LMS算法仿真源程序1.rar
- 基于matlab实现自己编写的基于卡尔曼滤波的利用加速度传感器的计步器,测试数据是传感器放在腰部和手臂 .rar
- 基于matlab实现阵列信号处理,波束形成.rar
- 111111111111111111
- 基于matlab实现计步器编程;对当前的计步器装置的数值算法模拟 .rar
- Mdb学习查看PW;access;mdb;pw;password;patch
- 基于matlab实现关于语音信号声源定位DOA估计所用的一些传统算法.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页