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

rls演算法的matlab程序

發布時間:2022-09-13 20:50:24

⑴ 我現在在做RBF神經網路k-means演算法與RLS遞歸二乘法結合訓練,求哪位大神能給個RLS的演算法的MTALAB程序

直接用廣義RBF網路我感覺比較方便,而且可以直接用newgrnn(P,T,spread)函數。

RLS演算法的MATLAB程序在附件,你可以參考下。


最小二乘大約是1795年高斯在他那星體運動軌道預報工作中提出的[1]。後來,最小二乘法就成了估計理論的奠基石。由於最小二乘法結構簡單,編製程序也不困難,所以它頗受人們重視,應用相當廣泛。
如用標准符號,最小二乘估計可被表示為:
AX=B (2-43)
上式中的解是最小化 ,通過下式中的偽逆可求得:
A'AX=A'B (2-44)
(A'A)^(-1)A'AX=(A'A)^(-1)A'B (2-45)
由於
(A'A)^-1A'A=I (2-46)
所以有
X=(A'A)^(-1)A'B (2-47)
此即最小二乘的一次完成演算法,現代的遞推演算法,更適用於計算機的在線辨識。
最小二乘是一種最基本的辨識方法,但它具有兩方面的缺陷[1]:一是當模型雜訊是有色雜訊時,最小二乘估計不是無偏、一致估計;二是隨著數據的增長,將出現所謂的「數據飽和」現象。針對這兩個問題,出現了相應的辨識演算法,如遺忘因子法、限定記憶法、偏差補償法、增廣最小二乘、廣義最小二乘、輔助變數法、二步法及多級最小二乘法等。

⑵ 神經網路,大神檢查下matlab中RLS演算法過程,運行不過啊

能把x=[...];%訓練樣本
d=[...];%期望值
文件發過來,調試用嗎?

⑶ 急求,matlab在自適應均衡中RLS和LMS演算法的程序

%lms演算法源程序

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 forgetting 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') ;

可以看得出來,收斂速度RLS更快,對程序可以看得出來運算量也是RLS更大。
可以參照我回答的解決一個RLS具體問題的例子。在網路裡面可以搜到。

⑷ 基於matlab的跳頻擴頻通信的實現及性能的程序代碼

rho_b1=0:5:35;
rho_b2=0:0.1:35;
for i=1:length(rho_b1)
smlid_err_prb(i)=ssfh_Pe(rho_b1(i));
end;
for i=1:length(rho_b2)
temp=10^(rho_b2(i)/10);
if(temp>2)
theo_err_rate(i)=1/(exp(1)*temp);
else
theo_err_rate(i)=(1/2)*exp(-temp/2);
end;
end;
semilogy(rho_b1,smlid_err_prb,'k*',rho_b2,theo_err_rate,'k-);
在程序中調用了ssfh_Pe子函數,程序如下:

function[p]=ssfh_Pe(tho_in_dB)
rho=10^(rho_in_dB/10);
Eb=rho;
if(rho>2) alpa=2/rho;
else alpa=1;
end;
agma=sqrt(1/(2*alpha));
N=10000;
for i=1:N
temp=rand;
if(temp<0.5) data(i)=1;
else data(i)=0;
end;
end;
for i=1:N
if(data(i)==0)
rlc(i)=sqrt(Eb);rls(i)=0;r2c(i)=0;r2s(i)=0;
else
rlc(i)=0;rls(i)=0;r2c(i)=sqrt(Eb);r2s(i)=0;
end;
if(rand<alpha)
rlc(i)=rlc(i)+gngauss(sgma);
rls(i)=rls(i)+gngauss(sgma);
r2c(i)=r2c(i)+gngauss(sgma);
r2s(i)=r2s(i)+gngauss(sgma);
end;
end;
num_of_err=0;
for i=1:N
r1=rlc(i)^2+rls(i)^2;
r2=r2c(i)^2+r2s(i)^2;
if(r1>r2) decis=0;
else decis=1;
end;
if(decis~=data(i))
num_off_eff=num_of_err+1;
end;
end;
p=num_of_err/N;

其中高斯分布隨機變數函數gngauss程序如下

function[gsrv1,gsrv2]=gngauss(n,sgma)
if nargin==0,
m=0;sgma=1;
elseif nargin==1,
sgma=m;m=0;
end;
u=rand;
z=sgma*(sqrt(2*log(1/(1-u))));
u=rand;
gsrv1=m+z*cos(2*pi*u);
gsrv2=m+z*sin(2*pi*u);

⑸ 求在MIMO-OFDM系統使用RLS演算法計算迭代次數與均方誤差的Matlab程序

pudn 上面有

⑹ 求:matlab 自適應演算法 程序!

%lms演算法源程序

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 forgetting 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') ;

⑺ 實現RLS演算法的matlab程序有沒有大神會的一直出不來

% 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 forgetting 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高手來,幫忙改改程序,關於自適應濾波器演算法的

clear all;
clc;
m=500;%將輸入量賦值
u=0.002;%將輸入量賦值
a1=-1.6;a2=0.8;
w1(1)=0;w2(1)=0;
w1(2)=0;w2(2)=0;
n(1)=1;n(2)=2;
%%%%%%%%
% true sequence x(n)
rd=randn(1,m);
x(1)=rd(1);x(2)=rd(2);
for k=3:m
x(k)=rd(k)-a1*x(k-1)-a2*x(k-2);
end
R=[x(1)*x(1) 0;0 0];
T=0;
e(1)=0;
W=[0;1];
X=[x(2);x(1)];
e(2)=x(2)-W'*X;
%%%%%%%%%%
for i=3:1:m %權系數迭代m次
R=[x(i-1)*x(i-1) x(i-1)*x(i-2);x(i-1)*x(i-2) x(i-2)*x(i-2)];%列出自相關矩陣
T=1/(T+trace(R)); %求出跡的值,為後續u的判斷做准備
if(u>T)
error('u is larger than 1/t[R]');%判斷u的值是否小於跡的倒數
end
W=W+2*u*X*e(i-1); %LMS演算法的權系數迭代公式
X=[x(i-1) x(i-2)]'; %LMS演算法中輸入信號矢量的遞推
e(i)=x(i)-W'*X;
w1(i)=-W(1); %LMS演算法中權系數a1的提取
n(i)=i;
end
lambda=eig(R);%由R得出特徵值
v=[1;1];%給主軸坐標賦初值
for n1=1:50
w(n1)=v(1)*v(1)*lambda(1)*((1-2*u*lambda(1))^(2*n1))+v(2)*v(2)*lambda(2)*((1-2*u*lambda(2))^(2*n1));%學習曲線的迭代公式
end
figure(1)
plot(w1,'r-'); %曲線繪圖
%title('LMS演算法權值收斂情況');
xlabel('迭代次數');
ylabel('權值變化');
grid on;
hold on;

% m=500;%權系數迭代m次
len=0.98;%%%%遺忘因子
% a1=-1.6;a2=0.8;
% w1(1)=1;
% w2(1)=1;
% w1(2)=1;
% w2(2)=2;
% n(1)=1;
% n(2)=2;
% %%%%%%%%%%%輸入序列產生%%%%%%%%%%%%
% rd=randn(1,m);% 生成白雜訊序列
% x(1)=rd(1);x(2)=rd(2);%產生前兩個輸入序列
% for k=3:m
% x(k)=rd(k)-a1*x(k-1)-a2*x(k-2);%產生其餘輸入序列
% end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
R=[0,0;0,0];%自相關矩陣初值R(-1)=0
W=[w1(2);w2(2)]; %初始權值
P=[0;0];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=3:1:m
X=[x(i-1),x(i-2)]';
R= len*R+ X*X';%迭代公式中自相關矩陣的計算
e=x(i)-W'*X;%輸出信號誤差e(n\n-1)
W=W+inv(R)*X*e; %RLS演算法的權系數迭代公式
w1(i)=-W(1); %RLS演算法中權系數a1的提取
w2(i)=-W(2); %RLS演算法中權系數a2的提取
n(i)=i;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
plot(w1,'b-'); %曲線繪圖
title('自適應權系數a1(n)的過渡過程(RLS和LMS演算法比較)');
xlabel('迭代次數');
ylabel('權值變化');
legend('LMS','RLS');
grid on;
hold off;
for k=3:m
y(k)=x(k)+w1(k)*x(k-1)+w2(k)*x(k-2);
end
figure(2);
hold on;
plot(x,'b-'); %曲線繪圖
grid on;
plot(y,'r-');
title('RLS濾波效果');
xlabel('迭代次數');
ylabel('輸入及輸出值');
legend('噪音','濾波器輸出');
hold off;

⑼ RLS演算法在MATLAB上模擬實現的程序

% RLS 演算法
<br>randn('seed', 0) ;
<br>rand('seed', 0) ;
<br>
<br>NoOfData = 8000 ; % Set no of data points used for training
<br>Order = 32 ; % Set the adaptive filter order
<br>
<br>Lambda = 0.98 ; % Set the forgetting factor
<br>Delta = 0.001 ; % R initialized to Delta*I
<br>
<br>x = randn(NoOfData, 1) ;% Input assumed to be white
<br>h = rand(Order, 1) ; % System picked randomly
<br>d = filter(h, 1, x) ; % Generate output (desired signal)
<br>
<br>% Initialize RLS
<br>
<br>P = Delta * eye ( Order, Order ) ;
<br>w = zeros ( Order, 1 ) ;
<br>
<br>% RLS Adaptation
<br>
<br>for n = Order : NoOfData ;
<br>
<br>u = x(n:-1:n-Order+1) ;
<br>pi_ = u' * P ;
<br>k = Lambda + pi_ * u ;
<br>K = pi_'/k;
<br>e(n) = d(n) - w' * u ;
<br>w = w + K * e(n) ;
<br>PPrime = K * pi_ ;
<br>P = ( P - PPrime ) / Lambda ;
<br>w_err(n) = norm(h - w) ;
<br>
<br>end ;
<br>
<br>% Plot results
<br>
<br>figure ;
<br>plot(20*log10(abs(e))) ;
<br>title('Learning Curve') ;
<br>xlabel('Iteration Number') ;
<br>ylabel('Output Estimation Error in dB') ;
<br>
<br>figure ;
<br>semilogy(w_err) ;
<br>title('Weight Estimation Error') ;
<br>xlabel('Iteration Number') ;
<br>ylabel('Weight Error in dB') ;
<br>

閱讀全文

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

熱點內容
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:834
安卓怎麼下載60秒生存 瀏覽:794
外向式文件夾 瀏覽:226
dospdf 瀏覽:421
怎麼修改騰訊雲伺服器ip 瀏覽:378
pdftoeps 瀏覽:484
為什麼鴻蒙那麼像安卓 瀏覽:728
安卓手機怎麼拍自媒體視頻 瀏覽:177
單片機各個中斷的初始化 瀏覽:715
python怎麼集合元素 瀏覽:471
python逐條解讀 瀏覽:823
基於單片機的濕度控制 瀏覽:489
ios如何使用安卓的帳號 瀏覽:875
程序員公園采訪 瀏覽:803
程序員實戰教程要多長時間 瀏覽:966
企業數據加密技巧 瀏覽:126
租雲伺服器開發 瀏覽:805
程序員告白媽媽不同意 瀏覽:328
攻城掠地怎麼查看伺服器 瀏覽:593
android開機黑屏 瀏覽:569