LMS、kalman、RLS的Matlab仿真
LMS、kalman、RLS的Matlab仿真
- author:LMS和RLS部分:hwb
- 图和代码如下,细节以后再补:
画图部分
clear all;
clc;%% 参数设置
sub_fre = 5;
fs=4096;
Ord = 48; % 权重阶数
N = 500; % 迭代次数
K = 100; % 数据截取
%% 仿真数据产生
m=0:(fs-1);
f_sub = linspace(0.4,0.5,sub_fre);
A = ones(sub_fre,1);
xn = zeros(fs,1)';
for i=1:sub_frexn = xn + 1*A(i)*sin(2*pi*f_sub(i)*m); %产生含有噪声的序列xn
end
dn = 1*sin(2*pi*0.9*m);
xn = xn + dn + 1*randn(1,fs);
%% LMS实现过程
% function [xn_p,err_n] = rls_self(xn, dn,lambda,delta,Ord,N,K)
[xn_p_lms, err_n_lms] = lms_self(xn, dn, Ord, 0.001, N, K);
M = 1:K;
dn_m = dn(Ord+1:Ord+K);
xn_m = xn(Ord+1:K+Ord);
subplot(3,2,1);
plot(M, xn_p_lms,M,dn_m,M,xn_m,'linewidth',1.25);
legend("滤波后信号", "理想信号", "原始信号");
% xlabel("N(点数)");
ylabel("幅值");
title("信号波形对比");
M = 1:N;
subplot(3,2,2);
plot(M, err_n_lms);
title("均方误差变化");%% 归一化LMS算法
N2 = 3000;
lms_a = 10;
lms_b = 1.5;
lms_mu = lms_a/(lms_b + xn*xn');
[~, err_n_lms] = lms_self(xn, dn, Ord, lms_mu, N2, K);
subplot(3,2,3);
M = 1:N2;
plot(M, err_n_lms,'*-');
title("归一化LMS算法 均方误差");%% 不同步长的影响 10^-2 - 10^-5 取100个点
mu_N = 100;
mu_ch = linspace(10^-2,10^-4,mu_N);
mu_err = zeros(mu_N,1);
for i=1:mu_N[~, err_n_lms] = lms_self(xn, dn, Ord, mu_ch(i), 500, K);mu_err(i) = err_n_lms(end);disp(mu_err(i));
end
subplot(3,2,4);
plot(mu_ch, mu_err,'*-');
title("不同步长的影响(N=1000)");suptitle('1-4 LMS算法 5-6 RLS算法');%% RLS
lambda = 0.998;
delta = 10^-4;
[xn_p,err_n] = rls_self(xn, dn,lambda,delta,Ord,N,K);
dn_m = dn(Ord+1:Ord+K);
xn_m = xn(Ord+1:K+Ord);
subplot(3,2,5);
M = 1:K;
plot(M, xn_p,M,dn_m,M,xn_m,'linewidth',1.25);
legend("滤波后信号", "理想信号", "原始信号");
title("RLS信号波形对比");
M = 1:N;
subplot(3,2,6);
plot(M, err_n);
title("RLS均方误差变化");
%function [xn_p,err_n] = rls_self(xn, dn,lambda,delta,Ord,N,K)
LMS实现-Matlab仿真
function [xn_p, err_n] = lms_self(xn,dn,Ord,mu,N,K)
%LMS_SELF 此处显示有关此函数的摘要
% 此处显示详细说明
wn = zeros(Ord,1);
en = 0;
err_n = zeros(N,1);
%% 迭代
for i=1:N % 迭代次数xn_f = xn(i:Ord+i-1)'; % filter中各抽头的系数en = dn(Ord+i) - wn'*xn_f;wn = wn + mu*en.*xn_f;for j=1:N % 迭代次数xn_f = xn(j:Ord+j-1)'; % filter中各抽头的系数en = dn(Ord+j) - wn'*xn_f;err_n(i) = err_n(i) + abs(en)^2;end
end
xn_p = zeros(K,1);
for j=1:K % 迭代次数xn_f = xn(j:Ord+j-1)'; % filter中各抽头的系数xn_p(j) = wn'*xn_f;
end
end
RLS实现-Matlab仿真
function [xn_p,err_n] = rls_self(xn, dn,lambda,delta,Ord,N,K)
%% 初始化权重系数->RLS
wn = zeros(Ord,1);
Pn = (1/delta).*eye(Ord);
kn = zeros(Ord,1);
err_n = zeros(N,1);%% 迭代
for i=1:N % 迭代次数xn_f = xn(i:Ord+i-1)'; % filter中各抽头的系数en = dn(Ord+i) - wn'*xn_f;kn = (Pn*xn_f)/(lambda + xn_f'*Pn*xn_f);Pn = (1/lambda)*(Pn-kn*xn_f'*Pn);wn = wn + kn*en;for j=1:N % 迭代次数xn_f = xn(j:Ord+j-1)'; % filter中各抽头的系数en = dn(Ord+j) - wn'*xn_f;err_n(i) = err_n(i) + abs(en)^2;end
end
xn_p = zeros(K,1);
for j=1:K % 迭代次数xn_f = xn(j:Ord+j-1)'; % filter中各抽头的系数xn_p(j) = wn'*xn_f;
end
end
卡尔曼滤波的Matlab实现
- 声明:卡尔曼滤波与本次信号模型不太搭,故此代码参考自朋友
clear all; close all; clc;
% 等速模型卡尔曼滤波仿真Kalman Filter
%% Initial condition
ts = 1; % 采样时间间隔
t = [0:ts:100]; % 采样时刻
T = length(t); % 采样点数
%% Initial state
x = [0 40 0 20]'; %% Process noise covariance 过程噪声协方差矩阵
q = 5; % 过程噪声协方差
Q1 = q*eye(4); % 过程噪声协方差矩阵%% Measurement noise covariance 观测噪声协方差矩阵
r = 5; % 观测噪声协方差
Q2 = r*eye(2); % 观测噪声协方差矩阵%% Process and measurement noise
v1 = sqrt(Q1)*randn(4,T); % 过程噪声序列 维度:4 x T
v2 = sqrt(Q2)*randn(2,T); % 观测噪声序列 维度:2 x T
%% Estimate error covariance initialization
p = 5; % 估计误差协方差矩阵
P(:,:,1) = p*eye(4); % 估计误差的协方差矩阵%========================================================================== %% 连续时间状态空间模型
A = [0 1 0 0;0 0 0 0;0 0 0 1; 0 0 0 0];
B = [0 0;1 0;0 0;0 1];
C = [1 0 0 0;0 0 1 0];
D = [1 0;0 1];%% 离散时间状态空间模型
% F:状态转移矩阵
% H:观测矩阵
sysc = ss(A,B,C,D); % 生成连续时间状态空间模型
sysd = c2d(sysc, ts, 'zoh'); % 有连续时间状态空间模型 到 离散时间状态空间模型
[F G C I] = ssdata(sysd); % 取出离散时间状态空间模型中的;过程方程的 F:状态转移矩阵;观测方程中的H:观测矩阵
%% Practice state of target
for i = 1:T-1x(:,i+1) = F*x(:,i);
end
x = x + v1; % 噪声下的估计向量序列
y = C*x + v2; % 噪声下的观测向量序列%========================================================================== %% Kalman Filter
% 书P179 算法5.4.1 kalman 自适应滤波算法
K = P;
x_hat = [0 0 0 0].';
% x_hat = x;
for i = 1:T-1 G = F * K * C'* inv(C * K * C' + Q2); % 书 P179 式5.4.24所定义 算法5.4.1中给出计算方法alpha = y(:, i) - C * x_hat(:, i); x_hat(:, i + 1) = F * x_hat(:, i) + G * alpha; % 计算当前状态向量 x_hatP = K - inv(F) * G * C * F;K = F * P * F' + Q1; % 更新 kalman 增益
end%% LMS adaptive filter
% 书P183 算法5.5.1 LMS自适应滤波及其基本变形
omega(:, :, 1) = zeros(4, 4);
x_hat2(:, 1) = x(:, 1);
for i = 1:T - 1x_hat2(:, i + 1) = omega(:, :, i)' * x_hat2(:, i); % 得到当前估计值e(:, i) = x(:, i + 1) - x_hat2(:, i + 1); % 计算估计值和实际值的误差alpha = 1 / (0.5 + x(:, i)' * x(:, i));omega(:, :, i + 1) = omega(:, :, i) + 10 * x_hat2(:, i) * conj(e(i))'; % 更新权向量
end%==========================================================================%% Estimate error
x_error = x-x_hat;
%% Graph 1 practical and tracking position
figure(1)
plot(x(1,:),x(3,:),'r');
hold on;
plot(x_hat(1,:),x_hat(3,:),'g.');
title('2D Target Position')
legend('Practical Position','Tracking Position')
xlabel('X axis [m]')
ylabel('Y axis [m]')
hold off;
%% Graph 2
figure(2)
plot(t,x(1,:)),grid on;
hold on;
plot(t,x_hat(1,:),'r'),grid on;
plot(t, x_hat2(1, :), "k"), grid on
title('Practical and Tracking Position on X axis')
legend('Practical Position', 'Kalman Tracking Position', 'LMS Tracking Position')
xlabel('Time [sec]')
ylabel('Position [m]')
hold off;
%% Graph 3
figure(3)
plot(t,x_error(1,:)),grid on;
title('Position Error on X axis')
xlabel('Time [sec]')
ylabel('Position RMSE [m]')
hold off;
%% Graph 4
figure(4)
plot(t,x(2,:)),grid on;
hold on;
plot(t,x_hat(2,:),'r'),grid on;
plot(t,x_hat2(2,:),'k'),grid on;
title('Practical and Tracking Velocity on X axis')
legend('Practical Velocity','Tracking Velocity')
xlabel('Time [sec]')
ylabel('Velocity [m/sec]')
hold off;
%% Graph 5
figure(5)
plot(t,x_error(2,:)),grid on;
title('Velocity Error on X axis')
xlabel('Time [sec]')
ylabel('Velocity RMSE [m/sec]')
hold off;
结语
稍微有点赶,
LMS、kalman、RLS的Matlab仿真相关推荐
- RLS,LMS以及NLMS三种自适应均衡matlab仿真
目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 自适应均衡属于自适应信号处理的应用范畴,各种各样的自适应均衡算法如迫零(ZF)算法.最小均方(LMS)算法.递归最小二乘(RL ...
- rls lms 对比 matlab,自适应均衡器的LMS和RLS两种算法的特性与仿真分析
自适应均衡属于自适应信号处理的应用范畴,各种各样的自适应均衡算法如迫零(ZF)算法.最小均方(LMS)算法.递归最小二乘(RLS)算法.变换域均衡算法.Bussgang算法.高阶或循环统计量算法.基于 ...
- 【语音去噪】基于最小二乘自适应滤波LMS和RLS实现语音去噪含Matlab源码
1 简介 自适应信号处理的理论和技术已经成为人们常用滤波和去噪技术.文中讲述了自适应滤波的原理以及LMS算法和RLS算法两种基本自适应算法的原理及步骤.并用MATLAB分别对两种算法进行了自适应滤波仿 ...
- mlse均衡器matlab,基于LMS自适应均衡器matlab仿真.doc
基于LMS自适应均衡器matlab仿真.doc 毕 业 设 计 (2014届) 题 目 一种基于OpenCV的摄像机标定方法 学 院 物理电气信息学院 专 业 电子信息工程 年 级 2010 学生学号 ...
- 自适应均衡器 matlab程序,基于lms自适应均衡器matlab仿真
基于lms自适应均衡器matlab仿真 毕 业 设 计 (2014 届) 题 目 一种基于 OpenCV 的摄像机标定方 法学 院 物理电气信息学院 专 业 电子信息工程 年 级 2010 学生学号 ...
- 基于LMS自适应滤波器的QPSK信号均衡器matlab仿真
目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 在自适应滤波器设计中,最小均方(Least Mean Square,LMS)算法使用随机梯度下降的方法实现代价函数的最小化,具 ...
- Matlab算法DSP移植验证,DSP计算机作业 自适应噪声抵消LMS算法Matlab仿真
[实例简介] 自适应噪声抵消LMS算法Matlab仿真,DSP计算机作业 数字信号处理 自适应 1) 借助MATLAB画出误差性能曲面和误差性能曲面的等值曲线: 2) 写出最陡下降法, LMS算法的计 ...
- LMS算法的基本理论和MATLAB仿真
LMS算法的基本理论和MATLAB仿真 1 基本理论 2 仿真 2.1 第一种信号:期望信号+噪声 2.1.1 没有蒙特卡洛 2.1.2 有蒙特卡洛 2.2 第二种信号:期望信号+幅相误差 2.3 第 ...
- LMS自适应滤波matlab仿真
目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 LMS(Least Mean Square), 由 Widrow 和 Hoff 于1960年提出,也称Δ规则.该算法与感知器网 ...
最新文章
- flash php socket通信_php与flash as3 socket通信传送文件实现代码
- libSVM 参数选择
- vs2015+opencv3.4安装及问题整理
- 静态时序分析——Data to data check
- MySQL 主从复制 复制过滤
- godaddy ssl_免费在线Linux培训,GoDaddy切换到OpenStack等
- 输入长度_CAD怎么测量长度?
- win11 P85主板能正常安装吗 windows11使用p85主板的安装的步骤方法
- 机器学习常用损失函数
- NeHe OpenGL教程(中文版附源代码)
- 计算机科学与技术_080702,电子科学与技术(专业代码;080702)专业介绍与解读
- Spring Boot拦截器配置拦截登陆
- c#写图像tif gdal_C#使用GDAL将tif图像转换为jpg、bmp、png和gif格式的图像
- 牛客每日练习----数的变换,Do you like Banana ?,Liao Han
- golang go doc 与 godoc 文档生成查看
- vue2.0 - layout组件(五)SideBar和Main页面布局
- SOD算法:PoolNet
- 如何使用MATLAB生成一个FIR低通滤波器?
- php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南
- 淘宝新开店怎么去增加流量 新店打造小爆款注意事项
热门文章
- 剑指offer -- 最长不含重复字符的字符串
- java获取手机通讯录权限_Android读取手机通讯录联系人到自己项目
- 阿里巴巴面试与面试技巧
- html页面打印插件,分享8款网站开发中最好用的打印页面插件
- Excel表格转换为MarkDown表格工具
- 2023年全国最新二级建造师精选真题及答案25
- 厘摩(centimorgan,cM)到底是啥鬼
- 入网认证遇到的安全受控机制的问题---之Android 5.1.1 AppOps与严格模式
- Miniconda安装TensorFlow并导入Pycharm
- 到底什么是阿里味?能否在不加入阿里的时候可以体验一下