一维信号峰值检测Matlab实现
参考论文:https://pdfs.semanticscholar.org/56f1/49e51aa9fb9b0b46412b864839f34701d421.pdf
先使用3点运动均值滤波器处理一维信号,先前向再后向处理。作为例子,这里先生成正弦信号波形图,然后执行3点前向运动均值滤波,再3点均值后向运动滤波。信号S(n)={s1,s2,s3,s4,…,sn}.
x = 0:0.05:50*pi;
row_acc = sin(x);
m = length(row_acc);
row_acc1 = linspace(0,0,m);
row_acc1(1) = row_acc(1);
row_acc1(m) = row_acc(m);
for i=2:m-1row_acc1(i)=(row_acc(i-1) + row_acc(i)+row_acc(i+1))/3;
end
figure;
plot(row_acc1);for i=m-1:-1:2row_acc(i) = (row_acc1(i-1) + row_acc1(i)+row_acc1(i+1))/3;
end
找到局部最小值和局部最大值及其对应的位置,波峰点、波谷点满足:
peaks = linspace(0,0,m);
valleys = linspace(0,0,m);
peakindexs = linspace(0,0,m);
valleyindexs = linspace(0,0,m);
peakindex = 1;
valleyindex = 1;
for i = 2:m-1if row_acc(i) >row_acc(i-1) && row_acc(i)>=row_acc(i+1)peaks(peakindex)=row_acc(i);peakindexs(peakindex)=i;peakindex = peakindex+1;endif row_acc(i) < row_acc(i-1) && row_acc(i)<row_acc(i+1)valleys(valleyindex)=row_acc(i);valleyindexs(valleyindex)=i;valleyindex=valleyindex+1;end
end
计算VPD,VPD(n)表示第n个波谷点的值与第n个波峰点的值的差,VPD用来去掉那些假的波峰点,
计算了VPD之后,搜索VPD,如果满足:
,则这个波峰点是假的,移除。
程序流程如下:
matlab代码:
pcount = peakindex-1;
vcount = valleyindex-1;
peakindices = linspace(0,0,pcount);
for i = 1:pcountpeakindices(i) = peakindexs(i);
endvalleyindices = linspace(0,0,vcount);
for i = 1:vcountvalleyindices(i) = valleyindexs(i);
endfigure;
plot(x, row_acc,'-o', 'MarkerIndices',peakindices,'MarkerFaceColor','red','MarkerSize',5);figure;
plot(x, row_acc,'-s', 'MarkerIndices',valleyindices,'MarkerFaceColor','red','MarkerSize',5);if pcount>2 && vcount>2if peakindexs(1) < valleyindexs(1)peakindex=2;elsepeakindex=1;endvindex=1;
endif peakindex == 2for i = 1:m-1peaks(i)=peaks(i+1);endpcount = pcount-1;pindex=1;
endvpd = linspace(0,0,m);
vpd1 = linspace(0,0,m);
for i=1:pcountvpd(i) = peaks(i) - valleys(i);
enddels = linspace(0,0, pcount);
peakindexs1 = linspace(0,0,pcount);
if pcount > 2lastcount=pcount;curcount = 1;while lastcount ~= curcountlastcount = curcount;del_count = 0;for i = 2:pcount-1if vpd(i) <= 0.7 * (vpd(i-1) + vpd(i)+vpd(i+1)) / 3dels(i)=1;endendcount = 1;for i = 1:pcountif dels(i) ~= 1vpd1(count) = vpd(i); peakindexs1(count) = peakindexs(i);count = count+1;elsedel_count = del_count + 1;dels(i) = 0;endendpcount = pcount - del_count;for i = 1:pcountvpd(i) = vpd1(i); peakindexs(i) = peakindexs1(i);endpeakindexs(pcount+1) = 0;vpd(pcount+1) = 0;indices = linspace(0,0,pcount);for i = 1:pcountindices(i) = peakindexs1(i);endfigure;plot(x, row_acc,'-o', 'MarkerIndices',indices,'MarkerFaceColor','red','MarkerSize',10);curcount = pcount;end
end
一维信号峰值检测Matlab实现相关推荐
- (MATLAB)一维信号峰值检测findpeaks
(MATLAB)一维信号峰值检测findpeaks 基本介绍 findpeaks函数用法 基本用法 特殊用法 其他 by HPC_ZY 一维信号波峰波谷检测,峰值.峰宽.到达时间计算.MATLAB自带 ...
- 【信号】用matlab实现一维信号的高斯滤波
1.从正态分布说起 高斯滤波使用的是高斯函数,即我们熟悉的正态分布的概率密度函数: f(x)=1σ2πexp(−(x−μ)22σ2)f(x)=\frac{1}{\sigma \sqrt{2\pi}} ...
- 利用matlab实现DMD动态模态分解(在一维信号或二维流场矢量中的应用)
利用matlab实现DMD动态模态分解(在一维信号或二维流场矢量中的应用) 0 前言 0.1 特征根的计算与含义 1 DMD的基本思路 2 一维DMD算法 3 二维DMD算法 4 总结 (2020年9 ...
- 利用matlab实现POD分解(在一维信号或二维流场矢量中的应用)
利用matlab实现POD分解(在一维信号或二维流场矢量中的应用) 0 前言 0.1 matlab中特征值计算 0.2 matlab中SVD分解计算 0.3 信号的正交性 1 一维信号POD分解 1. ...
- 【Matlab系列】一维信号/数字图像小波阈值去噪(软阈值,硬阈值,固定阈值)【含Matlab源码】
Date: 2022.4.23 文章目录 前言 0.代码获取方式 1.部分matlab代码 2.一维信号小波阈值去噪效果图 3.数字图像小波阈值去噪效果图 3.1.添加高斯噪声 3.2.添加随机噪声 ...
- 【信号处理】心电信号PQRST峰值检测matlab工具箱
1 简介 一种基于PQRST波位置识别的心电信号峰值检测方法,通过使用一种基于PQRST波位置识别的心电信号峰值检测方法,进一步挖掘出心电波形的特征,利用一种基于PQRST波位置识别的心电信号检测方法 ...
- 一维信号小波阈值去噪 c语言,一维信号小波阈值去噪
描述 1.小波阈值处理基本理论 所谓阈值去噪简而言之就是对信号进行分解,然后对分解后的系数进行阈值处理,最后重构得到去噪信号.该算法其主要理论依据是:小波变换具有很强的去数据相关性,它能够使信号的能量 ...
- C语言实现一维信号小波阙值去噪
实现小波阙值去噪分三个步骤: 1.将源信号分解成系数: 2.根据分解的系数获取阙值: 3.根据阙值对系数进行过滤: 4.将过滤的系数还原成信号,最终的结果就是将源信号过滤后的结果. 我实现的代码主要是 ...
- 步进频雷达的一维距离像matlab仿真
步进频雷达的一维距离像matlab仿真 发射与回波信号模型 距离高分辨原理 仿真分析 不进行步进频高分辨一维距离像 进行步进频高分辨一维距离像 代码 发射与回波信号模型 步进频率信号发射得的是一串 ...
最新文章
- centos设置固定IP方法
- 计算机伦理问题案例分析,基于网络环境的案例教学在《计算机伦理学》中的实践研究...
- C#中处理XML文档的方法
- C语言希尔排序(解析)
- 东南亚下半年做什么产品好?解读Lazadashopee服装类热销及需求品类
- gitblit mysql_CentOS7安装MySQL、Tomcat和GitBlit记录
- SP和Fuction的关系
- “约见”面试官系列之常见面试题之第六十七篇之jsonp原理和实现(建议收藏)
- 结构与算法(04):排序规则与查找算法
- javascript 轮播图(缓存效果)详细篇
- 海思视频监控芯片如何一步步成为行业霸主
- 在Ubuntu20.04(Linux Mint)中同步通达信软件的自选股和画线数据
- java的package怎么用_Java包(Package)的详细用法(转)
- excel表格打印每页都有表头_怎样设置Word表格打印时每页都显示表头?不会的看看这篇教程!...
- 【HNOI2017】大佬-dalao
- Webpack 如何抽离、压缩 CSS 文件?
- python量化羊驼法则
- 互联网业务实战(一)--今日头条文章发布实现
- 2.海康威视-web3.0插件连接摄像头实现预览效果
- XMPP 协议的原理和介绍
热门文章
- google recaptcha v2 and v3
- 山东移动咪咕MG2000_KJ_S905L2B_RTL8822BS_线刷固件包
- latex参考文献bib基本格式_在Latex中使用Bibtex生成参考文献
- SAE 1939学习笔记(一)
- 如何使用endnote软件导入参考文献
- 系统(架构)设计五要素
- 【踩坑笔记】从零开始在Linux和Windows部署安装 ***
- 颜值在线的Mac播放器推荐-IINA
- 一个基于Python数据大屏可视化开源项目
- mysql更新多表sql语句怎么写_MySQL多表updatesql语句总结