压缩感知“Hello World”代码初步学习

本文介绍了压缩感知的基本概念,包括原始信号f与压缩信号y的关系、矩阵A与字典D的区别、测量方式及噪声处理。通过实例解析了如何从随机矩阵与正交变换构建字典,并探讨了在存在噪声时的信号恢复方法以及稀疏度的确定问题。
   压缩感知代码初学
   实现:1-D信号压缩传感的实现
   算法:正交匹配追踪法OMP(Orthogonal Matching Pursuit)  

》几个初学问题

1. 原始信号f是什么?我采集的是原始信号f还是y = Af得到的y?

记原始信号为f,我们在sensor方得到的原始信号就是n*1的信号f,而在receiver方采集到的信号是y。针对y=Af做变换时,A(m*n )是一个随机矩阵(真的很随机,不用任何正交啊什么的限定)。通过由随机矩阵变换内积得到y,我们的目标是从y中恢复f。由于A是m*n(m<n)的,所以原信号f(n*1)信号被压缩到y(m*1)。



2. 有的地方写 y =Ax, 有的地方写 y=Dx,这里A和D只是符号的区别吗?压缩感知问题中的字典是什么?

不是只有符号区别!详见开始我写的参考文献中公式(4)(5),f可以通过矩阵分解(SVD/QR)得到正交矩阵的线性组合,即:

这里ψ是n*n的正交矩阵,x是与ψ内积能够得到f的n*1向量,相当于系数。这里终于出现了稀疏的定义!!!假定x是稀疏的(注意是x而非f)

为什么要把f分解呢?因为A是非常随机的随机矩阵啊!竟然随机!?这样如果A非常稀疏,那么y还能恢复的出来?

对!所以我们要将f分解为正交阵和向量的线性组合。

### 关于压缩感知的相关资源 #### 一、基础概念与入门教程 压缩感知(Compressive Sensing, CS)是一种新兴的数据采样和重建技术,它基于稀疏性和不完全观测的思想。为了更好地理解和应用这一理论,可以从以下几个方面入手: - **初识压缩感知** 可参考文章《初识压缩感知 Compressive Sensing》,该文介绍了压缩感知的核心作用以及基本理念[^1]。 - **深入原理分析** 学习陶哲轩教授关于压缩感知的课程可以更深刻地理解其背后的数学原理和技术细节。 - **实践代码实现** 对应的应用实例可参见《“压缩感知”之“Hello world”》,其中提供了具体的编程案例。 --- #### 二、实际应用中的挑战 尽管压缩感知具有巨大的潜力,在某些场景下的表现可能并不理想。例如,部分实验表明,对于图像压缩的效果往往不如传统方法出色[^2]。因此,在选择具体算法时需谨慎评估适用范围。 --- #### 三、学术论文推荐 以下是几篇重要的压缩感知相关文献供进一步研究使用: 1. **综述类文章** - 焦李成等人撰写的《压缩感知回顾与展望》全面总结了压缩感知的发展历程及其未来方向[^3]。 2. **测量矩阵设计** - 针对常见的测量矩阵构建问题,《浅谈压缩感知(三十二):压缩感知的常见测量矩阵》给出了详细的讨论[^4]。 3. **理论进展概述** - 石光明团队发表的文章《压缩感知理论及其研究进展》涵盖了当前的研究热点和发展趋势。 --- #### 四、工具书与其他参考资料 除了上述提到的内容外,还可以查阅一些经典书籍来补充知识体系: - 《A Mathematical Introduction to Compressive Sensing》 by Simon Foucart and Holger Rauhut. - 《Introduction to Sparse Representation and Compressed Sensing》. 这些材料能够帮助读者建立起完整的理论框架并掌握最新研究成果。 --- ```python import numpy as np def compressive_sensing_example(): """简单演示压缩感知过程""" from scipy.fftpack import dct # 构造随机测量矩阵Φ (M×N) M, N = 50, 100 Phi = np.random.randn(M, N) # 创建稀疏信号x (长度为N),仅有K个非零项 K = 10 indices = np.random.choice(N, size=K, replace=False) x_true = np.zeros((N,)) x_true[indices] = np.random.rand(K)*10 # 获取观察值y = Φ * x y_measured = Phi @ x_true # 使用DCT基作为Ψ进行重构尝试 Psi = dct(np.eye(N), norm='ortho').T A = Phi @ Psi.T # Lasso求解器恢复原始信号 from sklearn.linear_model import Lasso lasso_regressor = Lasso(alpha=0.01, fit_intercept=False) lasso_regressor.fit(A.T, y_measured) x_reconstructed = lasso_regressor.coef_ return x_true, x_reconstructed if __name__ == "__main__": true_signal, reconstructed_signal = compressive_sensing_example() print("True Signal:", true_signal[:10]) print("Reconstructed Signal:", reconstructed_signal[:10]) ``` 此脚本展示了如何利用Python模拟一次简单的压缩感知操作流程。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值