導航:首頁 > 源碼編譯 > lms演算法matlab程序

lms演算法matlab程序

發布時間:2023-04-28 22:39:52

1. 基於RLS演算法和LMS的自適應濾波器的MATLAB程序

基於RLS演算法和LMS的備春自適應濾波器的MATLAB程序是什麼?

% RLS演算法
randn('seed', 0) ;
rand('seed', 0) ;
NoOfData = 8000 ; % Set no of data points used for training
Order = 32 ; % 自適應濾波權數
Lambda = 0.98 ; % 遺忘因子
Delta = 0.001 ; % 相關矩陣R的初始化
x = randn(NoOfData, 1) ;%高斯隨機系列
h = rand(Order, 1) ; % 系統隨機抽樣
d = filter(h, 1, x) ; % 期望輸出
% RLS演算法的初始化
P = Delta * eye ( Order, Order ) ;%相關矩陣
w = zeros ( Order, 1 ) ;%濾波系數矢量的初始化
% RLS Adaptation
for n = Order : NoOfData ;
u = x(n:-1:n-Order+1) ;%延時函數
pi_ = u' * P ;%互相關戚爛函數
k = Lambda + pi_ * u ;
K = pi_'/k;%增益矢量
e(n) = d(n) - w' * u ;%誤差函數
w = w + K * e(n) ;%遞歸公式
PPrime = K * pi_ ;
P = ( P - PPrime ) / Lambda ;%誤差相關矩陣
w_err(n) = norm(h - w) ;%真實估計誤差
end ;
% 作圖表示結果
figure ;
plot(20*log10(abs(e))) ;%| e |的誤差曲線
title('學習曲線') ;
xlabel('迭代次數') ;
ylabel('輸出誤差估計') ;
figure ;
semilogy(w_err) ;%作實際估計誤差圖
title('矢量估計誤差') ;
xlabel('迭代次數') ;
ylabel('誤差權矢量') ;
%lms 演算法
clear all
close all
hold off%系統信道權數
sysorder = 5 ;%抽頭數
N=1000;%總采樣次數
inp = randn(N,1);%產生高斯隨機系列
n = randn(N,1);
[b,a] = butter(2,0.25);
Gz = tf(b,a,-1);%逆變高滾漏換函數
h= [0.0976;0.2873;0.3360;0.2210;0.0964;];%信道特性向量
y = lsim(Gz,inp);%加入雜訊
n = n * std(y)/(10*std(n));%雜訊信號
d = y + n;%期望輸出信號
totallength=size(d,1);%步長
N=60 ; %60節點作為訓練序列
%演算法的開始
w = zeros ( sysorder , 1 ) ;%初始化
for n = sysorder : N
u = inp(n:-1:n-sysorder+1) ;% u的矩陣
y(n)= w' * u;%系統輸出
e(n) = d(n) - y(n) ;%誤差
if n < 20
mu=0.32;
else
mu=0.15;
end
w = w + mu * u * e(n) ;%迭代方程
end
%檢驗結果
for n = N+1 : totallength
u = inp(n:-1:n-sysorder+1) ;
y(n) = w' * u ;
e(n) = d(n) - y(n) ;%誤差
end
hold on
plot(d)
plot(y,'r');
title('系統輸出') ;
xlabel('樣本')
ylabel('實際輸出')
figure
semilogy((abs(e))) ;% e的絕對值坐標
title('誤差曲線') ;
xlabel('樣本')
ylabel('誤差矢量')
figure%作圖
plot(h, 'k+')
hold on
plot(w, 'r*')
legend('實際權矢量','估計權矢量')
title('比較實際和估計權矢量') ;
axis([0 6 0.05 0.35])

急求:基於RLS演算法和LMS演算法的正弦信號的自適應濾波器的MATLAB的模擬程序.

數字濾波器在數字信號處理中的應用廣泛,是數字信號處理的重要基礎。自適應濾波器可以不必事先給定信號及雜訊的自相關函數,它可以利用前一時刻已獲得的濾波器參數自動地調節現時刻的濾波器參數使得濾波器輸出和未知的輸入之間的均方誤差最小化,從而它可以實現最優濾波。
自適應濾波器的演算法有很多,有RLS(遞歸最小二乘法)和LMS(最小均方演算法)等。自適應LMS演算法是一種很有用且很簡單的估計梯度的方法,在信號處理中得到廣泛應用。
本論文主要研究了自適應濾波器的基本結構和原理,然後介紹了最小均方誤差演算法(LMS演算法),並完成了一種基於MATLAB平台的自適應LMS自適應濾波器的設計,同時實現了對信號進行初步的降噪處理。
通過模擬,我們實現了LMS自適應濾波演算法,並從結果得知步長和濾波器的階數是濾波器中很重要的兩個參數,並通過修改它們證實了這一點,其中步長影響著收斂時間,而且階數的大小也會大大地影響自適應濾波器的性能。

求基於LMS自適應濾波器的詳細資料

自適應濾波器實際上是一種能夠自動調整本身參數的特殊維納濾波器,在設計時不需要預先知道關於輸入信號和雜訊的統計特性,它能夠在工作過程中逐步「了解」 或估計出所需的統計特性,並以此為依據自動調整自身的參數,以達到最佳濾波效果。一旦輸入信號的統計特性發生變化,它又能夠跟蹤這種變化,自動調整參數,使濾波器性能重新達到最佳。 自適應濾波器由參數可調的數字濾波器(或稱為自適應處理器)和自適應演算法兩部分組成,如圖7-3所示。參數可調數字濾波器可以是FIR數字濾波器或IIR數字濾波器,也可以是格型數字濾波器。輸入信號x(n)通過參數可調數字濾波器後產生輸出信號(或響應)y(n),將其與參考信號(或稱期望響應)d(n)進行比較,形成誤差信號e(n),並以此通過某種自適應演算法對濾波器參數進行調整,最終使e(n)的均方值最小。盡管自適應濾波器具有各種不同的演算法和結構,但是,其最本質特徵是始終不變的。這種最本質的特徵可以概括為:自適應濾波器依據用戶可以接受的准則或性能規范,在未知的而且可能是時變的環境中正常運行,而無須人為的干預。本章主要討論的是基於維納濾波器理論的最小均方(LMS)演算法,可以看到LMS演算法的主要優點是演算法簡單、運算量小、易於實現;其主要缺點是收斂速度較慢,而且與輸入信號的統計特性有關。 自適應線性濾波器是一種參數可自適應調整的有限沖激響應(FIR)數字濾波器,具有非遞歸結構形式。因為它的分析和實現比較簡單,所以在大多數自適應信號處理系統中得到了廣泛應用。如圖7-4所示的是自適應線性濾波器的一般形式。輸入信號矢量x(n)的L+1個元素,既可以通過在同一時刻對L+1個不同信號源取樣得到,也可以通過對同一信號源在n以前L+1個時刻取樣得到。前者稱為多輸入情況,如圖7-5所示,後者稱為單輸入情況如圖7-4所示,這兩種情況下輸入信號矢量都用x(n)表示,但應注意它們有如下區別。 單輸入情況: (7-18) 多輸入情況: (7-19) 單輸入情況下x(n)是一個時間序列,其元素由一個信號在不同時刻的取樣值構成;而多輸入情況下x(n)是一個空間序列,其元素由同一時刻的一組取樣值構成,相當於並行輸入。 對於一組固定的權系數來說,線性濾波器是輸出y(n)等於輸入矢量x(n)的各元素的線性加權之和。然而實際上權系數是可調的,調整權系數的過程叫做自適應過程。在自適應過程中,各個權系數不僅是誤差信號e(n)的函數,而且還可能是輸入信號的函數,因此,自適應線性濾波器的輸出就不再是輸入信號的線性函數。 輸入信號和輸出信號之間的關系為 單輸入情況: (7-20) 多輸入情況: (7-21) 如圖7-4所示的單輸入自適應線性濾波器,實際上是一個時變橫向數字濾波器,有時稱為自適應橫向濾波器。它在信號處理中應用很廣泛。自適應線性濾波器的L+1個權系數構成一個權系數矢量,稱為權矢量,用w(n)表示,即 (7-22) 這樣,輸出響應表示為 (7-23) 參考響應與輸出響應之差稱為誤差信號,用e(n)表示,即 (7-24) 自適應線性濾波器按照誤差信號均方值(或平均功率)最小的准則,即 (7-25) 來自動調整權矢量。

急求,matlab自適應濾波器的程序

clear all
close all
%channel system order
sysorder = 5 ;
% Number of system points
N=2000;
inp = randn(N,1);
n = randn(N,1);
[b,a] = butter(2,0.25);
Gz = tf(b,a,-1);
%This function is submitted to make inverse Z-transform (Matlab central file exchange)
%The first sysorder weight value
%h=ldiv(b,a,sysorder)'
% if you use ldiv this will give h :filter weights to be
h= [0.0976;
0.2873;
0.3360;
0.2210;
0.0964;];
y = lsim(Gz,inp);
%add some noise
n = n * std(y)/(10*std(n));
d = y + n;
totallength=size(d,1);
%Take 60 points for training
N=60 ;
%begin of algorithm
w = zeros ( sysorder , 1 ) ;
for n = sysorder : N
u = inp(n:-1:n-sysorder+1) ;
y(n)= w' * u;
e(n) = d(n) - y(n) ;
% Start with big mu for speeding the convergence then slow down to reach the correct weights
if n < 20
mu=0.32;
else
mu=0.15;
end
w = w + mu * u * e(n) ;
end
%check of results
for n = N+1 : totallength
u = inp(n:-1:n-sysorder+1) ;
y(n) = w' * u ;
e(n) = d(n) - y(n) ;
end
hold on
plot(d)
plot(y,'r');
title('System output') ;
xlabel('Samples')
ylabel('True and estimated output')
figure
semilogy((abs(e))) ;
title('Error curve') ;
xlabel('Samples')
ylabel('Error value')
figure
plot(h, 'k+')
hold on
plot(w, 'r*')
legend('Actual weights','Estimated weights')
title('Comparison of the actual weights and the estimated weights') ;
axis([0 6 0.05 0.35])
% RLS 演算法
randn('seed', 0) ;
rand('seed', 0) ;
NoOfData = 8000 ; % Set no of data points used for training
Order = 32 ; % Set the adaptive filter order
Lambda = 0.98 ; % Set the fetting factor
Delta = 0.001 ; % R initialized to Delta*I
x = randn(NoOfData, 1) ;% Input assumed to be white
h = rand(Order, 1) ; % System picked randomly
d = filter(h, 1, x) ; % Generate output (desired signal)
% Initialize RLS
P = Delta * eye ( Order, Order ) ;
w = zeros ( Order, 1 ) ;
% RLS Adaptation
for n = Order : NoOfData ;
u = x(n:-1:n-Order+1) ;
pi_ = u' * P ;
k = Lambda + pi_ * u ;
K = pi_'/k;
e(n) = d(n) - w' * u ;
w = w + K * e(n) ;
PPrime = K * pi_ ;
P = ( P - PPrime ) / Lambda ;
w_err(n) = norm(h - w) ;
end ;
% Plot results
figure ;
plot(20*log10(abs(e))) ;
title('Learning Curve') ;
xlabel('Iteration Number') ;
ylabel('Output Estimation Error in dB') ;
figure ;
semilogy(w_err) ;
title('Weight Estimation Error') ;
xlabel('Iteration Number') ;
ylabel('Weight Error in dB') ;

急求基於遺傳演算法的自適應濾波器matlab模擬程序代碼?謝謝

處理的重要基礎。自適應濾波器可以不必事先給定信號及雜訊的自相關函數,它可以利用前一時刻已獲得的濾波器參數自動地調節現時刻的濾波器參數使得濾波器輸出和未知的輸入之間的均方誤差最小化,從而它可以實現最優濾波。
自適應濾波器的演算法有很多,有RLS(遞歸最小二乘法)和LMS(最小均方演算法)等。自適應LMS演算法是一種很有用且很簡單的估計梯度的方法,在信號處理中得到廣泛應用。
本論文主要研究了自適應濾波器的基本結構和原理,然後介紹了最小均方誤差演算法(LMS演算法),並完成了一種基於MATLAB平台的自適應LMS自適應濾波器的設計,同時實現了對信號進行初步的降噪處理。
通過模擬,我們實現了LMS自適應濾波演算法,並從結果得知步長和濾波器的階數是濾波器中很重要的兩個參數,並通過修改它們證實了這一點,其中步長影響著收斂時間,而且階數的大小也會大大地影響自適應濾波器的性能。

變步長LMS自適應濾波演算法的MATLAB程序, 用Matlab軟體實現變長NLMS自適應濾波器演算法

clear all
close all
N=10; %濾波器階數
sample_N=500; %采樣點數
A=1; %信號幅度
snr=10; %信噪比
t=1:sample_N;
length_t=100; %期望信號序列長度
d=A*sin(2*pi*t/length_t); %期望信號
M=length(d); %M為接收數據長度
x=awgn(d,snr); %經過信道(加雜訊)
delta=1/(10*N*(A^2)); %計算能夠使LMS演算法收斂的delta
y=zeros(1,M);
h=zeros(1,N); %LMS濾波器系數
h_normalized=zeros(1,N); %歸一化LMS濾波器系數
y1=zeros(1,N);
for n=N:M %系數調整LMS演算法
x1=x(n:-1:n-N+1);
%LMS演算法
y(n)=h*x1'
e(n)=d(n)-y(n);
h=h+delta*e(n)*x1;
%NLMS演算法
y_normalized(n)=h_normalized*x1'
e_normalized(n)=d(n)-y_normalized(n);
h_normalized=h_normalized+e_normalized(n)*x1/(x1*x1');
end
error=e.^2; %LMS演算法每一步迭代的均方誤差
error_normalized=e_normalized.^2; %NLMS演算法每一步迭代的均方誤差
for n=N:M %利用求解得到的h,與輸入信號x做卷積,得到濾波後結果
x2=x(n:-1:n-N+1);
y1(n)=h*x2'
y2(n)=h_normalized*x2'
end
subplot(411)
plot(t,d);
axis([1,sample_N,-2,2]);
subplot(412)
plot(t,x);
subplot(413)
plot(t,y);
subplot(414)
plot(t,y_normalized);
figure(2)
plot(t,error,'r',t,error_normalized,'b');

自適應濾波器的演算法如何用MATLAB去編

幫你在網路文庫里找到這個演算法,自適應雜訊抵消LMS演算法Matlab模擬,希望對你有幫助。如有問題,可以再討論解決。

求基於RLS演算法和LMS的自適應均衡系統的MATLAB程序``

裡面有些代碼有問題,可以參考,代碼還是自己寫:!
%基於RLS演算法的自適應線性預測
clc;
clear all;
N=300;
M=100;%計算的次數
w1=zeros(N,M);w2=zeros(N,M);I=eye(2);e1=zeros(N,M);
for k=1:M
%產生白雜訊
Pv=0.008;%定義白雜訊方差
a1=-0.195;a2=0.95;o=0.02;r=0.95;
m=5000;%產生5000個隨機數
v=randn(1,m);
v=v*sqrt(Pv);%產生均值為0,方差為Pv的白雜訊
%m=1:N;
v=v(1:N);%取出前1000個
%plot(m,v);title('均值為0,方差為0.0965的白雜訊');ylabel('v(n)');xlabel('n');
v=v'
%向量初使化
x=zeros(1,N);
x(1)=v(1);%x(0)=v(0)
x(2)=v(2)-a1*v(1);%x(1)=v(1)-a1*v(0)
w=zeros(2,N);
w(:,1)=[0 0]'%w(0)=[0 0]'
X=zeros(2,N);
X(:,2)=[v(1) 0]'%X(0)=[0 0]'X(1)=[v(0) 0]'
C=zeros(2,2*N);
C(:,1:2)=1/o.*I;%C(0)=1/o*I
e=zeros(1,N)'%定義誤差向量
u=zeros(1,N);
g=zeros(2,N);
%根據RLS演算法進行遞推
for n=1:N-2
x(n+2)=v(n+2)-a1*x(n+1)-a2*x(n);
X(:,n+2)=[x(n+1) x(n)]'
u(n)=X(:,n+1)'*C(:,2*n-1:2*n)*X(:,n+1);
g(:,n)=(C(:,2*n-1:2*n)*X(:,n+1))./(r+u(n));
w(:,n+1)=w(:,n)+g(:,n)*(x(n+1)-X(:,n+1)'*w(:,n));
C(:,2*n+1:2*(n+1))=1/r.*(C(:,2*n-1:2*n)-g(:,n)*X(:,n+1)'*C(:,2*n-1:2*n));
e(n)=x(n+1)-X(:,n+1)'*w(:,n);

w1(:,k)=w(1,:)' w2(:,k)=w(2,:)'%將每次計算得到的權矢量值儲存
e1(:,k)=e(:,1);%將每次計算得到的誤差儲存
end

end
%求權矢量和誤差的M次的平均值
wa1=zeros(N,1);wa2=zeros(N,1);en=zeros(N,1);
for k=1:M
wa1(:,1)=wa1(:,1)+w1(:,k);
wa2(:,1)=wa2(:,1)+w2(:,k);
en(:,1)=en(:,1)+e1(:,k);
end
n=1:N;
subplot(221)
plot(n,w(1,n),n,w(2,n));%作出單次計算權矢量的變化曲線
xlabel('n');ylabel('w(n)');title('w1(n)和w2(n)的單次變化曲線(線性預測,RLS)')
subplot(222)
plot(n,wa1(n,1)./M,n,wa2(n,1)./M);%作出100次計算權矢量的平均變化曲線
xlabel('n');ylabel('w(n)');title('w1(n)和w2(n)的100次平均變化曲線')
subplot(223)
plot(n,e(n,1).^2);%作出單次計算e^2的變化曲線
xlabel('n');ylabel('e^2');title('單次計算e^2的變化曲線');
subplot(224)
plot(n,(en(n,1)/M).^2);%作出M次計算e^2的平均變化曲線
xlabel('n');ylabel('e^2');title(颼次計算e^2的平均變化曲線');

2. MATLAB實現LMS學習演算法

clc;
clear all;
load msesample;
n1=length(x1);
n2=length(x2);
x=[x1;x2];
e=ones(length(x),1);
y=[e x];
b=e;
%b=rand(length(x),1);
yita=1;
eps=0.01;
yy=inv(y'*y)*y';
result=yy*b;
for i=n2:length(x)
y(i,:)=y(i,:).*(-1);
end
a=[1;2;1];
an=zeros(3,100);
an(:,1)=a;
flat=zeros(length(x),1);
n=1;
while(n<=100)
for i=1:length(x)
if y(i,:)*an(:,n)<=b(i)
an(:,(n+1))=an(:,n)+y(i,:)'*(b(i)-y(i,:)*an(:,n))*yita/n;
end
end
if abs(an(:,(n+1))-an(:,n))<=eps
break;
else
n=n+1;
end
end
n
w=an(:,n)
ne=0;
for i=1:length(x)
if y(i,:)*w<b(i)
ne=ne+1;
end
end
ne
pe=ne/length(x)
subplot(1,2,1)
plot(x1(:,1),x1(:,2),'bo',x2(:,1),x2(:,2),'ro');
hold on
syms xa xb;
g=w(1)+w(2)*xa+w(3)*xb;
ezplot(g);
title('最小均方誤差判決')
legend('第一類樣本','第二類樣本')
gtext(strcat('錯誤率為:',num2str(pe)),'Fontsize',8)
subplot(1,2,2)
hold on
i=1:n;
plot(i,an(:,i));
title('權向量')
xlabel('迭代次數')
ylabel('權向量取值')

3. 變步長LMS自適應濾波演算法的MATLAB程序

clear all
close all
N=10; %濾波器階數
sample_N=500; %采樣點數

A=1; %信號幅度
snr=10; %信噪比
t=1:sample_N;
length_t=100; %期望信號序列長度
d=A*sin(2*pi*t/length_t); %期望信號
M=length(d); %M為接收數據長度
x=awgn(d,snr); %經過信道(加雜訊)

delta=1/(10*N*(A^2)); %計算能夠使LMS演算法收斂的delta

y=zeros(1,M);
h=zeros(1,N); %LMS濾波器系數
h_normalized=zeros(1,N); %歸一化LMS濾波器系數
y1=zeros(1,N);
for n=N:M %系數調整LMS演算法
x1=x(n:-1:n-N+1);
%LMS演算法
y(n)=h*x1';
e(n)=d(n)-y(n);
h=h+delta*e(n)*x1;
%NLMS演算法
y_normalized(n)=h_normalized*x1';
e_normalized(n)=d(n)-y_normalized(n);
h_normalized=h_normalized+e_normalized(n)*x1/(x1*x1');
end
error=e.^2; %LMS演算法每一步迭代的均方誤差
error_normalized=e_normalized.^2; %NLMS演算法每一步迭代的均方誤差
for n=N:M %利用求解得到的h,與輸入信號x做卷積,得到濾波後結果
x2=x(n:-1:n-N+1);
y1(n)=h*x2';
y2(n)=h_normalized*x2';
end
subplot(411)
plot(t,d);
axis([1,sample_N,-2,2]);
subplot(412)
plot(t,x);
subplot(413)
plot(t,y);
subplot(414)
plot(t,y_normalized);
figure(2)
plot(t,error,'r',t,error_normalized,'b');

4. 用Matlab軟體實現變長NLMS自適應濾波器演算法

一種具有雙瞬變因子的LMS自適應濾波演算法

曾召華 劉貴忠 馬社祥

(西安交通大學信息與通信工程研究所 西安710049)

作者在文獻〔4〕中提出了一種改進的瞬變步長SPLMS自適應濾波演算法。本文在SPLMS演算法的基礎上,進一步提出一種基於瞬變步長、瞬變平滑因子的雙瞬變SPLMS演算法—DSPLMS演算法。該演算法除具有常規LMS演算法簡單的優點外,還具有更高的起始收斂速率、更小的權失調雜訊和更大的抑噪能力。文中重點討論瞬變步長、瞬變平滑因子的變化特性。計算機模擬結果支持了理論分析。
自適應濾波器,失調雜訊,收斂速度,最小均方誤差,瞬變因子
1 引言
自適應濾波器及其相應演算法是多年來人們廣泛研究的課題。基於Widrow-Hoff標準的LMS演算法和其相應的自適應濾波器以其演算法和結構簡單,便於實時信號處理等優點,在不同領域得到了最為廣泛的應用。而為克服常規的固定步長LMS或牛頓LMS(Newton LMS,即NLMS)自適應演算法在收斂速率、跟蹤速率與權失調雜訊之間要求上存在的較大矛盾,人們發展了各種各樣的改進型LMS演算法,如基於瞬變步長LMS自適應濾波演算法〔1~6〕、基於正交變換(DCT、FFT、小波變換、子帶濾波)的新型LMS均衡演算法〔7~8〕。基於模糊判斷的自適應LMS系統識別和基於最小四次均方誤差的LMS自適應平穩收斂演算法〔9~10〕。在所有改進型LMS演算法中,瞬變步長LMS自適應濾波演算法是研究最為廣泛的一類LMS自適應濾波演算法。本文演算法也是基於瞬變因子的一種改進LMS自適應濾波演算法。
2 SPLMS演算法分析及問題的提出
在文獻〔4〕中,作者對上述方案進行了大量的計算機模擬和理論分析,結果表明:(1)上述諸種演算法的收斂速率與系統輸入信噪比SNR直接相關,信噪比SNR越高,它們的收斂速率普遍提高;隨著信噪比SNR的降低,它們的收斂速率減慢,甚至出現發散現象,因此它們必須在弱干擾下完成規一化起動,即在起始過程中雜訊要相當小,否則效果不佳。(2)在上述所有演算法中,由於採用瞬時平方誤差性能函數e2k來代替均方誤差性能函數,所以其演算法的權值收斂過程表現為加權矢量的平均值變化規律和由於雜訊引起的隨機起伏項的疊加。因此,雜訊方差越大,則隨機起伏項越大,表現為權值振動也就越大。(3)為了追求更快的收斂性,往往增大μ和M,但濾波器階數越高,步長因子μ和輸入功率越大,就便得失調系數也越大。在有限次數起動迭代過程中,也就很難收斂到較穩態值,所以必須尋求更佳的瞬態步長演算法。
文獻〔4〕在准最小均方(Pseudo-LMS,即PLMS)誤差演算法基礎上通過採用滑動時間窗,減少PLMS演算法起動過程的計算量;同時在權值迭代中加一平滑迭代而使PLMS演算法具備全局較強的抗噪性能,較快速收斂性能而提出了SPLMS演算法,即:

其中rk為M階濾波器輸入信號的功率估值;Wk為濾波器的第k步M維最優權矢量估值;Xk是濾波器輸入信號的M維輸入數據矢量;dk為希望輸出;μk為濾波器第k步瞬態步長。切換條件中,閾值μ類似於LMS演算法的步長因子μL,滿足:

μL<μ<1/trR,R=E〔XkXTk〕(7)

為待定的演算法常數,是μk變化的動態平衡點。而α是一常數為平滑因子,它決定上一次的權值變化對本次權值更新的影響程度。k0是採用式(2)規一化啟動後,演算法收斂到較穩態時的步數。式(4)是μk下降的遞推演算法,式(5)是μk上升的平滑遞推演算法。λ為上升的速度因子,滿足0<λ<1。在實際應用中,考慮到學習過程的啟動速度,一般取較大的λ值,即:

0.9<λ<1,k0=25~35,|α|<0.3(8)

SPLMS演算法的實質是:在開始k0步中,採用啟動速度較快的MLMS(Mend LMS)演算法收斂到相對較穩態的狀態;然後在k≥k0+1過程中,採用瞬態步長μk來訓練演算法。而μk根據不同的切換條件將圍繞μ作升降變化,其迭代計算主要表現為不降即升的動態過程。α主要根據經驗來取值,輸入數據的非平穩性越大,雜訊方差越大時,增大α可明顯抑制振動,從而加速收斂過程;在雜訊小時減小α。
但SPLMS演算法也有一明顯不足,即α主要根據經驗來取值,沒有理論上的確切依據。α取值不當,反而容易造成演算法收斂性能更差,甚至發散的現象。從理論上分析,α與瞬態步長μk和輸出誤差ek(文中定義為:ek=dk-WTk Xk)應有一定關系。在演算法啟動階段,ek較大,為追求啟動速度而常取較大步長μk,但μk越大,權失調系數也就越大,有時反而起不到應有的作用,這時就應相應增加α值來平滑權失調雜訊;在演算法漸趨穩定,步長μk漸趨於常數,ek漸趨於0,此時α也應漸趨於0。綜合起來就是:α應隨步長μk和誤差ek瞬時變化而變化,也應是一瞬變因子。本文重點就是尋求瞬變因子αk的數學表達式以滿足上述分析的要求。
3 改進的雙瞬變因子SPLMS演算法——DSPLMS演算法
3.1 μk的變化特性
從式(4)和式(5)可以看出,在k≥k0+1過程中,μk根據不同的切換條件將圍繞μ作升降變化,μk的迭 代計算主要表現為不降即升的動態過程。對於式(5),設k≥kr時,μk<μ,則在k≥kr>k0+1的上升過程中:

即上升速度按指數衰減,使趨於平衡點μ的上升速度迅速減小。其變化過程類似於一電阻電容串聯電路上電容的充電過程。對式(4),由於μk=μk-1/(1+Rk),Rk>0,即使很小的Rk經過一步迭代就足以使μk<μ,再次切換到上升過程。當rk較大時,下降形成的負脈沖也較大。
綜上所述,在k≥k0+1的收斂過程中,μk的時變特性等價於幅值極不對稱的隨機正負尖脈沖序列組成的瞬態分量和直流分量μ的線性疊加。瞬態分量的負脈沖強度與rk瞬值對應,有利於抑制局部自激或短暫發散,減小權矢量雜訊,提高穩定度。在rk較小、演算法漸趨於穩定時,瞬變分量趨於0,μk~μ。
3.2 αk的變化特性
定義:ΔWk=Wk+1-Wk為自適應濾波器的權系數增量;ξ為均方誤差性能函數,ξ=E〔ek〕2,ek=dk-WTk Xk為輸出誤差,則SPLMS演算法的權系數更新公式由式(1)可重寫為:

Wk+1=Wk-μk^Wξk+αΔWk-1(10)

其中Wξ為ξ的梯度函數,^W為Wξ的第k步估計。由式(10)的系數更新公式,我們可寫出均方誤差性能函數的表達式:

式中上標T表示矢量的轉置。若用一矢量^Wζk+1去左乘式(10),則可得到:
^Wξk+1Wk+1=^Wζk+1Wk-μk^Wζk+1^Wζk+^Wζk+1αΔWk-1(13)

利用式(12)的結論,可將式(13)化簡為:

^TWζk+1ΔWk=0(14)

由於參量μk和α均為實的標量因子,故式(14)又可寫成:

(μk^TWζk+1)(αΔWk)=0(15)

式(15)清楚地表明:在SPLMS演算法中,自適應濾波器的權系數在迭代過程中,其均方誤差性能函數的梯度估值與權系數增量始終存在一個正交關系。ΔWk-1對ΔWk的調節作用是在當前梯度估值方向上,給出與梯度估值方向正交矢量,並以這兩個矢量所構成的合矢量來改變權系數空間的權重。
對於FIR結構的LMS自適應系統而言,其均方誤差性能函數在平穩輸入時為一個二次型函數,在收斂點附近仍可視為一個二次型函數,故有:

ξ(Wk+1)=WTk RWk-2WTk P+C(16)

式中R=E〔XTk Xk〕為輸入信號的自相關矩陣,P=E〔dkXk〕為所需信號與輸入信號的互相關矢量,C=E〔d2k〕,則由式(16)可得:

將式(17)代入式(18),則式(18)可變形為:

式(19)就是本文給出的瞬變平滑因子αk的數學表達式。顯然,它滿足前面分析時所提出的要求,且在演算法達到穩態收斂時,滿足:

limk→∞αk=0(20)

3.3 改進的雙瞬變SPLMS演算法——DSPLMS演算法
用式(19)中αk的表達式替換式(1)中的α,就得到本文提出的具有雙瞬變因子的LMS演算法——DSPLMS演算法,即
Wk+1=Wk+2μk(dk-WTk Xk)Xk+αk(Wk-Wk-1)(21)

μk=λ/(1+2λrk),0≤k≤k0(22)

由式(19)、(20)可知,αk是一個與μk成正比且具有衰減性的瞬變因子,從而使本文提出的DSPLMS演算法比SPLMS演算法更能快速穩定收斂;與常規LMS演算法相比,其性能有極大的提高,為實時信號處理提供了一個較好的演算法。
4 計算機模擬
模擬實驗的結構如圖1所示,其中dk為隨機輸入信號,nk為高斯白雜訊,ek為輸出誤差,xk為自適應濾波器的輸入,yk為濾波器輸出,此時xk=dk+nk。

在圖2中,dk是均值為0、方差為1的高斯白雜訊;nk是與dk不相關的均值為0、方差為1的高斯白雜訊;濾波器參數:M=32,λ=0.9,μL=0.005,μ=0.01,α=0.1。在圖3中,nk為均值為0、方差為0.1的高斯白雜訊,其它參數同圖2。圖2、3為分別採用LMS、SPLMS和DSPLMS演算法進行濾波的學習曲線比較圖。

從圖2(強干擾啟動)和圖3(較弱干擾啟動)中可以看出:在強干擾下,DSPL MS 具有比SPLMS好、比LMS好得多的啟動速度和收斂速度;而在弱干擾下,DSPLMS仍具有比SPLMS快、比LMS快得多的啟動速度。從圖中同時還可看出:DSPLMS與SPLM S具有幾乎相同的收斂速度,它們的收斂速度比LMS快得多。
5 結語
加進瞬變平滑項的規一化起動,使DSPLMS具有更高的起始收斂速度、更小的權失調雜訊和更大的抑噪能力;在平穩連接之後的穩態過程中,該演算法趨於步長為μ的LMS演算法性能,但由於瞬變分量負脈沖的作用,在相近的權失調量下可按式(7)取較大的μ值,增強演算法對時變參數過程的跟蹤處理能力;輸入數據的非平穩性越大,雜訊方差越大時,加進的瞬變平滑項使權失調雜訊減小,從而使本文提出的DSPLMS演算法比SPLMS演算法更能快速穩定地收斂;與常規LMS演算法相比,其性能有極大的提高,可以明顯抑制振動,從而加速收斂過程。

網址:

5. 基於RLS演算法和LMS的自適應濾波器的MATLAB程序是什麼

% RLS演算法 x0dx0arandn('seed', 0) ; x0dx0arand('seed', 0) ; x0dx0aNoOfData = 8000 ; % Set no of data points used for training x0dx0aOrder = 32 ; % 自適應濾波權數 x0dx0aLambda = 0.98 ; % 遺忘因子 x0dx0aDelta = 0.001 ; % 相關矩陣R的初始化 x0dx0ax = randn(NoOfData, 1) ;%高斯隨機系列 x0dx0ah = rand(Order, 1) ; % 系統隨機抽樣 x0dx0ad = filter(h, 1, x) ; % 期望輸出 x0dx0a% RLS演算法的初始化 x0dx0aP = Delta * eye ( Order, Order ) ;%相關矩陣 x0dx0aw = zeros ( Order, 1 ) ;%濾森卜波系數芹前矢量的初始化 x0dx0a% RLS Adaptation x0dx0afor n = Order : NoOfData ; x0dx0au = x(n:-1:n-Order+1) ;%延時函數 x0dx0api_ = u' * P ;%互相關函數 x0dx0ak = Lambda + pi_ * u ; x0dx0aK = pi_'/k;%增益矢量 x0dx0ae(n) = d(n) - w' * u ;%誤差函數 x0dx0aw = w + K * e(n) ;%遞歸公式 x0dx0aPPrime = K * pi_ ; x0dx0aP = ( P - PPrime ) / Lambda ;%誤差相關矩陣 x0dx0aw_err(n) = norm(h - w) ;%真實估計誤差 x0dx0aend ; x0dx0a% 作圖表示結果 x0dx0afigure ; x0dx0aplot(20*log10(abs(e))) ;%| e |的誤差曲線 x0dx0atitle('學習曲線') ; x0dx0axlabel('迭代次數') ; x0dx0aylabel('輸出誤差估計') ; x0dx0afigure ; x0dx0asemilogy(w_err) ;%作實際此首穗估計誤差圖 x0dx0atitle('矢量估計誤差') ; x0dx0axlabel('迭代次數') ; x0dx0aylabel('誤差權矢量') ; x0dx0ax0dx0a%lms 演算法 x0dx0aclear all x0dx0aclose all x0dx0ahold off%系統信道權數 x0dx0asysorder = 5 ;%抽頭數 x0dx0aN=1000;%總采樣次數 x0dx0ainp = randn(N,1);%產生高斯隨機系列 x0dx0an = randn(N,1); x0dx0a[b,a] = butter(2,0.25); x0dx0aGz = tf(b,a,-1);%逆變換函數 x0dx0ah= [0.0976;0.2873;0.3360;0.2210;0.0964;];%信道特性向量 x0dx0ay = lsim(Gz,inp);%加入雜訊 x0dx0an = n * std(y)/(10*std(n));%雜訊信號 x0dx0ad = y + n;%期望輸出信號 x0dx0atotallength=size(d,1);%步長 x0dx0aN=60 ; %60節點作為訓練序列 x0dx0a%演算法的開始 x0dx0aw = zeros ( sysorder , 1 ) ;%初始化 x0dx0afor n = sysorder : N x0dx0au = inp(n:-1:n-sysorder+1) ;% u的矩陣 x0dx0ay(n)= w' * u;%系統輸出 x0dx0ae(n) = d(n) - y(n) ;%誤差 x0dx0aif n < 20 x0dx0amu=0.32; x0dx0aelse x0dx0amu=0.15; x0dx0aend x0dx0aw = w + mu * u * e(n) ;%迭代方程 x0dx0aend x0dx0a%檢驗結果 x0dx0afor n = N+1 : totallength x0dx0au = inp(n:-1:n-sysorder+1) ; x0dx0ay(n) = w' * u ; x0dx0ae(n) = d(n) - y(n) ;%誤差 x0dx0aend x0dx0ahold on x0dx0aplot(d) x0dx0aplot(y,'r'); x0dx0atitle('系統輸出') ; x0dx0axlabel('樣本') x0dx0aylabel('實際輸出') x0dx0afigure x0dx0asemilogy((abs(e))) ;% e的絕對值坐標 x0dx0atitle('誤差曲線') ; x0dx0axlabel('樣本') x0dx0aylabel('誤差矢量') x0dx0afigure%作圖 x0dx0aplot(h, 'k+') x0dx0ahold on x0dx0aplot(w, 'r*') x0dx0alegend('實際權矢量','估計權矢量') x0dx0atitle('比較實際和估計權矢量') ; x0dx0aaxis([0 6 0.05 0.35])

6. 如何matlab編程模擬LMS演算法的自適應陷波器,並畫出幅頻曲線陷波的頻率值

N=400; %總采樣長度
t=0:N-1; %時間的變化范圍
s=sin(2*pi*t/20); %輸入信號
A=0.5; %干擾信號的幅值
fai=pi/3;%干擾信號的相移
n=A*cos(2*pi*t/10+fai);%干擾信號
x=s+n;%信號混合
subplot(2,2,1);%作第一子圖
plot(t,s);
subplot(2,2,2); %作第二子圖
plot(t,x);
x1=cos(2*pi*t/10);
x2=sin(2*pi*t/10);
%初始化
w1=0.1;
w2=0.1;
e=zeros(1,N);
y=0;
u=0.05;%迭代步長
for i=1:N
y=w1*x1(i)+w2*x2(i);
e(i)=x(i)-y;%誤差信號
w1=w1+u*e(i)*x1(i);%迭代方程
w2=w2+u*e(i)*x2(i);%迭代方程
end
subplot(2,2,3); %作第三子圖
plot(t,e);
subplot(2,2,4); %作第四子圖
plot(t,s-e);

7. 自適應濾波器LMS演算法對聲信號雜訊的濾除用MATLAB編程怎麼做啊

>> clear all;
g=100;
N=256;
k=16;
pp=zeros(g,N-k);
u=0.01;
for q=1:g,
t=1:N;
a=1;
s=a*sin(0.05*pi*t);
figure(1);
subplot(3,1,1)
plot(t,real(s));
title('信號s時域波形');
xlabel('n');
ylabel('s');
axis([0,N,-a-1,a+1]);
xn=awgn(s,5);
y=zeros(1,N);
y(1:k)=xn(1:k);
w=zeros(1,k);
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+u*e(i)*XN;
end
pp(q,:)=(e((k+1):N)).^2;
end
subplot(3,1,2)
plot(t,real(xn));
title('信號s加雜訊後的時域波形');
subplot(3,1,3)
plot(t,real(y));
title('自適應濾波後的輸出時時域波形');
for c=1:N-k;
bi(c)=sum(pp(:,c))/g;
end;
figure(2);
T=1:N-k;
plot(T,bi,'b');
hold on

閱讀全文

與lms演算法matlab程序相關的資料

熱點內容
華為筆記本電腦怎麼安裝抖音app 瀏覽:408
阿里雲國際版試用的伺服器怎麼搞 瀏覽:893
java正則表達式工具 瀏覽:158
oa伺服器怎麼設置ftp 瀏覽:8
安卓如何安裝obb 瀏覽:440
QQ聊天記錄journal文件夾 瀏覽:118
蘋果公司雲伺服器地址 瀏覽:85
加密記事本手機 瀏覽:437
汽車壓縮機變頻閥 瀏覽:95
域外伺服器是什麼意思 瀏覽:639
大眾點評伺服器怎麼老卡頓 瀏覽:556
javavector與list的區別 瀏覽:316
java初始化類數組 瀏覽:303
java字元串轉換成json對象 瀏覽:647
android非阻塞socket 瀏覽:358
編譯系統概念 瀏覽:452
天眼通app能做什麼 瀏覽:557
魅族手機怎麼加密圖庫 瀏覽:8
rpa編譯器 瀏覽:572
車載雲伺服器記錄 瀏覽:740