維納濾波LMS matlab
阿新 • • 發佈:2018-11-20
LMS演算法的前提是:參考輸入端進入的訊號與需要的訊號具有相關關係;同時與純淨的有用訊號相互獨立。
常用在干擾相消的情況下,比如心電圖訊號常常會混有50Hz的噪聲,需要慮除這個噪聲,我就可以在參考輸入的輸入一個50hz的訊號。即這個訊號與噪聲是相關的(頻率一致),故可以消除噪聲。而心電圖訊號是個寬頻寬的訊號,並不是集中在50hz。
% LMS演算法 現代數字訊號處理及其應用 4.4.4 close all clc % 期望訊號d(n) d = zeros(1,N); % 2抽頭維納濾波器,迭代次數為N W = zeros(2, N); % 2抽頭維納濾波器輸入訊號 u = zeros(1, N); % 2抽頭維納濾波器輸出訊號,即期望訊號的估計 y = zeros(1, N); % 2抽頭維納濾波器輸出誤差,即y(n) - d(n) e = zeros(1, N); J=zeros(1,N); % 步長 q = 0.025; N = 1000; % 噪音訊號 v1 = sqrt(0.27)*randn(1,N); v2 = sqrt(0.1)*randn(1,N); b1 = -0.8458; b2 = 0.9458; % H1:d(n) = b1 * d(n-1) + v1(n); % H2:x(n) = b2 * x(n-1) + d(n); % u(n) = x(n) + v2(n) % 初始化 d(1) = b1 * 0 + v1(1); x(1) = b2 * 0 + d(1); u(1) = x(1) + v2(1); % 二抽頭維納濾波輸入訊號u(n) for n = 1:N-1 d(n+1) = b1 * d(n) + v1(n+1); x(n+1) = b2 * x(n) + d(n+1); u(n+1) = x(n+1) + v2(n+1); end W(:, 1) = [0; 0]; % 期望訊號的估計,u(n)經過二抽頭維納濾波的輸出 y(1) = ((W(:, 1))') * ([u(1); 0]); % 輸入誤差 e(1) = d(1) - y(1); % 權向量的更新 w(n+1) = w(n) + q * ([u(n); u(n-1)]) * e(n); % 期望訊號的估計 y(n+1) = w(n+1)' * ([u(n + 1); u(n)]) % 估計誤差 e(n+1) = d(n+1) - y(n+1) W(:, 2) = W(:, 1) + q * ([u(1); 0]) * e(1); y(2) = ((W(:, 2))') * ([u(2); u(1)]); e(2) = d(2) -y(2); for n = 2:N-1 W(:, n+1) = W(:, n) + q * ([u(n); u(n-1)]) * e(n); y(n+1) = (W(:, n+1))' * ([u(n + 1); u(n)]); e(n+1) = d(n+1) - y(n+1); end figure n=1:N; plot(n,W(1, :),n,W(2, :))