基于RLS算法和LMS的自适应滤波器的MATLAB程序

基于RLS算法和LMS的自适应滤波器的MATLAB程序,第1张

% 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.09760.28730.33600.22100.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 算法

<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算法 \x0d\x0arandn('seed', 0) \x0d\x0arand('seed', 0) \x0d\x0aNoOfData = 8000 % Set no of data points used for training \x0d\x0aOrder = 32 % 自适应滤波权数 \x0d\x0aLambda = 0.98 % 遗忘因子 \x0d\x0aDelta = 0.001 % 相关矩阵R的初始化 \x0d\x0ax = randn(NoOfData, 1) %高斯随机系列 \x0d\x0ah = rand(Order, 1) % 系统随机抽样 \x0d\x0ad = filter(h, 1, x) % 期望输出 \x0d\x0a% RLS算法的初始化 \x0d\x0aP = Delta * eye ( Order, Order ) %相关矩阵 \x0d\x0aw = zeros ( Order, 1 ) %滤波系数矢量的初始化 \x0d\x0a% RLS Adaptation \x0d\x0afor n = Order : NoOfData \x0d\x0au = x(n:-1:n-Order+1) %延时函数 \x0d\x0api_ = u' * P %互相关函数 \x0d\x0ak = Lambda + pi_ * u \x0d\x0aK = pi_'/k%增益矢量 \x0d\x0ae(n) = d(n) - w' * u %误差函数 \x0d\x0aw = w + K * e(n) %递归公式 \x0d\x0aPPrime = K * pi_ \x0d\x0aP = ( P - PPrime ) / Lambda %误差相关矩阵 \x0d\x0aw_err(n) = norm(h - w) %真实估计误差 \x0d\x0aend \x0d\x0a% 作图表示结果 \x0d\x0afigure \x0d\x0aplot(20*log10(abs(e))) %| e |的误差曲线 \x0d\x0atitle('学习曲线') \x0d\x0axlabel('迭代次数') \x0d\x0aylabel('输出误差估计') \x0d\x0afigure \x0d\x0asemilogy(w_err) %作实际估计误差图 \x0d\x0atitle('矢量估计误差') \x0d\x0axlabel('迭代次数') \x0d\x0aylabel('误差权矢量') \x0d\x0a\x0d\x0a%lms 算法 \x0d\x0aclear all \x0d\x0aclose all \x0d\x0ahold off%系统信道权数 \x0d\x0asysorder = 5 %抽头数 \x0d\x0aN=1000%总采样次数 \x0d\x0ainp = randn(N,1)%产生高斯随机系列 \x0d\x0an = randn(N,1)\x0d\x0a[b,a] = butter(2,0.25)\x0d\x0aGz = tf(b,a,-1)%逆变换函数 \x0d\x0ah= [0.09760.28730.33600.22100.0964]%信道特性向量 \x0d\x0ay = lsim(Gz,inp)%加入噪声 \x0d\x0an = n * std(y)/(10*std(n))%噪声信号 \x0d\x0ad = y + n%期望输出信号 \x0d\x0atotallength=size(d,1)%步长 \x0d\x0aN=60 %60节点作为训练序列 \x0d\x0a%算法的开始 \x0d\x0aw = zeros ( sysorder , 1 ) %初始化 \x0d\x0afor n = sysorder : N \x0d\x0au = inp(n:-1:n-sysorder+1) % u的矩阵 \x0d\x0ay(n)= w' * u%系统输出 \x0d\x0ae(n) = d(n) - y(n) %误差 \x0d\x0aif n 回答于 2022-11-16


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11735708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存