基于RLS算法和LMS的自适应滤波器的MATLAB程序
randn('种子',0);
rand('种子',0);
NoOfData = 8000%设置用于训练的数据点数量
阶= 32;%自适应过滤权重
λ= 0.98;遗忘因子%
delta = 0.001;%相关矩阵r的初始化
x = randn(NoOfData,1);%高斯随机序列
h =兰特(阶,1);%系统随机抽样
d =滤波器(h,1,x);预期产出百分比
% RLS算法的初始化
P = Delta * eye(阶,阶);%相关矩阵
w =零(阶,1);%滤波器系数向量的初始化
% RLS自适应
for n = Order:NoOfData;
u = x(n:-1:n阶+1);%延迟功能
pi _ = u ' * P;%互相关函数
k =λ+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);%真实估计误差
结束;
%图表示结果。
图;
plot(20 * log 10(ABS(e)));%| e |的误差曲线
标题(“学习曲线”);
Xlabel(“迭代次数”);
Ylabel(“输出误差估计”);
图;
semi logy(w _ err);%为实际估计误差图表。
标题('向量估计误差');
Xlabel(“迭代次数”);
Ylabel(“误差权重向量”);
%lms算法
清理所有
全部关闭
推迟%系统通道权重
sys order = 5;点击次数百分比
n = 1000;总采样次数百分比
inp = randn(N,1);%产生高斯随机序列
n = randn(N,1);
);
支线剧情(412)
plot(t,x);
支线剧情(413)
plot(t,y);
支线剧情(414)
plot(t,y _规格化);
图(二)
plot(t,误差,' r ',t,误差_归一化,' b ');
如何用MATLAB编写自适应滤波器的算法,帮助你在百度文库中找到这个算法,以及自适应噪声抵消LMS算法的Matlab仿真,希望对你有帮助。如果有什么问题,我们可以讨论解决。
找到基于RLS算法和LMS的自适应均衡系统的MATLAB程序。代码有些问题,可以参考一下。代码还是自己写的。
基于RLS算法的%自适应线性预测
clc
全部清除;
N = 300
m = 100;计算次数百分比
w 1 =零(N,M);w2 =零(N,M);I =眼睛(2);e 1 =零(N,M);
对于k=1:M
%产生白噪音
Pv = 0.008%定义白噪声的方差
a 1 =-0.195;a2 = 0.95o = 0.02r = 0.95
m = 5000%生成5000个随机数。
v=randn(1,m);
v = v * sqrt(Pv);%产生平均值为0、方差为Pv的白噪声
% m = 1:N;
v = v(1:N);% 1000领出前
%绘图(m,v);标题('均值为0,方差为0.0965的白噪声');ylabel(' v(n)');xlabel(' n ');
v = v’;
%矢量初始化
x =零(1,N);
x(1)= v(1);%x(0)=v(0)
x(2)= v(2)-a 1 * v(1);% x(1)= v(1)-a 1 * v(0)
w =零(2,N);
w(:,1)=[0 0]';% w(0)=[0 0]';
x =零(2,N);
x(:,2)=[v(1)0]';% X(0)=[0 0]';X(1)=[v(0) 0]'
c =零(2,2 * N);
c(:,1:2)= 1/o . * I;%C(0)=1/o*I
e =零(1,N)';%定义误差向量
u =零(1,N);
g =零(2,N);
%根据RLS算法递归
对于n=1:N-2
x(n+2)= v(n+2)-a 1 * 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);%将存储从每次计算中获得的误差。
结束
结束
%求权向量和误差M倍的平均值。
wa 1 =零(N,1);wa2 =零(N,1);en =零(N,1);
对于k=1:M
wa1(:,1)=wa1(:,1)+w1(:,k);
wa2(:,1)=wa2(:,1)+w2(:,k);
en(:,1)=en(:,1)+e1(:,k);
结束
N = 1:N;
支线剧情(221)
plot(n,w(1,n),n,w(2,n));%对权重向量的变化曲线进行单次计算
xlabel(' n ');ylabel(' w(n)');标题(' W1 (n)和w2(n)的单一变化曲线(线性预测,RLS)')
支线剧情(222)
plot(n,wa1(n,1))。/M,n,wa2(n,1)。/M);%使100次来计算权重向量的平均曲线。
xlabel(' n ');ylabel(' w(n)');标题(' 100 w 1(n)和w2(n)'的平均变化曲线)
支线剧情(223)
plot(n,e(n,1))。^2);%对e 2曲线进行单次计算。
xlabel(' n ');ylabel('e^2');标题('计算一次E 2的变化曲线');
支线剧情(224)
plot(n,(en(n,1)/M)。^2);%做m次计算E ^ 2的平均变化曲线。
xlabel(' n ');ylabel('e^2');标题(‘100次计算E 2的平均变化曲线’);