资源描述:
《卡尔曼滤波算法及MATLAB实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于matlab的卡尔曼信号滤波设计 卡尔曼滤波的基本思想是:以最小均方误差为最佳估计准则,采用信号与噪声的状态空间模型,利用前一时刻的估计值和当前时刻的观测值来更新对状态变量的估计,求出当前时刻的估计值,算法根据建立的系统方程和观测方程对需要处理的信号做出满足最小均方误差的估计。语音信号在较长时间内是非平稳的,但在较短的时间内的一阶统计量和二阶统计量近似为常量,因此语音信号在相对较短的时间内可以看成白噪声激励以线性时不变系统得到的稳态输出。假定语音信号可看成由一AR模型产生: 时间更新方程:
2、 测量更新方程: K(t)为卡尔曼增益,其计算公式为: 其中 、分别为过程模型噪声协方差和测量模型噪声协方差,测量协方差可以通过观测得到,则较难确定,在本实验中则通过与两者比较得到。 由于语音信号短时平稳,因此在进行卡尔曼滤波之前对信号进行分帧加窗操作,在滤波之后对处理得到的信号进行合帧,这里选取帧长为256,而帧重叠个数为128; 下图为原声音信号与加噪声后的信号以及声音信号与经卡尔曼滤波
3、处理后的信号:原声音信号与加噪声后的信号原声音信号与经卡尔曼滤波处理后的信号MATLAB程序实现如下:%%%%%%%%%%%%%%%%%基于LPC全极点模型的最大后验概率估计法,采用卡尔曼滤波%%%%%%%%%%%%%%clear;clc;%%%%%%%%%%%%%%%%%%%%%%%%%%%加载声音数据%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%loadvoice.maty=m1(2,:);x=y+0.08*randn(1,length(y));%%%%%%%%%%%%%%%原声音信号和加噪声后的信号%%%%%%%%%%%%%%%figure(
4、1);subplot(211);plot(m1(1,:),m1(2,:));xlabel('时间');ylabel('幅度');title('原声音信号');subplot(212);plot(m1(1,:),x);xlabel('时间');ylabel('幅度');title('加噪声后的信号');%%%%%%%%%%%%%%%%%%%%%%%%%输入参数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Fs=44100; %信号采样的频率bits=16; %信号
5、采样的位数N=256; %帧长m=N/2; %每帧移动的距离lenth=length(x); %输入信号的长度count=floor(lenth/m)-1; %处理整个信号需要移动的帧数%%%先不考虑补零的问题p=11; %AR模型的阶数a=zeros(1,p);w=hamming(N); %加汉明窗函数y_temp=0;F=zeros(11,11); %转移矩阵F(
6、1,2)=1;F(2,3)=1;F(3,4)=1;F(4,5)=1;F(5,6)=1;F(6,7)=1;F(7,8)=1;F(8,9)=1;F(9,10)=1;F(10,11)=1;H=zeros(1,p); %S0=zeros(p,1);P0=zeros(p);S=zeros(p);H(11)=1;s=zeros(N,1);G=H';P=zeros(p);%%%%%%%%%%%%%%%%测试噪声协方差%%%%%%%%%%%%%%%%%%%%%%y_temp=cov(x(1:7680));x_frame=zeros(256,1);x_fra
7、me1=zeros(256,1);T=zeros(lenth,1);forr=1:count%%%%%%%%%%%%%%%%%%%5%%%%%分帧处理%%%%%%%%%%%%%%%%%%%%% x_frame=x((r-1)*m+1:(r+1)*m);%%%%%%%%%%%%%%%%采用LPC模型求转移矩阵参数%%%%%%%%%%%%%% ifr==1 [a,VS]=lpc(x_frame(:),p