
语音信号的自适应滤波.docx
21页统计信号处理上机报告指导老师: 学生姓名:学生姓名:班 号:班 号:学 号: 学 号:中国地质大学(武汉)机械与电子信息学院二0一五年元月语音信号的自适应滤波一、 实验目的1、 了解线性自适应滤波的原理及流程2、 本实验选用LMS算法和RLS算法对语音信号进行滤波,熟悉并实现两种算法3、 通过matlab编程实现,语音信号的采集,对其加噪,后去噪,观察信号波形 的变化二、 实验原理1、自适应滤波原理:自适应滤波器是指利用前一时刻的结果,自动调节当前时刻的滤波器参数, 以适应信号和噪声未知或随机变化的特性,得到有效的输出,主要由参数可调的 数字滤波器和自适应算法两部分组成,如图1所示图1自适应滤波器原理图x(n)称为输入信号,y(n)称为输出信号,d(n)称为期望信号或者训练信号, e(n)为误差僖号,其中,e(n)=d(n)-y(n).自适应滤波器的系数(权值)根据误差 信号e(n),通过一定的自适应算法不断的进行改变,以达到使输出信号y(n)最 接近期望信号图中参数可调的数字滤波器和自适应算法组成自适应滤波器自适应滤波算 法是滤波器系数权值更新的控制算法,根据输入信号与期望信号以及它们之间的 误差信号,自适应滤波算法依据算法准则对滤波器的系数权值进行更新,使其能 够使滤波器的输出趋向于期望信号。
1) 具体理论推导:记数字滤波器脉冲响应为:h(k) = [h0 (k) h1 (k)…h yx(k) = [x(k) x(k-1) … x(k-n-1)] 误差信号为:Ae(k) = y (k) - y (k)e(k) = y( k) - hT (k) x (k)优化过程就是最小化性能指标J(k),它是误差的平方和:J(k) = 2 [y(i) — hT (k)x(i)]2i=1求使J(k)最小的系数向量h(k),即使J(k)对h(k)的导数为零,也就是如 =0dh (k)把J(k)的表达式代入,得:22L [y (i) - hT (k)x(i)]x(i) = 0i=1Ext (i) y (i) = hT (k )£ x(i) xt (i)i =1i=1 由此得出滤波器系数的最优向量:^^xt (i)y (i)hT (k) = Z x(i) xt (i)i=1这个表达式由输入信号自相关矩阵c^(x)和输入信号与参考信号的相关矩阵cyx(k)组成,如下所示,维数都为(n,n):c (k) = 1Lxt (i)x(i)i=1cx (k) = 1^xt (i) y (i)i =1系数最优向量也可以写成如下形式:hT (k) c (k)c-1(k)自相关和互相关矩阵的递归表达式如下:c (k) = c (k -1) + x(k)xt (k)c (k) = c (k -1) + y(k)xt (k)yx yx把cyx(k)的递归表达式代入系数向量表达式,得:hT (k) = c (k)c-i(k)hT(k) = [c (k-1) + xt(k)y(k)]c-i(k)yx xx考虑到c (k_1)= hT(k- 1)c (k-1)可以记h(k) = c-i(x)[c (k - 1)h(k -1) + y(k)x(k)]用前面得到的表达式求出c (k -1),并代入上式:h(k) = c-i(x){[c (k)-x(k)xt(k)]h(k -1) + 火k)x(k)}或 h(k) = h(k -1) + c-1(x)[y(k)x(k) - x(k)xt (k)h(k -1)]xx则滤波器系数的递归关系式可以记作h(k) = h(k -1) + c-1(x)[y(k)x(k) - x(k)xt (k)h(k -1)]xx其中e(k) = y(k) 一 xt (k)h(k -1)e(k)表示先验误差,只因为它是由前一个采样时刻的系数算出的。
在实际中,很 多时候由于h(k)计算的复杂度而不能应用于实时控制用6,1代换cxx(k),其中: 6为自适应梯度,I为辨识矩阵(n,n)这时 h(k) = h(k -1) + 5 (k)e(k)这时就是一个最小均方准则问题2、 LMS算法的基本步骤:有关参量:M---滤波器抽头系数(阶数);u----步长(0
%假设滤波器抽头个数位k,数据长度为Ng=100; %统计仿真次数A=wavread('C:\Users\Administrator\Desktop\语音 \RLS\语 音 2.wav'); N=10000; % N=length(A);%输入信号抽样点数 k=128; %时域抽头LMS算法滤波器阶数 pp=zeros(g,N-k); %将每次独立循环的误差结果存于PP中,以便后面对其平均u=0.0001; for q=1:g t=1:N; s=A*10;%将信号幅度扩大10倍以免被噪声淹没 s = s(1:10000);%取一部分信号 figure(1) subplot(311);plot(t,s); title '原信号时域波形');xlabel('n');ylabel('s'); %设置初值 v1=randn(1,10000); % 随机噪声xn=s + 0.12火v1'; %含噪信号y=zeros(1,N); %输出信号 y y(1:k)=xn(1:k); %将输入信号xn的前k个值作为输出y的前k个值 w=zeros(1,k); %设置抽头加权初值 %用LMS算法迭代滤波 e=zeros(1,N); % 误差信号 for i=(k+1):N XN=xn((i-k+1):(i)); y(i)=w*XN; e(i)=s(i)-y(i); w=w+2火u*e(i)*XN'; end pp(q,:) = (e(k+1:N)).八2; end subplot(312);plot(t,xn); title('信号加噪声后的时域波形'); subplot(313);plot(t,y); title('自适应滤波后的输出时域波形,);xlabel('LMS自适应滤波,); for b=1:N-k bi(b)=sum(pp(:,b))/g; %求误差的统计平均end figure(2); %算法收敛曲线 t=1:N-k; plot(t,bi, 'r' );title('均方误差曲线'); hold on %将每次循环的图形显示结果保存下来 xlabel('LMS自适应滤波');2、RLS算法自适应滤波后的输出肘域泌形1000 2000 3000 4D00 5000 6000 7000 8000 9000 10000信号加噪声后的时域波形4.543.532.521.510.50x 10-3均方误差曲线0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000%RLS算法的MATLAB实现%用MATLAB实现RLS算法,将输入和输出信号进行对比,并给出均方误差的曲线 s=wavread('C:\Users\Administrator\Desktop \ 语音 \RLS\语 音 2.wav'); s=s(1:10000); %截取一段语音信号len=length(s);n=len;v1=randn(1,n); % 随机噪声v2 = 0.9火v1 + 0.1火randn(1,n); % 参考噪声e=s + 0.12*v1'; %含噪语音信号v2=0.12*v2';[W,E]=rls(e,v2,43,0.96); %W为滤波器系数,E为对噪声的估计y=e-E; %y为噪声抵消后得到的语音信号q=zeros(n); for i=1:nq(i)=q(i) + (abs(s(i)-y(i)).八2);p(i)=q(i)/i;endfigure(1)subplot(311);plot(s);title('原始语音信号时域波形'); subplot(312);plot(e);title('信号加噪声后的时域波形'); subplot(313);plot(y);title('自适应滤波后的输出时域波形'); xlabel( 'RLS自适应滤波');figure(2)plot(p);title('均方误差曲线');xlabel( 'RLS 自适应滤波');%RLS算法的主程序%两个输出,其中W为滤波器系数,E为估计出来的信号。
四个输入,其中x是含噪信号,d是参考信号,nord是滤波器阶数,lambda是滤波器阶数 function [W,E]=rls(x,d,nord,lambda) delta=0.001;X=convm(x,nord);[M,N] = size(X);if nargin < 4lambda = 1.0;endP=eye(N)/delta;W(1,:)=zeros(1,N);for k=2:M-nord+1;z=P*X(k,:)';g=z/(lambda+X(k,:)*z);alpha=d(k)-X(k,:)*W(k-1,:),;W(k,:)=W(k-1,:)+alpha*g.';P=(P-g*z.')/lambda;endfor k=1:M-nord+1;E(k,:)=W(k,:)*X(k,:)';end%convm程序用来生成一个卷积矩阵来供RLS程序使用 function X=convm(x,p) N = length(x)+2火p-2;x = x(:);xpad = [zeros(p-1,1);x;zeros(pT,1)];for i=1:pX(:,i)=xpad(p-i+1:N-i+1);end实验结果分析:上述两种算法实验解结果是,在相同的信号和噪声条件下进行的,RLS算法 的效果好,而LMS中信号被噪声淹没,效果不明。












