利用 findpeaks 工具箱函數可以找原始波形中的波峰,但是當單周期里出現多個極值,時findpeaks的判斷會將極值也算入。
原波形 為250HZ的正弦波型,
findpeaks 尋找峰值函數pks = findpeaks(data)[pks,locs] = findpeaks(data) ------pks 對應峰值,locs 對應峰值位數[...] = findpeaks(data,'minpeakheight',mph)----mph 設定峰值的最小高度[...] = findpeaks(data,'minpeakdistance',mpd)----mpd 設定兩峰值間的最小間隔數
原始波形
波峰查找和描繪
>> [maxv,maxl]=findpeaks(m,'minpeakdistance',100); %maxv峰峰值點 maxl:峰峰值點對應的位置 最小間隔=100
>> hold on
>> plot(t,m) %繪制原波形
>> plot(maxl,maxv,'*','color','R'); %繪制最大值點
通過增加 最小間隔條件 可以過濾掉單周期內的干擾極值 mpb的值 建議取 周期/1.5 具體看自己的波形做調整
波谷查找和描繪
由於findpeaks不帶直接查找波谷,因此需要用些方法來查找,網上的diff方法,不適用於單周期內有干擾極值的情況。
因此我還是采用了findpeaks
首先 將原波形數據 “取反” m=原始數據(數組類型)
nm=3000-m ; % 3000是原始數據中的最大值限度
取反后的波形如圖
然后再使用findpeaks 找出取反后的波形中的峰峰值的位置即可
程序:
nm=3000-m(t);% 數組整體減
[minv,minl]=findpeaks(nm,'minpeakdistance',100); %maxv峰峰值點 maxl:峰峰值點對應的位置
hold on
plot(t,m)
plot(minl,m(minl),'*','color','G'); %繪制最大值點
實現的波谷波形
最后的波峰波谷波形