【信号去噪】基于卡尔曼滤波实现信号去噪附matlab代码

2023-05-16

 1 内容介绍

1.1 卡尔曼滤波理论的背景及意义 

信号是信息的载体。一般可以分为两类,分别为确定性信号与随机信号。服从 某种固定函数的关系的信号,就是确定性信号,它的变化是遵循一定规律的,具有 确定的频谱特性,比如说正余弦信号、阶跃信号、脉宽固定的矩形脉冲信号等。若 信号在每个时刻的取值是随机变量,则称之为随机信号,它不能表示为一个确定的 时间函数或空间函数。这种信号即使在初始条件和环境条件相同的情况下,每次信 号的实现结果也不一样,比如说海浪、陀螺漂移、惯性导航系统的导航误差、全球 定位系统(Global Position System, GPS)的选择可用性(Selective Availability, SA)误差 等,尽管随机信号没有确定的频谱特性,但是在实际应用中,可以利用它的统计特 性来进行计算,即随机信号具有确定的功率谱[1]1-5。 在信号采集与传输的过程中,必然会受到周围环境与内部噪声的干扰,所以我 们就要对信号进行正确的处理,排除干扰的影响,尽量获取的是所需的信号,这就 需要对接收信号进行滤波。滤波,就是从含噪的观测数据中提取信号的过程。根据 信号的特征不同,使用的滤波方法也不一样。对于确定性信号来说,由于其频谱特 性是确定的,就可以根据各信号在频带上的不同分布,设置与其频率特性相对应的 滤波器,如高通滤波器、带通滤波器、低通滤波器及带阻滤波器等,使所需的有用 信号无衰减地通过,而抑制干扰信号。这类滤波器可以用硬件方法来实现,即我们 通常所说的模拟滤波器,也可以用软件方法来实现,即数字滤波器。对确定性信号 进行的滤波我们通常将之称为常规滤波。 随机信号的频谱特性虽然不确定,但其功率谱特性是一定的,设计滤波器可依 据所需有用信号和干扰信号的功率谱来进行。美国学者维纳(N.Wiener)等人提出了 Wiener滤波,通过对功率谱分解来设计滤波器,与常规滤波相似的是要对信号做抑 制和选通处理[2,3]。在频域对信号进行Wiener滤波器的设计时,要求解维纳-霍普方 程,计算量很大,并且还需要大量的存储空间,在一定程度上妨碍了Wiener滤波的 广泛应用。 1960年卡尔曼(R.E.Kalman)发表了对于离散数据利用递归方法来解决其线性滤 波问题的论文[4]。在这篇文章里,提出了卡尔曼滤波(Kalman Filter),一种新的且克 服了Wiener滤波缺点的滤波方法。卡尔曼在随机估计理论中引入了状态空间的概念, 将信号看做是白噪声激励下的一个线性系统的输出,这种输入-输出关系通过状态方 程的形式来描述,滤波算法是在估计过程中利用系统状态方程、观测方程、系统噪声和观测噪声的统计特性形成的,因为所用的信号信息都是时域的,所以不仅可以 估计一维的平稳的随机过程,也可以估计多维的、非平稳随机过程。这就克服了在 频域内Wiener滤波设计时遇到的种种限制,适用范围比较广泛。Kalman滤波的理论基础就是估计问题。从信号处理观点看,估计问题讲的是如 何从受噪声污染的观测量中恢复信号或逼近信号或推出一组参数值的问题。在数学 上,估计问题属于统计学的范畴。在估计问题中,观测空间是唯一的信息源,只有 观测值才能提供估计所需要的信息[5]17-24。可问题在于这些观测值中含有误差。传播 误差、设备误差、计算误差以及人为误差等都是产生这些误差的主要来源[6]。在估 计问题中,误主要指随机误差。因此,将估计问题可以归纳为:在给定观测值 

2 仿真代码​​​​​​​

addpath('./filters');
addpath('./IP_raytracing');
%% 模拟一条运动轨迹,然后加上高斯观察噪声,作为观测位置轨迹。然后使用卡尔曼滤波得到滤波后的结果。
% 速度为均值0.6m标准差0.05的高斯分布
% 观测噪声标准差为2

%% 画出实际的真实路径
roomLength = 1000;
roomWidth = 1000;
t = 500;
trace_real = get_random_trace(roomLength, roomWidth, t);
figure; 
subplot(1, 3, 1); plot(trace_real(:, 1), trace_real(:, 2), '.');
title('实际的真实路径');

%% 有观测噪声时的路径
noise = 2; %2m的位置波动噪声
trace = trace_real + normrnd(0, noise, size(trace_real));
subplot(1, 3, 2); plot(trace(:, 1), trace(:, 2), '.');
title('有噪声时的路径');
fprintf('卡尔曼滤波之前的定位精度: %f m\n', accuracy(trace, trace_real));

%% 对有噪声的路径进行卡尔曼滤波
kf_params_record = zeros(size(trace, 1), 4);
for i = 1 : t
    if i == 1
        kf_params = kf_init(trace(i, 1), trace(i, 2), 0, 0); % 初始化
    else
        kf_params.z = trace(i, 1:2)'; %设置当前时刻的观测位置
        kf_params = kf_update(kf_params); % 卡尔曼滤波
    end
    kf_params_record(i, :) = kf_params.x';
end
kf_trace = kf_params_record(:, 1:2);
subplot(1, 3, 3); plot(kf_trace(:, 1), kf_trace(:, 2), '.');
title('卡尔曼滤波后的效果');
fprintf('卡尔曼滤波之后的定位精度: %f m\n', accuracy(kf_trace, trace_real));
 

3 运行结果

4 参考文献

[1]侯亚培. 基于卡尔曼滤波的脑电信号去噪方法研究[D]. 燕山大学.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【信号去噪】基于卡尔曼滤波实现信号去噪附matlab代码 的相关文章

  • 自动驾驶之去光晕调研

    中文版综述github 一 光晕类型 常见去光晕算法的光晕 去光晕算法的光晕之二 汇总 样式包括有 halos 色圈 streaks 条纹 bright lines 亮线 saturated blobs 深污点 color bleeding
  • 自动驾驶之3D点云聚类算法调研

    1 方法 总共分为4类 基于欧式距离的聚类Supervoxel 聚类深度 Depth 聚类Scanline Run 聚类 1 1 基于欧氏距离的聚类 思路 在点云上构造kd tree 然后在某个半径阈值 例如0 5m 则分割为一个实例 相似
  • 自动驾驶之夜间检测调研

    1 ExDark 第一个 公开 特定的提供 natural low light images for object的数据集 7363张 low light images 12 classes Low light image enhancem
  • 自动驾驶之行人轨迹预测数据集

    一 Real Data ETH Univ 43 Hotel 750 pedestrians exhibiting complex interactions UCY Zara01 Zara02 and Uni 780 pedestrians
  • 自动驾驶之单目3D目标检测TensorRT调研

    目前在github上只能找到2个项目 TensorRT CenterNet 3D tkDNN 两者都是使用CenterNet xff0c 但第1个基于TensorRT5 无法与当前最新的TensorRT6和TensorRT7兼容 经测试 x
  • 秋招之字节面试智力题

    1 倒水 只有两个无刻度的水桶 xff0c 一个可以装6L水 xff0c 一个可以装5L水 xff0c 如何在桶里装入3L的水 6L装满倒入5L xff0c 剩1L5L倒出 1L倒入5L6L装满倒入5L剩2L5L倒出 xff0c 2L倒入5
  • 数学专业外语之一: 基本概念与术语

    一 四则运算 加法 plus xff0c 1 43 2 one plus two减法 minus 3 2 three minus two乘法 times or multiplied by xff0c 3x2 three times two
  • 数学专业外语之二: 阅读理解与翻译初步

    一 比 率与比例 number xff1a 数 xff1b number axis xff1a number theory xff1a 数论 xff1b the number of xff1a 的数量quantity xff1a 量 xff
  • 从iphone一代看产品创新

    第一代iPhone2007年6月29日正式发售 xff0c 可能大多数人接触Iphone是从iphone4开始 xff0c 先展示一下iphone一代 xff0c 提醒一下这是2007年的一款手机 xff0c 当时市面所有手机都是键盘机 x
  • 自动驾驶之3D目标检测的SMOKE算法

    SMOKE Single Stage Monocular 3D Object Detection via Keypoint Estimation 论文github知乎 一 数据集 KITTI 1 1 输入 单张图像 xff1a 1242x3
  • 自动驾驶之车道线检测调研与实测

    一 LaneNet 论文代码 xff1a github python tensorflow 1 15 1 1 主要过程 inference xff0c 分上下两个分支 xff0c 如图 Enocder decoder stage 图像空间编
  • 推荐系统之AUC指标的一些理解

    以下是在一些整理的和自己的关于AUC的理解 1 AUC和GAUC的区别 auc反映的是整体样本间的一个排序能力 在计算广告领域 实际要衡量的是不同用户对不同广告之间的排序能力 因此实际应该更关注的是同一个用户对不同广告间的排序能力 GAUC
  • 逻辑回归相关问题整理

    1 写逻辑回归的logloss损失函数 对于样本 x x x xff0c 输出为 p x i
  • 如何防止softmax函数overflow和underflow?

    上溢出 xff1a c极其大的时候 xff0c 计算 e c e c e c 下溢出 xff1a 当c趋于负无穷的时候 xff0c 分母是一个极小的数 xff0c 导致下溢出 解决方法 令
  • 使用matplotlib绘图库的pyplot快速绘图

    使用matplotlib绘图库的pyplot快速绘图 matplotlib是Python最常用的绘图库 xff0c 在结果或数据可视化中常用pyplot实现快速绘图 xff0c 下面参考张若愚主编的Python科学计算 xff08 第2版
  • 经典的机器学习二分类算法——Logistic回归

    问题描述 对于维度为 m 43 1 m 43 1 特征为 x x 样本的二分类问题 有负类 Negative Class 记为 0 0 xff0c 正类 xff08 Positive Class xff09 记为 1
  • Python调用face++API完成本地图片的人脸检测

    Python调用face 43 43 API完成本地图片的人脸检测 简单调用face 43 43 API对本地图片进行人脸检测 xff0c 输出基本信息到csv文件 注册face 43 43 账号 face 43 43 网址 https w
  • Libsvm在windows下使用细节汇总

    0 下载Libsvm Libsvm官网 https www csie ntu edu tw cjlin libsvm 下载后将其解压到本地 xff0c 这里 xff0c 我的本地路径为 xff1a C Anaconda3 Lib sit p
  • 表情识别数据集汇总

    参考文献 xff1a Deep Facial Expression Recognition A Survey 网址 https arxiv org pdf 1804 08348 pdf CK 43 http www pitt edu emo
  • 实时系统和非实时系统的区别

    嵌入式操作系统分为实时系统和非实时系统两类 xff0c 常见的实时系统有 xff1a ThreadX FreeRTOS ucOS 常见的非实时系统有 xff1a windows linux Android 两类操作系统的主要区别在于任务调度

随机推荐