用PCA(主成分分析法)进行信号滤波

时间:2022-04-02 10:16:20

用PCA(主成分分析法)进行信号滤波

此文章从我之前的C博客上导入,代码什么的可以参考matlab官方帮助文档

现在网上大多是通过PCA对数据进行降维,其实PCA还有一个用处就是可以进行信号滤波。网上对此的介绍比较少,正好最近研究了一下,所以把自己的理解记录下来。

对于PCA原理的介绍网上已经有很多帖子,我比较喜欢的是这个:PCA的数学原理。文章把PCA降维定性和数学理解分析得生动且透彻,这里不再重复。

直接上干货吧,简单一个例子:

给定信号:用PCA(主成分分析法)进行信号滤波

其中有用信号为三个频率不同且幅值相位不相同的余弦函数之和,我把它设为20,30,50HZ,幅值分别为1,2,3。噪声信号u(t)为高斯白噪声,我们现在要用主成分分析将高斯白噪声从x(t)中滤掉。

取100个样本x(t),每个样本的采样点数为1000,也就是1000维(我们可以将维度理解成采样点数,至于为什么维度跟采样点数有关,也许只是正好在数学带入上呈现出相同的形式)。将这100个样本组合成100×1000的矩阵D。这100个样本中间,包含着有用信号与噪声信号两个成分。我们可以把有用信号理解为我们的主要维度A,它的“能量”是比较大的,且可以用方差表示。而噪声信号可以理解成其他维度,与有用信号彼此不是很相关,但是还是有那么一丝的相关性。我们要做的滤波,也就是去噪,就是让他们彼此之间的维度不相关,然后去掉多余的维度,只留下有用信号。

PCA的实现过程是比较规范化的:首先,求矩阵D的协方差矩阵B,协方差矩阵是个很有用的东西,他的对角线上表示的是各样本的方差,也可以理解为各维度的能量,对角线之外的元素表示不同维度之间的内积,也可以理解为相关程度。

用PCA(主成分分析法)进行信号滤波

然后,我们要讲不同维度的相关程度置0,这里可以用协方差矩阵的对角化得到。这样,我们得到的新维度两两之间就没有相关性了。然后,我们将得到的对角矩阵的特征值从大到小排列,刚才说了,对角线上特征值的大小表示相应维度的能量,表示不同维度对原信号的贡献率。

用PCA(主成分分析法)进行信号滤波

可以看到,第一主成分,也可以说在这个维度下,它的贡献率(特征值、方差、能量)最高,所以我们可以把它理解为这个主成分包含最多的有用信号。而其他维度分别以很小的,彼此不相关的形式存在着,恰恰跟高斯白噪声的性质很像,所以其他主成分我们可以在滤波中把他们去掉。

这跟降维还是有一定区别的。降维是指累计贡献率达到某个阈值,将阈值之内的主成分(维度)用来还原原始信号(有用信号+噪声信号),他更多的强调一种信号的降维还原。而滤波主要是将原来与有用信号中不相关的部分滤掉,不是一种单纯的无损还原。

所以,我们取第一主成分就够了嘛,是不是!还原出来的信号如下图:用PCA(主成分分析法)进行信号滤波

感觉还是不错的,然后我又跟FIR滤波器对比了一下,下面是他们分别的频域图:

用PCA(主成分分析法)进行信号滤波

还是可以看出明显区别的,因为FIR滤波只能滤除截止频率之外的频率分量,而PCA可以把与主成分没关系的量统统滤除。但是,PCA的局限性也就突显出来:他只能滤出与有用信号不相关的信号,对于相关或略有相关的信号,PCA显得就比较吃力了。

用PCA(主成分分析法)进行信号滤波的更多相关文章

  1. 特征脸(Eigenface)理论基础-PCA(主成分分析法)

    在之前的博客  人脸识别经典算法一:特征脸方法(Eigenface)  里面介绍了特征脸方法的原理,但是并没有对它用到的理论基础PCA做介绍,现在做补充.请将这两篇博文结合起来阅读.以下内容大部分参考 ...

  2. 【机器学习】主成分分析法 PCA (II)

    主成分分析法(PAC)的优化——选择主成分的数量 根据上一讲,我们知道协方差为① 而训练集的方差为②. 我们希望在方差尽可能小的情况下选择尽可能小的K值. 也就是说我们需要找到k值使得①/②的值尽可能 ...

  3. 降维之主成分分析法(PCA)

    一.主成分分析法的思想 我们在研究某些问题时,需要处理带有很多变量的数据,比如研究房价的影响因素,需要考虑的变量有物价水平.土地价格.利率.就业率.城市化率等.变量和数据很多,但是可能存在噪音和冗余, ...

  4. 【转载】主成分分析法(PCA)

    https://www.jisilu.cn/question/252942 进行维数约减(Dimensionality Reduction),目前最常用的算法是主成分分析法 (Principal Co ...

  5. 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA)

    主要内容: 一.降维与PCA 二.PCA算法过程 三.PCA之恢复 四.如何选取维数K 五.PCA的作用与适用场合 一.降维与PCA 1.所谓降维,就是将数据由原来的n个特征(feature)缩减为k ...

  6. 机器学习回顾篇(14):主成分分析法(PCA)

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  7. 主成分分析法(PCA)原理和步骤

    主成分分析法(PCA)原理和步骤 主成分分析(Principal Component Analysis,PCA)是一种多变量统计方法,它是最常用的降维方法之一,通过正交变换将一组可能存在相关性的变量数 ...

  8. 【笔记】主成分分析法PCA的原理及计算

    主成分分析法PCA的原理及计算 主成分分析法 主成分分析法(Principal Component Analysis),简称PCA,其是一种统计方法,是数据降维,简化数据集的一种常用的方法 它本身是一 ...

  9. (数据科学学习手札22)主成分分析法在Python与R中的基本功能实现

    上一篇中我们详细介绍推导了主成分分析法的原理,并基于Python通过自编函数实现了挑选主成分的过程,而在Python与R中都有比较成熟的主成分分析函数,本篇我们就对这些方法进行介绍: R 在R的基础函 ...

随机推荐

  1. Android学习笔记之使用百度地图实现Poi搜索

    PS:装个系统装了一天.心力憔悴.感觉不会再爱了. 学习内容: 1.使用百度Map实现Poi搜索. 2.短串分享 3.在线建议查询   百度地图的研究也算是过半了.能够实现定位,实现相关信息的搜索,实 ...

  2. js button onclick动作赋值操作

    昨天遇到的小问题 记录下 主要的东西其实都在这里:http://www.jb51.net/article/35107.htm 我稍微写一下: <script> function show( ...

  3. iOS利用视频做起始页

    一个好的引导页会使得用户体验大大提升,利用视频来做,可以更简单的达到优雅的效果.使用MediaPlayer.framework框架下的AVPlayerLayer,它和Core Animation紧密地 ...

  4. iOS 宏定义&lowbar;16进制色值转化为RGB返回UIColor类型对象

    // 十六进制颜色 #define COLOR_WITH_HEX(hexValue) [UIColor colorWithRed:((float)((hexValue & 0xFF0000) ...

  5. 我的第一个python web开发框架(3)——怎么开始?

    小白与小美公司经过几次接触商谈,好不容易将外包签订了下来,准备开始大干一场.不过小白由于没有太多的项目经验,学过python懂得python的基本语法,在公司跟着大家做过简单功能,另外还会一些HTML ...

  6. SimpleDateFormat 常用用法

    1.SimpleDateFormat函数语法:                   G 年代标志符          y 年          M 月          d 日          h ...

  7. Python——Django目录说明

    一.Django安装好后,建立djangosite的开发项目 #django-admin startproject djangosite 二.djangosite目录内容 ''' djangosite ...

  8. edgedb 内部pg 数据存储的探索 &lpar;三&rpar; 源码包setup&period;py 文件

    edgedb 是基于python开发的,同时集成了cython 以下为包的setup.py 配置,从里面我们可以看到关于edgedb 的一些依赖 以及构建过程 setup.py 源码 整体配置不算很多 ...

  9. 前后端分离djangorestframework——视图组件

    CBV与FBV CBV之前说过就是在view.py里写视图类,在序列化时用过,FBV就是常用的视图函数,两者的功能都可以实现功能,但是在restful规范方面的话,CBV更方便,FBV还要用reque ...

  10. 【POJ】4007&period;Flood-it&excl;

    原题戳这里 题解 搜索是个好东西,不是人人都会搜 迭代加深,然后用一个函数估值,值是除了和左上连通的部分还有几个颜色不同的块,如果走的步数加上估值大于当前枚举的深度就跳出 代码 #include &l ...