matlab输出波形自动找到波峰波谷,Matlab中利用findpeaks找波峰和波谷

利用 findpeaks 工具箱函數可以找原始波形中的波峰,但是當單周期里出現多個極值,時findpeaks的判斷會將極值也算入。

原波形 為250HZ的正弦波型,

findpeaks 尋找峰值函數pks = findpeaks(data)[pks,locs] = findpeaks(data) ------pks 對應峰值,locs 對應峰值位數[...] = findpeaks(data,'minpeakheight',mph)----mph 設定峰值的最小高度[...] = findpeaks(data,'minpeakdistance',mpd)----mpd 設定兩峰值間的最小間隔數

原始波形

8c7df061f474085a18afae0ed0dcd7ce.png

波峰查找和描繪

>> [maxv,maxl]=findpeaks(m,'minpeakdistance',100); %maxv峰峰值點  maxl:峰峰值點對應的位置   最小間隔=100

>> hold on

>> plot(t,m)                                                   %繪制原波形

>> plot(maxl,maxv,'*','color','R');                %繪制最大值點

e76007a8cd358269f69c3e055911126e.png

通過增加 最小間隔條件 可以過濾掉單周期內的干擾極值          mpb的值 建議取       周期/1.5   具體看自己的波形做調整

波谷查找和描繪

由於findpeaks不帶直接查找波谷,因此需要用些方法來查找,網上的diff方法,不適用於單周期內有干擾極值的情況。

因此我還是采用了findpeaks

首先  將原波形數據 “取反”      m=原始數據(數組類型)

nm=3000-m ;    %  3000是原始數據中的最大值限度

取反后的波形如圖

56cf9567deb3dae20a9485bcf73cf832.png

然后再使用findpeaks 找出取反后的波形中的峰峰值的位置即可

程序:

nm=3000-m(t);% 數組整體減

[minv,minl]=findpeaks(nm,'minpeakdistance',100); %maxv峰峰值點  maxl:峰峰值點對應的位置

hold on

plot(t,m)

plot(minl,m(minl),'*','color','G');                %繪制最大值點

9ae287b27a91ba665313d7f4ba2dde22.png

實現的波谷波形

最后的波峰波谷波形

75b270242fe3fd9f949e541a9b1ae018.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值