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

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

现在网上大多是通过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,协方差矩阵是个很有用的东西,他的对角线上表示的是各样本的方差,也可以理解为各维度的能量,对角线之外的元素表示不同维度之间的内积,也可以理解为相关程度。

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

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

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

所以,我们取第一主成分就够了嘛,是不是!还原出来的信号如下图:

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

还是可以看出明显区别的,因为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. Java Selenium 定位元素 实现的一个注册功能

    import java.util.List; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; impor ...

  2. apache压力测试工具的apache bench和JMeter的安装

    Apache压力测试工具的安装 1,apache bench的安装 apache  bench工具集成在http的软件包内,可以直接安装apache就可以. 当有些时候,我们不需要用到所有的软件包,我 ...

  3. Android Studio INSTALL_FAILED_UID_CHANGED 错误

    错误发生于:启动调试时应用安装失败,提示"INSTALL_FAILED_UID_CHANGED". 出现此问题的原因大多是APK卸载不彻底造成冲突. 解决方案: 分别进入 /dat ...

  4. 完整的WebRTC调用序列图

    说在前面的话:此图出自Rea-Time Communication with WebRTC: https://book.douban.com/subject/25849712/ 的第五章.

  5. self,和类实例化加不加括号的理解

    # class Dog(object): # def talk(self): # print('汪汪~~~') # print(self) # self就是对象,默认将对象传递到类方法,self不需要 ...

  6. Scrapy爬虫框架第一讲(Linux环境)

    1.What is Scrapy? 答:Scrapy是一个使用python语言(基于Twistec框架)编写的开源网络爬虫框架,其结构清晰.模块之间的耦合程度低,具有较强的扩张性,能满足各种需求.(前 ...

  7. ResultSet只返回一行数据的原因

    写之前,先告戒一下自己......写代码一定要细心,自己写的即使是非常简单的地方也要细心,不能自我感觉太良好,那往往可能会有些bug在等着你...... 注意事项: 1.当你为了查看数据库中是否存在某 ...

  8. java ArrayList集合

    ArrayList集合是程序中最常见的一种集合,它属于引用数据类型(类).在ArrayList内部封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来 ...

  9. 不使用JavaScript实现菜单的打开和关闭

    我在写有菜单栏的网页时,基本都会用响应式设计来适配移动端,例如把不重要的菜单选项隐藏,或者创建一个菜单按钮来控制的菜单的打开和关闭之类的.而我之前一直是使用JavaScript来实现菜单的打开和关闭的 ...

  10. Java NIO Channel to Channel Transfers通道传输接口

    原文链接:http://tutorials.jenkov.com/java-nio/channel-to-channel-transfers.html 在Java NIO中如果一个channel是Fi ...