压缩感知实验-OMP算法Python实现

  • 一维图信号重建
    • Experiment
  • Result

一维图信号重建

# -*- coding: utf-8 -*-
"""
Created on Wed Sep 23 21:46:43 2020@author: chen
"""
import numpy as npdef Omp(y,A,K):cols=A.shape[1]#传感矩阵A的列数 800res=y #初始化残差r0 值为yindexs=[]#用来保存索引的数组A_c=A.copy()#传感矩阵A的拷贝#进行K次迭代for i in range(0,K):products=[]#用来保存每次迭代产生的内积#对于传感矩阵A中每一列进行计算for col in range(cols):#传感矩阵A第col列与残差的内积    (32,).T*初始残差y(32,)products.append(np.dot(A[:,col].T,res))#获得一个内积 放入products数组#一轮迭代products中有800个值index=np.argmax(np.abs(products)) # 每列计算完成后 在products找最大内积并返回列索引值    indexs.append(index)#将最大列索引值加入索引数组indexs[]#使用索引集在传感矩阵中获得子集inv=np.dot(A_c[:,indexs].T,A_c[:,indexs])#theta=np.dot(np.dot(np.linalg.inv(inv),A_c[:,indexs].T),y)#利用最小二乘估计 计算一次θprint(theta.shape)res=y-np.dot(A_c[:,indexs],theta)#更新残差#迭代8次出来的theta的形状为(8,0)theta_final=np.zeros(800,)#重建theta 利用对应的索引theta_final[indexs]=thetareturn theta_final

Experiment

from PIL import Image
import numpy as np
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
from matplotlib.pylab import mpl
from numpy import sin,cos,pi
import math
import Omp_chen#生成原始信号
K=7;
N=256;
M=64;
f1=50;
f2=100;
f3=200;
f4=400;
fs=800;
x=np.linspace(0,256,fs)
x2=np.linspace(0,30,fs)
y=0.3*cos(2*pi*f1*x)+0.6*cos(2*pi*f2*x)+0.1*cos(2*pi*f3*x)+0.9*cos(2*pi*f4*x);#原始信号x N=800 def GetSparseRandomMtx(M,N,d):Phi=np.zeros((M,N))for col in range(N):indexs=np.arange(M)np.random.shuffle(indexs)Phi[indexs[0:d],col]=1return Phidef GetGaussianMtx(M,N):return np.random.randn(M,N)
np.random.seed(1)
#Gaussian=GetSparseRandomMtx(32,800,10)
Gaussian=GetGaussianMtx(65,800) #M=32 N=800 Φ高斯感知矩阵 (32,800) #65实验结果较好sampled=np.dot(Gaussian,y)#y=Φx用感知矩阵采样后的结果y sampled_fft=fft(y)
sampled_fft=np.abs(sampled_fft)
x_f=np.arange(800)
#plt.title("FFT")
#plt.plot(x_f,sampled_fft)Psi=fft(np.eye(800,800))/np.sqrt(N)#傅里叶稀疏基Ψ (800,800)
A=np.dot(Gaussian,Psi)# 传感矩阵A =ΦΨ (32,800)#Omp输入sampled,A,稀疏度K
K=8 #原始信号的稀疏程度theta_final=Omp_chen.Omp(sampled,A,K)y_r=np.dot(Psi,theta_final)plt.figure(figsize=(4,2))
plt.title("Omp with GaussianMtx sampled_rate= 65:800")
plt.plot(x[0:100],y[0:100],"b")
plt.plot(x[0:100],y_r[0:100],"r", marker='o')
plt.legend(["Original_Signal y","Recovered_Signal y_r"])
plt.show()

Result

压缩感知 热身实验 OMP算法Python实现(详细代码注释)相关推荐

  1. python乘法表代码注释_Python统计python文件中代码,注释及空白对应的行数示例【测试可用】...

    本文实例讲述了Python实现统计python文件中代码,注释及空白对应的行数.分享给大家供大家参考,具体如下: 其实代码和空白行很好统计,难点是注释行 python中的注释分为以#开头的单行注释 或 ...

  2. python语言的注释语句引导符不包括什么_以下选项中,哪一个是Python语言中代码注释使用的符号?________...

    [单选题]关于 Python 语句 P = –P,以下选项中描述正确的是________ [多选题]Python的数字类型包括( ) [多选题]Python中的注释符有哪几种?( ) [判断题]已知 ...

  3. (信贷风控九)行为评分卡模型python实现(详细代码+注释+讲解)

    (九)行为评分卡模型python实现(详细代码+注释+讲解) 浅谈行为评分卡 我们知道行为评分卡只要用在信贷的贷中环节,贷中指的是贷款发放之后到期之前的时间段,其实行为评分卡和申请评分卡在实现上没有太 ...

  4. python语言中代码注释可以使用_以下选项中,Python语言中代码注释使用的符号是: ( )...

    以下选项中,Python语言中代码注释使用的符号是: ( ) 答:# 中国古代舞蹈灿烂辉煌,但在理论研究方面却相对薄弱,这种情况直到明清都无显著改变. 答:错误 Photoshop中下列工具中不可以定 ...

  5. 沙威 matlab 压缩感知,压缩感知正交匹跟踪算法(OMP)代码实现之一维连续信号的求解...

    """一维连续向量压缩感知的实现(正交匹配跟踪算法)测量数M>=K*log(N/K),K是稀疏度,N信号长度,可以近乎完全重构本篇代码是利用香港大学电子工程系的沙威 ...

  6. 视频编码技术---压缩感知编码---匹配跟踪算法

    转自https://blog.csdn.net/rainbow0210/article/details/53386695 压缩感知近些年在学术界非常火热,在信号处理领域取得了很多非常不错的成果. 博主 ...

  7. python整段代码注释-Python中注释(多行注释和单行注释)的用法实例

    Python中注释(多行注释和单行注释)的用法实例 发布时间:2020-09-30 23:18:32 来源:脚本之家 阅读:97 前言 学会向程序中添加必要的注释,也是很重要的.注释不仅可以用来解释程 ...

  8. 【OMP信道估计】基于OMP压缩感知的信道估计算法的MATLAB仿真

    1.软件版本 MATLAB2021a 2.本算法理论知识 3.核心代码 clc; clear; close all; warning off; addpath 'func\'CYC = 20; for ...

  9. 用python求期望_Python——EM(期望极大算法)教学(附详细代码与注解)

    今天,我们详细的讲一下EM算法. 前提准备 Jupyter notebook 或 Pycharm 火狐浏览器或谷歌浏览器 win7或win10电脑一台 网盘提取csv数据 需求分析 实现高斯混合模型的 ...

  10. Python——EM(期望极大算法)实战(附详细代码与注解)(二)

    开始之前 各位朋友,大家好!针对上回讲的EM算法,有朋友反馈还是没弄清楚,今天,我再来详细的讲一下EM算法.请耐心食用本教程,滴滴滴~,上车! 前提准备 Jupyter notebook 或 Pych ...

最新文章

  1. wxWidgets:wxPropertyGridManager类用法
  2. boost::interprocess::bufferstream用法的测试程序
  3. Android使用C/C++来保存密钥
  4. python hexdigest,Java方法,可以为Hex中的HMAC-SHA256提供与Python方法相同的输出
  5. Spring的基本使用
  6. mysql8.0.20 64位安装教程_MySQL8.0.20压缩版本安装教程图文详解
  7. saltstack 远程执行之返回写入到mysql
  8. paip.得到程序运行实际命令
  9. matlab 文本分析工具,MATLAB,Simulink. - Text Analytics , 文本分析工具箱-鈦思科技
  10. 使用WSS的Lists.UpdateListItems()方法之被截断的CAML
  11. python while循环详解
  12. 机器学习笔记之基础概念
  13. 关于VM开启黑屏的解决方法
  14. 【原】iOS开发进阶(唐巧)读书笔记(二)
  15. html5用语义元素做旅游网站,HTML5语义元素
  16. 投影仪和电视哪个更好?一文科普详细比较
  17. c51单片机万年历模拟,12864LCD屏显示实时温度与时间
  18. macos 切换账户_如何在macOS上设置访客用户帐户
  19. 目标框检测中准确率、召回率、AP、mAP计算原理及代码
  20. 遇到不支持的 Oracle 数据类型 USERDEFINED。

热门文章

  1. Ubuntu16.04安装QQ(for linux)
  2. 锐起无盘服务器内存盘,锐起及网众系列使用无盘+内存盘的新方法
  3. Android学习视频集合
  4. TCPIP详解三次握手和四次挥手
  5. 《tcpip详解卷一》:150行代码拉开协议栈实现的篇章
  6. Reinforcement Learning[论文合集]
  7. docker安装jdk1.8
  8. 2019年全国程序员统一考试,现在开始!
  9. 身份证OCR识别SDK
  10. 广联达深思6代锁_广联达|新版加密锁驱动使用文档