一、研究背景
维纳滤波器参数是固定的,适合于平稳随机信号。卡尔曼滤波器参数是时变的,适合于非平稳随机信号。然而,只有在信号和噪声的统计特性先验已知的情况下,这两种滤波术才能获得最优滤波。在实际应用中,常常无法得到信号和噪声统计特性的先验知识。在这种情况下,自适应滤波技术能够获得极佳的滤波性能,因而具有很好的应用价值。常用的自适应滤波技术有:最小均方(LMS)自适应滤波器、递推最小二乘(RLS)滤波器、格型滤波器和无限冲激响应(IIR)滤波器等。这些自适应滤波技术的应用又包括:自适应噪声抵消、自适应谱线增强和陷波等。
二、LMS自适应维纳滤波器理论知识
三、利用上述结论的Matlab仿真
首先用Matlab自带函数读取一段音频并保存,随即对其加上高斯白噪声干扰,对处理后的信号LMS算法滤波。并产生相应的音频文件并保存,我们可以从试听音频和观察图像两种方式查看LMS滤波的效果。
M脚本代码
1 %-- 14-10-25 下午3:36 --% 2 %功能:LMS自适应噪声抵消 3 % Inputs: 4 % Outputs: 5 clc; 6 clear; 7 [ref,fs] =wavread(‘in.wav‘); 8 apm = 1; %噪声幅度 9 firLen = 160; %定义滤波器长度 10 mu = 0.002; %迭代步长 11 a = zeros(1,firLen); %产生一行160列向量 12 dataLen = length(ref); %赋值ref信号向量 13 eout = zeros(1,dataLen); %产生一列dataLen长的向量且赋值 14 e=zeros(1,dataLen); 15 firIn = zeros(1,firLen); 16 firOut=zeros(1,dataLen); 17 noise = apm*rand(1,dataLen); %产生随机噪声 18 near = ref‘+noise; %在原始音频基础上加入噪声 19 for i=firLen:dataLen 20 firOut(i) = a*(near(i-firLen+1:i))‘; %fir滤波,实现横向滤波器操作 21 e(i) = ref(i)-firOut(i); %求误差信号 22 a = a+2*mu*e(i)*(near(i-firLen+1:i)); %lms 系数更新 23 eout(i) = e(i)*e(i); 24 end 25 wavwrite(firOut,fs,‘firOut.wav‘); 26 wavwrite(eout,fs,‘eout.wav‘); 27 wavwrite(near,fs,‘speech_noise.wav‘); 28 wavplay(firOut,fs); 29 figure(1) 30 subplot(411); 31 plot(ref); 32 title(‘原始信号‘); 33 subplot(412); 34 plot(near); 35 title(‘语音加噪信号‘); 36 subplot(413); 37 plot(noise); 38 title(‘噪声信号‘); 39 subplot(414); 40 plot(firOut); 41 title(‘自适应消噪信号‘);
wave.m
运行效果图
四、源文件下载
LMS filter1.0.rar
115网盘礼包码:5lbagoebt972
http://115.com/lb/5lbagoebt972
时间: 2024-07-28 17:59:49