一、研究背景
維納濾波器參數是固定的,適合於平穩隨機信號。卡爾曼濾波器參數是時變的,適合於非平穩隨機信號。然而,只有在信號和噪聲的統計特性先驗已知的情況下,這兩種濾波術才能獲得最優濾波。在實際應用中,常常無法得到信號和噪聲統計特性的先驗知識。在這種情況下,自適應濾波技術能夠獲得極佳的濾波性能,因而具有很好的應用價值。常用的自適應濾波技術有:最小均方(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('自適應消噪信號');
運行效果圖
四、源文件下載
LMS filter1.0.rar
115網盤禮包碼:5lbagoebt972
http://115.com/lb/5lbagoebt972