Joint Approximative Diagonalization of Eigen matrix (JADE)
特征矩阵联合相似对角化算法[1]。
Cardoso于1993年提出的盲信号分离具有代表性的一种算法。是一种基于四阶累积量特征矩阵近似联合对角化盲分离算法。该算法将目标函数最大化问题等价于一组四阶累积量矩阵的特征矩阵的联合对角化问题,不仅大大简化了算法的计算复杂度,同时还有效提高了算法的分离性能。
原理
JADE算法原理就是将白化后的混合信号的四阶累积量矩阵(或二阶相关矩阵)通过U变换,压缩为一个对角矩阵,从而求解酉矩阵U。

白化
信号模型如式x(t) = As(t)所示,源信号之间相互统计独立。由于盲分离问题中,源信号的真实幅度不可解,为方便算法研究,一般通过去均值化等数学方法将各个源信号分量转化为零均值且方差为1的随机变量。白化数据是JADE算法的第一步,通过白化可以恢复信号之间的二阶独立性。对观测信号的相关矩阵进行特征分解:
白化矩阵:
白化信号
有:


显然,矩阵 V 为正交矩阵。JADE 算法的目的就是寻找一个正交矩阵U = VJP ,使源信号分离:

其中 P为置换矩阵,J 为对角矩阵。
对照函数

根据四阶累积量的平方和性质易知,对照函数式(2.8)的最大化等价于除c(U) 所包含的四阶累积量之外的所有互累积量平方和的最小化,因此可以实现信号分离。然而对照函数的计算非常复杂,难以实用化。但所幸的是 Cardoso 证明,它与一组矩阵的联合对角化等价,而且这组矩阵包含了所有四阶累积量,因而不但减少了算法的运算量,同时还提高了算法的分离性能。
JADE
给定一个矩阵集合N={Nr|1≤r≤s},一个酉矩阵U对其联合对角化等价于下面目标函数的最大化:

一般情况下,矩阵集合N不能同时完全被酉矩阵U联合对角化,只能近似对角化,因此称之为联合近似对角化。定义矩阵集合:

Cardoso等人已证明,对于这个矩阵集存在如下等式:

则对照函数最大化问题转化成了一组矩阵的联合近似对角化问题。为进一步简化算法,Cardoso等已证明可将四阶累积量矩阵用特征矩阵表示。对于任一给定矩阵
,定义矩阵
,

对于任意的K维具有四阶累积量的随机矢量z,存在K2个实数
和N2个N×N阶特征矩阵Mi满足下式:

利用随机矢量z(t)的所有四阶累积量构造K2×K2矩阵Cz,对Cz作特征值分解即可得到特征值及特征矩阵(由N2维的特征向量反堆栈为N×N特征矩阵),将特征值按由大到小的顺序排列,取前K个特征值及对应的特征矩阵组成累积量特征矩阵集合
,对这组矩阵进行近似联合对角化就可求得酉矩阵U,进而实现源信号的分离。
参考文献
[1] Cardoso J F, Souloumiac A. Blind Beamforming for non Gaussian Signals[J]. IEE Proc.-F, 1993, 140(6):362-370.
[2] 熊坤来. 盲分离及其在阵列信号处理中的应用研究[D]. 国防科学技术大学, 2015.
Joint Approximative Diagonalization of Eigen matrix (JADE)的更多相关文章
- Eigen::Matrix与array数据转换
1. 数组转化为Eigen::Matrix ]; cout << "colMajor matrix = \n" << Map<Matrix3i> ...
- eigen Matrix详解
Eigen Matrix 详解 在Eigen中,所有的matrices 和vectors 都是模板类Matrix 的对象,Vectors 只是一种特殊的矩阵,行或者列为1. Matrix的前三个模板参 ...
- Eigen库矩阵运算使用方法
Eigen库矩阵运算使用方法 Eigen这个类库,存的东西好多的,来看一下主要的几个头文件吧: ——Core 有关矩阵和数组的类,有基本的线性代数(包含 三角形 和 自伴乘积 相关),还有相应对数组的 ...
- Eigen介绍及简单使用
博客转载自:https://blog.csdn.net/fengbingchun/article/details/47378515 Eigen是可以用来进行线性代数.矩阵.向量操作等运算的C++库,它 ...
- Eigen库笔记整理(一)
首先熟悉Eigen库的用途,自行百度. 引入头文件: // Eigen 部分 #include <Eigen/Core> // 稠密矩阵的代数运算(逆,特征值等) #include < ...
- 使用Eigen遇到恶心报错
参考博客:https://www.cnblogs.com/wongyi/p/8734346.html 1. 数据类型报错 /home/wy/workdir/slambook/ch3/useEigen/ ...
- eigen矩阵操作练习
// // Created by qian on 19-7-16. // /* 相机位姿用四元数表示 q = [0.35, 0.2, 0.3, 0.1] x,y,z,w * 注意:输入时Quatern ...
- 机器人关节空间轨迹规划--S型速度规划
关节空间 VS 操作空间 关节空间与操作空间轨迹规划流程图如下(上标$i$和$f$分别代表起始位置initial和目标位置final): 在关节空间内进行轨迹规划有如下优点: 在线运算量更小,即无需进 ...
- A Beginner’s Guide to Eigenvectors, PCA, Covariance and Entropy
A Beginner’s Guide to Eigenvectors, PCA, Covariance and Entropy Content: Linear Transformations Prin ...
随机推荐
- day23——继承
day23 初识继承 字面意思:儿子可以完全使用父亲的所有内容 专业角度:如果B类继承A类, B类就称为子类.派生类 A类就称为父类.基类.超类 面向对象三大特性:继承.封装.多态 继承:单继承.多继 ...
- Django框架之第三篇(路由层)--有名/无名分组、反向解析、路由分发、名称空间、伪静态
一.Django请求生命周期 二.路由层 urls.py url()方法 第一个参数其实就是一个正则表达式,一旦前面的正则匹配到了内容,就不会再往下继续匹配,而是直接执行对应的视图函数. djang ...
- 6. 运行Spark SQL CLI
Spark SQL CLI可以很方便的在本地运行Hive元数据服务以及从命令行执行任务查询.需要注意的是,Spark SQL CLI不能与Thrift JDBC服务交互.在Spark目录下执行如下命令 ...
- docker-compose up 启动容器服务超时错误:ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
问题: 本人正在使用docker运行一个中型的项目,包含40多个微服务及相关的docker.由于docker-compose up 同时启动的服务过多,超过了请求HTTP限制的60s时间仍未全部成功启 ...
- 《JAVA高并发编程详解》-类的加载过程简介
- IE浏览器 location.href 不跳转
var url = "https://www.cnblogs.com/zing"; location.href = url; window.event.returnValue = ...
- ConcurrentDictionary,ConcurrentStack,ConcurrentQueue
static void Main(string[] args) { var concurrentDictionary = new ConcurrentDictionary<int, string ...
- golang中生成读取二维码(skip2/go-qrcode和boombuler/barcode,tuotoo/qrcode)
1 引言 在github上有好用golan二维码生成和读取库,两个生成二维码的qrcode库和一个读取qrcode库. skip2/go-qrcode生成二维码,github地址:https://g ...
- Java自学-Scanner类
使用Scanner读取数据 System.out.println("") 用于向控制台输出数据. 我们还需要从控制台输入数据,所以需要用到Scanner类. 步骤 1 : 使用Sc ...
- Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)
Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...