1-D信号压缩传感的实现(正交匹配追踪法Orthogonal Matching Pursuit)附matlab代码

简介: 1-D信号压缩传感的实现(正交匹配追踪法Orthogonal Matching Pursuit)附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

压缩感知(Compressed sensing,CS)技术是近几年出现的一种新兴的信号采样和压缩技术,基于该理论所获得的原始信号采样值,不仅数量大大低于基于传统的Nyquist准则的采样值,而且CS技术还具有对未知信号边感知边压缩的特性.重构算法的设计是CS技术的核心,成为学者研究的重点.本文在对国内外已经出现的重构算法进行系统地研究后,在深入地研究了贪婪追踪算法和其重构模型的基础上,给出了正交匹配追踪(OrthogonalMatching Pursuit,OMP)类算法的基本原理.

⛄ 代码

%  1-D信号压缩传感的实现(正交匹配追踪法Orthogonal Matching Pursuit)

%  测量数M>=K*log(N/K),K是稀疏度,N信号长度,可以近乎完全重构


%  参考文献:Joel A. Tropp and Anna C. Gilbert

%  Signal Recovery From Random Measurements Via Orthogonal Matching

%  Pursuit,IEEE TRANSACTIONS ON INFORMATION THEORY, VOL. 53, NO. 12,

%  DECEMBER 2007.


clc;clear


%  1. 时域测试信号生成

K=8;      %  稀疏度(做FFT可以看出来),在频率域上只有7个尖峰,说明稀疏度为7

N=256;    %  信号长度

M=64;     %  测量数(M>=K*log(N/K),至少40,但有出错的概率)  ---压缩的目的已经达到了,我在存储的时候就不必把采集到的所有点都存起来了,

         %  只需要存储M个点就能够恢复出N个点的x

f1=50;    %  信号频率1

f2=100;   %  信号频率2

f3=200;   %  信号频率3

f4=400;   %  信号频率4

fs=6400;   %  采样频率

ts=1/fs;  %  采样间隔

Ts=1:N;   %  采样序列

x=0.3*cos(2*pi*f1*Ts*ts)+0.6*cos(2*pi*f2*Ts*ts)+0.1*cos(2*pi*f3*Ts*ts)+0.9*cos(2*pi*f4*Ts*ts);  %  完整信号,由4个信号叠加而来


huty=fft(x);

figure;

subplot(311);

plot(abs(huty))

title('原始信号的FFT');

legend('在频域观测稀疏度k=8')

%  2.  时域信号压缩传感

Phi=randn(M,N);                                   %  测量矩阵(高斯分布白噪声)64*256的扁矩阵,Phi也就是文中说的D矩阵


%经过这个实现压缩:将采样得到的数据与一个随机高斯白噪声相乘,进行降维压缩

y=Phi*x.';                                        %  获得线性测量 ,s相当于文中的y矩阵


%  3.  正交匹配追踪法重构信号(本质上是L_1范数最优化问题)  OMP算法

%匹配追踪:找到一个其标记看上去与收集到的数据相关的小波;在数据中去除这个标记的所有印迹;不断重复直到我们能用小波标记“解释”收集到的所有数据。


m=2*K;                                            %  算法迭代次数(m>=K),设x是K-sparse的

Psi=fft(eye(N,N))/sqrt(N);                        %  傅里叶正变换矩阵,取转置就是傅里叶反变换矩阵


%huty1=huty*Psi';

%figure

%plot(real(huty1));

T=Phi*Psi';                                       %  恢复矩阵(测量矩阵*正交反变换矩阵)


hat_y=zeros(1,N);                                 %  待重构的谱域(变换域)向量                    

Aug_t=[];                                         %  增量矩阵(初始值为空矩阵)

r_n=y;                                            %  残差值


for times=1:m;                                    %  迭代次数(有噪声的情况下,该迭代次数为K)

   for col=1:N;                                  %  恢复矩阵的所有列向量

       product(col)=abs(T(:,col)'*r_n);          %  恢复矩阵的列向量和残差的投影系数(内积值)

   end

   [val,pos]=max(product);                       %  最大投影系数对应的位置,即找到一个其标记看上去与收集到的数据相关的小波

   Aug_t=[Aug_t,T(:,pos)];                       %  矩阵扩充    

   

   T(:,pos)=zeros(M,1);                          %  选中的列置零(实质上应该去掉,为了简单我把它置零),在数据中去除这个标记的所有印迹

   %^(-1)对矩阵来讲是求逆。

   aug_y=(Aug_t'*Aug_t)^(-1)*Aug_t'*y;           %  最小二乘,使残差最小


   r_n=y-Aug_t*aug_y;                            %  残差

   pos_array(times)=pos;                         %  纪录最大投影系数的位置

end

hat_y(pos_array)=aug_y;                           %  重构的谱域向量

hat_x=real(Psi'*hat_y.');                         %  做逆傅里叶变换重构得到时域信号


%  4.  恢复信号和原始信号对比

%figure(1);

%hold on;

subplot(313);

%figure

plot(hat_x,'k.-')%  重建信号

legend('重建信号')

subplot(312);

%figure

plot(x,'r')                                       %  原始信号

legend('原始信号')

norm(hat_x.'-x)/norm(x)                           %  重构误差

⛄ 运行结果

⛄ 参考文献

[1] 杨真真, 杨震, 孙林慧. 信号压缩重构的正交匹配追踪类算法综述[J]. 信号处理, 2013, 29(4):11.

[2] 毛本清. 基于正交双向小波语音基频信号数据压缩与MATLAB实现[J]. 赤子, 2017, 000(015):159-160.

[3] 姚远, 梁志毅. 基于压缩感知信号重建的自适应空间正交匹配追踪算法[J]. 计算机科学, 2012.

[4] 杨良龙. 压缩感知中信号重建算法和确定性测量矩阵研究[D]. 南京邮电大学, 2013.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
3天前
|
算法
基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真
本项目基于梯度流的扩散映射卡尔曼滤波算法(GFDMKF),用于信号预处理的MATLAB仿真。通过设置不同噪声大小,测试滤波效果。核心代码实现数据加载、含噪信号生成、扩散映射构建及DMK滤波器应用,并展示含噪与无噪信号及滤波结果的对比图。GFDMKF结合非线性流形学习与经典卡尔曼滤波,提高对非线性高维信号的滤波和跟踪性能。 **主要步骤:** 1. 加载数据并生成含噪测量值。 2. 使用扩散映射捕捉低维流形结构。 3. 应用DMK滤波器进行状态估计。 4. 绘制不同SNR下的轨迹示例。
|
2月前
|
运维 算法
基于Lipschitz李式指数的随机信号特征识别和故障检测matlab仿真
本程序基于Lipschitz李式指数进行随机信号特征识别和故障检测。使用MATLAB2013B版本运行,核心功能包括计算Lipschitz指数、绘制指数曲线、检测故障信号并标记异常区域。Lipschitz指数能够反映信号的局部动态行为,适用于机械振动分析等领域的故障诊断。
|
5月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
245 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
5月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
146 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
机器学习/深度学习 算法
基于心电信号时空特征的QRS波检测算法matlab仿真
本课题旨在通过提取ECG信号的时空特征并应用QRS波检测算法识别心电信号中的峰值。使用MATLAB 2022a版本实现系统仿真,涵盖信号预处理、特征提取、特征选择、阈值设定及QRS波检测等关键步骤,以提高心脏疾病诊断准确性。预处理阶段采用滤波技术去除噪声,检测算法则结合了一阶导数和二阶导数计算确定QRS波峰值。
|
5月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
114 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
8月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
8月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
8月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)

热门文章

最新文章