当前位置: 首页 > news >正文

压缩感知:稀疏信号重建

在这里插入图片描述

在这里插入图片描述
来考虑这样一个线性方程组: A x = b Ax = b Ax=b其中 A ∈ R m × n , x ∈ R n , x ∈ R n A \in \R^{m\times n},x \in \R^{n},x \in \R^{n} ARm×nxRnxRn

从图中明显看出这是一个欠定方程组,因为只要 A 的行满秩,该方程组有无穷多组解,否则也可能无解(即 b 不在 A 的列空间内,但我们不考虑这种情况)。

这个方程组是怎么和压缩感知扯上关系的呢?因为 矩阵A 可以看成一个从 n 维空间到 m 维空间的线性映射,显然 n ≫ m n\gg m nm,这是一个压缩映射。

现实的场景是: 采集到的信号 x 是 n 维的,利用压缩变换 A 将原信号压缩成 m 维的 b,由于 m ≪ n m\ll n mn,这将将大大提高信息传播和存储的效率。在这里,我们考虑信号 x 是稀疏的,即 n 个维度中大部分元素为零,只有少量的非零元。

上面这个方程组 A x = b Ax = b Ax=b 的目的就是利用压缩的信号 b,恢复原始信号 x。


如果你认为这就是一个简单的求解线性方程组问题的话,那就大错特错了,因为如前所述,这个方程组有无穷多个解!

实际上,原始信号重建问题对应的是一个约束问题:
原 始 问 题 : { min ⁡ ∣ ∣ x ∣ ∣ 0 , s . t .   A x = b 原始问题:\left\{ \begin{array}{lr} \min ||x||_0, \\ s.t. \:Ax=b \end{array} \right. {minx0,s.t.Ax=b

即 在满足约束 A x = b Ax = b Ax=b 的条件下,经可能地减少 x 中非零元的数目。

不幸的是,上述问题并不是一个凸优化问题,因为 ∣ ∣ ∙ ∣ ∣ 0 ||\bullet||_0 0 表示非零元个数,不是一个凸函数。

取而代之,我们将优化问题中的目标函数换成 l 1 l_1 l1 范数和 l 2 l_2 l2 范数来看看,即考虑优化问题:
替 代 问 题 1 : { min ⁡ ∣ ∣ x ∣ ∣ 2 , s . t .   A x = b 替代问题1: \left\{ \begin{array}{lr} \min ||x||_2, \\ s.t. \:Ax=b \end{array} \right. 1{minx2,s.t.Ax=b
替 代 问 题 2 : { min ⁡ ∣ ∣ x ∣ ∣ 1 , s . t .   A x = b 替代问题2:\left\{ \begin{array}{lr} \min ||x||_1, \\ s.t. \:Ax=b \end{array} \right. 2{minx1,s.t.Ax=b
上述问题可以用现有的凸优化求解器快速求解! 因为 l 2 l_2 l2范数是凸函数,而替代问题2 可以通过一些变换转换成凸问题。

结果如下:

  • 图1 对应原始的稀疏信号;
  • 图2 对应在 l 2 l_2 l2范数约束下重建的信号;
  • 图2 对应在 l 1 l_1 l1范数约束下重建的信号。

从结果可以看出, l 2 l_2 l2正则化不能保证稀疏性,而 l 1 l_1 l1正则化可以!

在这里插入图片描述

以下是在 matlab 中调用 CVX 的 mosek 求解器,对上述 l 2 , l 1 l_2, l_1 l2,l1 约束问题求解的代码。


clear all

n = 256;
m = 128;

A = randn(m,n);
u = sprandn(n,1,0.1);
% u = rand(n,1);
b = A*u;

figure(1);
subplot(3,1,1); plot(1:n, u);
title('exact solu');

cvx_solver mosek
cvx_begin 
    variable x(n)
    %minimize( max(norm(x, inf), norm(x,1)/sqrt(n)) )
    %minimize ( max(abs(x)))
    minimize (norm(x))
    subject to
        A*x == b
cvx_end
xl2 = x;

subplot(3,1,2); plot(1:n, xl2);
title('l2 solu');



cvx_begin
    variable x(n)
    minimize( norm(x,1) )
    subject to
        A*x == b
cvx_end
xl1 = x;

subplot(3,1,3); plot(1:n, xl1);
title('l1 solu');

fprintf('\n\nl2 error: %3.2e, l1 error: %3.2e\n', norm(u-xl2), norm(u-xl1));

本文内容参考文再文老师凸优化课程的讲义。

在这里插入图片描述

相关文章:

  • 八年书生感悟
  • 圆盘定理
  • 实对称阵的谱半径是连续函数
  • 信用卡套现~
  • 所有特征值大于零的矩阵一定是正定阵吗?
  • H236各个版本的区别总结
  • java小游戏——扫雷
  • 什么叫SAP-IDES
  • java 稀疏矩阵
  • 什么是聚集索引,什么是非聚集索引,什么又是主键?
  • 图的最短路径算法——Dijkstra算法的 java 实现
  • 开源软件七种盈利模式
  • 图的最短路径算法——Bellman-Ford算法的java实现
  • 最大流问题——Ford-Fulkerson方法的java实现
  • java集合框架整理
  • 《深入 React 技术栈》
  • flutter的key在widget list的作用以及必要性
  • Github访问慢解决办法
  • JavaScript学习总结——原型
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vue2.0 实现互斥
  • 初识 webpack
  • 翻译:Hystrix - How To Use
  • 后端_ThinkPHP5
  • 记录:CentOS7.2配置LNMP环境记录
  • 利用DataURL技术在网页上显示图片
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 手写双向链表LinkedList的几个常用功能
  • 说说动画卡顿的解决方案
  • 提醒我喝水chrome插件开发指南
  • 小程序开发之路(一)
  • 最近的计划
  • elasticsearch-head插件安装
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​iOS实时查看App运行日志
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (C语言)共用体union的用法举例
  • (poj1.2.1)1970(筛选法模拟)
  • (备忘)Java Map 遍历
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .chm格式文件如何阅读
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET Project Open Day(2011.11.13)
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net操作Excel出错解决
  • ??eclipse的安装配置问题!??
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [20171113]修改表结构删除列相关问题4.txt
  • [Android] 修改设备访问权限
  • [BSGS算法]纯水斐波那契数列
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [C/C++]数据结构 堆的详解