压缩感知入门④基于总体最小二乘的扰动压缩感知重构算法

news2024/9/24 13:24:22

  • 压缩感知系列博客:
  • 压缩感知入门①从零开始压缩感知
  • 压缩感知入门②信号的稀疏表示和约束等距性
  • 压缩感知入门③基于ADMM的全变分正则化的压缩感知重构算法
  • 压缩感知入门④基于总体最小二乘的扰动压缩感知重构算法

文章目录

  • 1. Problem
  • 2. 仿真结果
  • 3. MATLAB算法
  • 4. 源码地址
  • 参考文献

1. Problem


一个经典的压缩感知重构问题可以表示为

min ⁡ x   ∣ ∣ x ∣ ∣ 1   s . t .   A x = b + e (1) \min_x\ ||x||_1\ s.t. \ Ax=b+e\tag{1} xmin ∣∣x1 s.t. Ax=b+e(1)

其中, A ∈ R M × N A\in \mathbb R^{M\times N} ARM×N表示观测矩阵, x ∈ R N × 1 x\in \mathbb R^{N\times 1} xRN×1表示待求解信号, b ∈ R M × 1 b\in \mathbb R^{M\times 1} bRM×1表示测量向量, e ∈ R M × 1 e\in \mathbb R^{M\times 1} eRM×1表示测量噪声,其中 M < N M<N M<N。这是一个典型的基于优化算法的压缩感知重构问题,它考虑了信号测量过程中引入的误差。

然而,在实际的使用过程中,通常观测矩阵本身也是存在误差的。在通信或雷达系统中,这种误差可能由时延、多普勒频移等引起,在测量系统中,可能由于观测矩阵的“失配”引起1。该问题在数学上可以表示为

min ⁡ x   ∣ ∣ x ∣ ∣ 1   s . t .   ( A + E ) x = b + e (2) \min_x\ ||x||_1\ s.t. \ (A+E)x=b+e\tag{2} xmin ∣∣x1 s.t. (A+E)x=b+e(2)

其中, E ∈ R M × N E\in \mathbb R^{M\times N} ERM×N表示观测矩阵受到的扰动。传统的压缩感知重构算法2对这一类扰动具有一定的鲁棒性3,但是针对观测矩阵扰动较大的情况,传统的算法可能会失效。因此,针对这种情况,需要设计一种同时考虑测量向量噪声观测矩阵噪声的压缩感知重构算法。

不失一般性,可以先考虑 E E E e e e服从独立同高斯分布的情况,为了尽可能使得两种扰动最小,需要针对优化目标函数添加约束,即

min ⁡ x   λ ∣ ∣ x ∣ ∣ 1 + ∣ ∣ [ E   e ] ∣ ∣ 2 2   s . t .   ( A + E ) x = b + e (3) \min_x\ \lambda||x||_1+||[E\ e]||_2^2 \ s.t. \ (A+E)x=b+e\tag{3} xmin λ∣∣x1+∣∣[E e]22 s.t. (A+E)x=b+e(3)

这是一个总体最小二乘问题1,可以等价为

min ⁡ x   λ ∣ ∣ x ∣ ∣ 1 + ∣ ∣ A x − b ∣ ∣ 2 2 ∣ ∣ x ∣ ∣ 2 2 + 1 (4) \min_x\ \lambda||x||_1+\frac {||Ax-b||_2^2} {||x||_2^2+1}\tag{4} xmin λ∣∣x1+∣∣x22+1∣∣Axb22(4)

具体证明过程可参考4。其中 ∣ ∣ x ∣ ∣ 1 ||x||_1 ∣∣x1是非光滑函数,而 ∣ ∣ A x − b ∣ ∣ 2 2 ∣ ∣ x ∣ ∣ 2 2 + 1 \frac {||Ax-b||_2^2} {||x||_2^2+1} ∣∣x22+1∣∣Axb22是非凸函数,因此无法直接采用梯度下降法进行求解。

针对包含非光滑目标函数的优化问题,近端梯度下降法(Proximal Gradient Descent,PGD)提供了一个求解框架。其核心思想是,将目标函数拆解成光滑函数和不光滑函数两个部分,针对光滑部分可以直接求其梯度,针对不光滑部分则采用近端算子进行近似求解。其几何原理如图所示,第 k k k次迭代时找一个近似函数去逼近原函数,求该近似函数的最优值,再去反推原函数的最优值。

在这里插入图片描述
不妨令

f ( x ) = ∣ ∣ A x − b ∣ ∣ 2 2 ∣ ∣ x ∣ ∣ 2 2 + 1 (5) f(x)=\frac {||Ax-b||_2^2} {||x||_2^2+1}\tag{5} f(x)=∣∣x22+1∣∣Axb22(5)

h ( x ) = λ ∣ ∣ x ∣ ∣ 1 (6) h(x)=\lambda||x||_1\tag{6} h(x)=λ∣∣x1(6)

则原优化问题可重写为

min ⁡ x   f ( x ) + h ( x ) (7) \min_x\ f(x)+h(x)\tag{7} xmin f(x)+h(x)(7)

根据近端梯度法,有

z k = x k − μ k g k (8) z_k=x_k-\mu_kg_k\tag{8} zk=xkμkgk(8)

x k + 1 = p r o x μ k h { z k } = a r g   m i n   { μ k h ( x ) + 1 2 ∣ ∣ z k − x ∣ ∣ 2 2 } (9) x_{k+1}=prox_{\mu_kh} \{z_k\}=arg\ min\ \{\mu_kh(x)+\frac 12||z_k-x||_2^2\}\tag{9} xk+1=proxμkh{zk}=arg min {μkh(x)+21∣∣zkx22}(9)

该优化问题是典型的LASSO问题,利用软阈值函数能够实现快速求解。它的解为

p r o x μ k h { z k } = w t h r e s h ( x k − μ k g k , μ k λ ) (10) prox_{\mu_kh} \{z_k\}=wthresh(x_k-\mu_k g_k,\mu_k \lambda)\tag{10} proxμkh{zk}=wthresh(xkμkgk,μkλ)(10)

其中函数 f ( x ) f(x) f(x) x k x_k xk点的梯度为

g k = 2 ( ∣ ∣ x k ∣ ∣ 2 2 + 1 ) 2 [ ( ∣ ∣ x k ∣ ∣ 2 2 + 1 ) A T ( A x k − b ) − ∣ ∣ A x k − b ∣ ∣ 2 2 x k ] (11) g_k=\frac 2 {(||x_k||_2^2+1)^2} [(||x_k||_2^2+1)A^T(Ax_k-b)-||Ax_k-b||_2^2x_k]\tag{11} gk=(∣∣xk22+1)22[(∣∣xk22+1)AT(Axkb)∣∣Axkb22xk](11)

在进行近端梯度迭代下降的过程中,迭代步长的选择将直接关系到算法收敛的速率。采用基于最速下降步长 μ s , k \mu_{s,k} μs,k和最小化残差步长 μ m , k \mu_{m,k} μm,k的自适应迭代步长,能够加快收敛速率

μ k = { μ m , k μ m , k μ s , k > 1 2 μ s , k − μ m , k 2 μ m , k μ s , k ⩽ 1 2 (12) \mu_k=\begin{cases} \mu_{m,k} & \frac {\mu_{m,k}}{\mu_{s,k}}>\frac 12 \\ \mu_{s,k}-\frac {\mu_{m,k}} 2 & \frac {\mu_{m,k}}{\mu_{s,k}}\leqslant\frac 12 \end{cases}\tag{12} μk={μm,kμs,k2μm,kμs,kμm,k>21μs,kμm,k21(12)

其中,

μ s , k = ∣ ∣ x k − x k − 1 ∣ ∣ 2 2 ( x k − x k − 1 ) T ( g k − g k − 1 ) (13) \mu_{s,k}=\frac {||x_k-x_{k-1}||_2^2} {(x_k-x_{k-1})^T(g_k-g_{k-1})}\tag{13} μs,k=(xkxk1)T(gkgk1)∣∣xkxk122(13)

μ m , k = ( x k − x k − 1 ) T ( g k − g k − 1 ) ∣ ∣ g k − g k − 1 ∣ ∣ 2 2 (14) \mu_{m,k}=\frac {(x_k-x_{k-1})^T(g_k-g_{k-1})} {||g_k-g_{k-1}||_2^2}\tag{14} μm,k=∣∣gkgk122(xkxk1)T(gkgk1)(14)

采用了回溯线搜索来将步长的值限制在其稳定的下降区域中,每次迭代时检查线搜索条件

f ( x k + 1 ) < f ( x k ) + ( x k + 1 − x k ) T g k + 1 2 μ k ∣ ∣ x k + 1 − x k ∣ ∣ 2 2 (15) f(x_{k+1})<f(x_k)+(x_{k+1}-x_k)^Tg_k+\frac 1{2\mu_k}||x_{k+1}-x_k||_2^2\tag{15} f(xk+1)<f(xk)+(xk+1xk)Tgk+2μk1∣∣xk+1xk22(15)

如果该条件不满足,则将 μ k \mu_k μk收缩到原来的 1 2 \frac 12 21并重复计算近端梯度直至满足该条件为止。理论上可以证明,选择的步长小于梯度 g k g_k gk的利普西茨常数的倒数时,条件(15)都能够满足。

2. 仿真结果


测试输入采用随机生成的稀疏序列,序列长度100,稀疏度10,采样率50%。
观测矩阵采用随机高斯矩阵,对照算法采用经典的L1基追踪算法,对观测矩阵和测量向量分别添加-20 dB的高斯噪声,观察两种算法受到噪声的干扰程度。

在这里插入图片描述

从仿真结果可以看到,两种算法均能够恢复出原始信号的大致轮廓。但是基于Proximal Gradient Descent的算法具有更强的抗噪声性能,主要表现为其PSNR相比于L1算法高,且输出信号的平坦区域受到噪声干扰更小。

3. MATLAB算法


clear
close all
M=50;
N=100;
K=10;
%% Generate signal
% x=zeros(N,1);
% ind=randperm(N);
% x(ind(1:K))=randn(K,1);
% A=randn(M,N);% 
% A=A/max(abs(A(:)));% normalized
% x=x/max(abs(x(:)));% normalized
%% load default sensing matrix and signal
load input_dat.mat
snr_A=20;
snr_b=20;
sA=1/(10^(snr_A/10));
sb=1/(10^(snr_b/10));
%% Generate nosie matrix and noise array
E=sA*randn(size(A));
b=(A+E)*x+sb*randn(M,1);
%% signal reconstruction using L1 method and Proximal Gradient Descent method
x0=CS_linprog(A,b);
x1=PGD_TLS(A,b,N,0.01,0.1,10000);
%% error analysis
subplot(211)
plot(x,'*');hold on
plot(x0)
ylim([-1.2 1.2])
title(sprintf('PSNR of L1: %.2f dB',psnr(x0,x)));
subplot(212)
plot(x,'*');hold on
plot(x1)
ylim([-1.2 1.2])
title(sprintf('PSNR of PGD: %.2f dB',psnr(x1,x)));
function x=PGD_TLS(A,b,N,lam,mu0,ni)
AA=A'*A;
Ab=A'*b;
x0=zeros(N,1);
g=-2*Ab;
x=wthresh(-mu0*g,'s',mu0*lam);
y=1/(x'*x+1);
c=y*norm(A*x-b)^2;
for nn=1:ni
    g0=g;
    c0=c;
    g=2*y*(AA*x-Ab-c0*x);
    if (x-x0)'*(g-g0)==0
        mu=mu0;
    else
        mus=((x-x0)'*(x-x0))/((x-x0)'*(g-g0));
        mum=((x-x0)'*(g-g0))/((g-g0)'*(g-g0));
        if mum/mus>.5
            mu=mum;
        else
            mu=mus-mum/2;
        end
        if mu<=0
            mu=mu0;
        end
    end
    while 1
        z=wthresh(x-mu*g,'s',mu*lam);
        y=1/(z'*z+1);
        c=y*norm(A*z-b)^2;
        if c<=c0+(z-x)'*g+norm(z-x)^2/(2*mu)
            break
        end
        mu=mu/2;
    end
    mu0=mu;
    x0=x;
    x=z;
end

4. 源码地址


https://github.com/dwgan/Proximal-Gradient-method-for-Total-Least-Squares-problem

参考文献


  1. Zhu, Hao, Geert Leus, and Georgios B. Giannakis. “Sparsity-cognizant total least-squares for perturbed compressive sampling.” IEEE Transactions on Signal Processing 59.5 (2011): 2002-2016. ↩︎ ↩︎

  2. Chi, Yuejie, et al. “Sensitivity to basis mismatch in compressed sensing.” IEEE Transactions on Signal Processing 59.5 (2011): 2182-2195. ↩︎

  3. Herman, Matthew A., and Thomas Strohmer. “General deviants: An analysis of perturbations in compressed sensing.” IEEE Journal of Selected topics in signal processing 4.2 (2010): 342-349. ↩︎

  4. https://blog.csdn.net/qq_39942341/article/details/126436980 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/658262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Bean 的六种作用域

观前提示:本篇博客演示使用的 IDEA 版本为2021.3.3版本,使用的是Java8(又名jdk1.8) 前端使用VSCode(Visual Studio Code1.78.2) 电脑使用的操作系统版本为 Windows 10 目录 前言 Bean Spring 容器在初始化⼀个 Bean 的实例时&#xff0c;同时会指定该实例的作⽤域。 1. …

chatgpt赋能python:Python怎样能通过值找到键

Python怎样能通过值找到键 Python是一种高级编程语言&#xff0c;它在工业、医疗、科学、财务等多个行业中被广泛使用&#xff0c;是数据科学、人工智能和深度学习等领域的首选语言。在Python编程中&#xff0c;有时候我们需要在字典中根据值查询对应的键&#xff0c;本文将介…

chatgpt赋能python:Python排序算法大全

Python排序算法大全 导言 排序是程序员日常工作中最常见的操作之一。Python提供了许多实现排序算法的库和函数&#xff0c;本文将带您了解这些排序方法。 初级排序算法 冒泡排序 Bubble Sort 冒泡排序是一种简单的排序算法。它通过不断交换相邻的元素&#xff0c;将大的元…

【微服务架构设计和实现】4.2 服务边界的定义和划分

第一章&#xff1a;【云原生概念和技术】 第二章&#xff1a;【容器化应用程序设计和开发】 第三章&#xff1a;【基于容器的部署、管理和扩展】 第四章&#xff1a;【4.1 微服务架构概述和设计原则】 4.2 服务边界的定义和划分 4.2 服务边界的定义和划分4.2.1 什么是服务边…

docker创建Ubuntu,Ubuntu创建桌面环境,本机使用VNC连接

题目&#xff1a;docker创建Ubuntu&#xff0c;Ubuntu创建桌面环境&#xff0c;本机使用VNC连接 文章目录 前言docker创建基于Ubuntu:20.04的容器使用ssh连接容器容器安装桌面环境本机电脑使用VNC连接测试用python来创建的ui能否显示坑参考 前言 为什么我想要用ubuntu的桌面环…

RFID课程要点总结_2 Identification

2. Identification 简单说RFID就是物体上贴tag&#xff0c;用reader上的antenna去读取&#xff0c;这三个是主要组成。 Reader’s function Energy supply: 比如有的标签自身不带能量需要reader提供信号中蕴含的能量 Communication: 最基本的功能&#xff0c;和tag识别&…

Flink CDC、OGG、Debezium等基于日志开源CDC方案对比

先上一张图&#xff0c;后面再慢慢介绍&#xff1a; CDC概述 CDC 的全称是 Change Data Capture &#xff0c;在广义的概念上&#xff0c;只要能捕获数据变更的技术&#xff0c;我们都可以称为 CDC 。我们目前通常描述的CDC 技术主要面向数据库的变更&#xff0c;是一种用于捕…

56、基于51单片机智能医院红外点滴检测输液器报警系统设计(程序+原理图+PCB源文件+参考论文+参考PPT+元器件清单等)

引 言 目前&#xff0c;国际上每年每人的静脉输液量平均为2.5-3.3瓶&#xff0c;就我国而言&#xff0c;每年每人平均输液量8瓶&#xff0c;总量超过100亿瓶&#xff0c;其中每年约有39万人死于输液不良反应 。在如今新冠肺炎疫情持续的情况下&#xff0c;静脉输液仍是临床医学…

chatgpt赋能python:Python中如何选取list13列

Python中如何选取list 1 3列 介绍 对于SEO优化来说&#xff0c;选取适当的数据是至关重要的一步。Python是一门强大的编程语言&#xff0c;可以帮助人们快速而准确地处理数据&#xff0c;进而选择最佳数据进行SEO。在Python中&#xff0c;我们可以使用一些简单的方法来选择li…

kubespray部署kubernetes集群

kubespray部署kubernetes集群 1、kubespray简介 Kubespray 是开源的部署生产级别 Kubernetes 集群的项目&#xff0c;它整合了 Ansible 作为部署的工具。 可以部署在 AWS&#xff0c;GCE&#xff0c;Azure&#xff0c;OpenStack&#xff0c;vSphere&#xff0c;Packet(Bare m…

马原否定之否定观点

事物普遍联系和发展 事物之间的普遍联系的 答案B C考察的是联系的条件性 1.联系对事物的发展有制约和支撑的作用 2.联系的条件可以相互转化 所以我们可以将不利条件转化成有利条件 3.建立联系必须尊重客观规律。 对立统一是事物发展的根本规律、 唯物辩证法揭示了事物发展一…

ELK日志收集系统集群实验

目录 一、实验拓扑 二、环境配置 (一)设置各个主机的IP地址为拓扑中的静态IP&#xff0c;在两个节点中修改主机名为node1和node2并设置hosts文件 1、在虚拟机node1上操作 2、在虚拟机node2上操作 3、测试node1与node2的通联性 三、 安装node1与node2节点的elasticsearch…

大数据Doris(四十四):kafka json 数组格式数据导入到Doris

文章目录 kafka json 数组格式数据导入到Doris 一、创建 Doris 表 二、创建 Kafka topic

[论文笔记]Bidirectional LSTM-CRF Models for Sequence Tagging

引言 本文是论文Bidirectional LSTM-CRF Models for Sequence Tagging的阅读笔记。这篇论文是15年发表的,比上次介绍的那篇还要早。 首次应用双向LSTM+CRF(BI-LSTM-CRF)到序列标注数据集。BI-LSTM-CRF模型可以有效地使用双向输入特征,也因为CRF层可以利用句子级标签信息。…

前端web入门-CSS-day06

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、标准流 二、Flex 布局 组成 主轴对齐方式 侧轴对齐方式 修改主轴方向 弹性伸缩比 弹性盒子换行…

chatgpt赋能python:Python如何优雅地退出程序执行

Python如何优雅地退出程序执行 Python是一种非常强大的编程语言&#xff0c;它易于学习和使用&#xff0c;并拥有许多有用的功能和库。在Python编程中&#xff0c;经常需要退出程序执行。本文将介绍一些Python中退出程序执行的方法&#xff0c;并探讨它们的优缺点。 1. 使用s…

数据库中的SQL是如何执行的?

简介 参考文献&#xff1a;03丨学会用数据库的方式思考SQL是如何执行的 以oracle和MySQL为例&#xff0c;讲解了sql是怎么被执行的&#xff0c;并且对比了执行过程中&#xff0c;oracle和MySQL的异同。 个人感觉&#xff0c;讲解的核心是SQL执行时的缓存机制。 Oracle中的s…

算法刷题-字符串-重复的子字符串

KMP算法还能干这个 459.重复的子字符串 力扣题目链接 给定一个非空的字符串&#xff0c;判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母&#xff0c;并且长度不超过10000。 示例 1: 输入: “abab” 输出: True 解释: 可由子字符串 “ab” 重复两…

计算机网络面试

计算机网络面试 OSI七层模型 七层网络体系结构各层的主要功能: 应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等。表示层:主要负责数据格式的转换,如加密解密、转换翻译、压缩解压缩等。…

Navicat如何连接MySQL

市面上有很多数据库连接工具&#xff0c;比如Navicat、SQLYog、WorkBench等&#xff0c;用的比较多的&#xff0c;比较好用的&#xff0c;还是Navicat。现在我们就来说说Navicat如何连接Mysql,此文仅适用于小白&#xff0c;大神可略过。 1.打开Navicat,点击左上角的【连接】按钮…