1、聊一聊
其實(shí)每個(gè)人在無(wú)助的時(shí)候都需要一句"Cry On My Shoulder!" 今天跟大家介紹一種波峰波谷的檢測(cè)方法,不是很難,不過(guò)能夠凸顯數(shù)學(xué)在編程算法中的重要作用。
2、正文部分
波峰波谷用處
對(duì)于信號(hào)波峰波谷識(shí)別在嵌入式領(lǐng)域應(yīng)該是非常廣泛的,因?yàn)榇蟛糠值男盘?hào)都處于一種時(shí)變的狀態(tài),信號(hào)在時(shí)域上處于一種類(lèi)似于正弦波的波動(dòng)狀態(tài)。
比如計(jì)步軟件就是通過(guò)IMU模塊所采集的變化的波形狀態(tài)來(lái)識(shí)別波峰波谷,最終估算你所走過(guò)步數(shù);
上圖顯示了一個(gè)典型的x-, y-和z-測(cè)量模式,對(duì)應(yīng)于一個(gè)跑步者的垂直,向前和側(cè)面加速度。無(wú)論如何佩戴計(jì)步器,至少有一個(gè)軸會(huì)有相對(duì)較大的周期性加速度變化,因此通過(guò)檢測(cè)其波峰波谷等算法即可對(duì)于檢測(cè)步行或跑步的單位周期至關(guān)重要。
還有在電力系統(tǒng)中的交流電壓電流,我們需要通過(guò)檢測(cè)波峰波谷來(lái)確定電壓電流在交流周期中的最大最小值,從而動(dòng)態(tài)調(diào)節(jié)系統(tǒng)參數(shù)來(lái)達(dá)到自適應(yīng)的目的,所以波峰波谷的檢測(cè)是非常有用的。
比較法識(shí)別
常規(guī)的設(shè)計(jì)辦法為比較法 : 其中x表示當(dāng)前采樣點(diǎn)
波峰:f(x) > f(x?1) 且 f(x) > f(x+1)
波谷:f(x) < f(x?1) 且 f(x) < f(x+1) ?
然而這樣識(shí)別對(duì)于沒(méi)有什么噪聲,且每個(gè)采樣點(diǎn)為不同的信號(hào)來(lái)說(shuō)還是合適的,但在嚴(yán)苛的環(huán)境中還需要構(gòu)造更多的判斷條件來(lái)進(jìn)行一些錯(cuò)誤判斷的規(guī)避,終究還是麻煩了一些,并且容易遺漏。
差分識(shí)別
在學(xué)生階段我們就學(xué)習(xí)了導(dǎo)數(shù)的概念,如果一個(gè)函數(shù)一階導(dǎo)數(shù)左右異號(hào),那分別就是波峰或者波谷。而對(duì)于數(shù)字信號(hào)的處理通過(guò)采樣都會(huì)變成離散信號(hào),信號(hào)對(duì)時(shí)間的微分在離散域內(nèi)即為差分。 在進(jìn)行波形識(shí)別之前數(shù)據(jù)采集是必不可少的,其中最重要的是采樣速率和精度,以便從采樣信號(hào)中不失真的恢復(fù)原連續(xù)信號(hào)。(香農(nóng)采樣) 采樣的過(guò)程中由于電子器件的雜訊等,數(shù)據(jù)難免會(huì)引入噪聲,為了簡(jiǎn)化識(shí)別算法一般都會(huì)進(jìn)行濾波處理,比如一些平滑處理等,然后才開(kāi)始波峰波谷識(shí)別。
A、識(shí)別算法過(guò)程
1、獲得采樣點(diǎn)序列
2、進(jìn)行差分處理
3、由于不在乎具體的差分幅值,把所有數(shù)據(jù)歸一到-1,0,1
4、差分值為0的點(diǎn)即為相同點(diǎn),如果使用比較法則峰值檢測(cè)可能失效,便需要更多的條件,而這里我們直接把相同點(diǎn)0置為前一個(gè)非0即可規(guī)避該問(wèn)題。
5、最終Diff再次進(jìn)行差分,-2/+2即為波峰/波谷。
B、參考代碼
1#include2#include 3#defineSAMPLE_MAX20 4#definePV_MAX10 5 6floatSample[SAMPLE_MAX]={1,2,3,4,4,4,5,2,1,0,0,5,1,0,0,1,2,3,4,0}; 7floatSampleDiff[SAMPLE_MAX]={0}; 8 9typedefstruct_tag_FindPV 10{ 11intPos_Peak[PV_MAX];//波峰位置存儲(chǔ) 12intPos_Valley[PV_MAX];//波谷位置存儲(chǔ) 13intPcnt;//所識(shí)別的波峰計(jì)數(shù) 14intVcnt;//所識(shí)別的波谷計(jì)數(shù) 15}SFindPV; 16 17SFindPVstFindPV; 18 19/******************************************** 20*Fuction:initialFindPV 21*Note:初始化相關(guān)數(shù)據(jù) 22*******************************************/ 23voidinitialFindPV(void) 24{ 25intIndex=0; 26 27for(Index=0;Index0) 54SampleDiff[i]=1; 55elseif(Sample[i+1]-Sample[i]0) 56????????????SampleDiff[i]?=?-1; 57????????else 58????????????SampleDiff[i]?=?0; 59????} 60 61????//step?2?:對(duì)相鄰相等的點(diǎn)進(jìn)行領(lǐng)邊坡度處理 62????for(i=?0;?i?=0) 69SampleDiff[i]=1; 70else 71SampleDiff[i]=-1; 72} 73else 74{ 75if(SampleDiff[i+1]>=0) 76SampleDiff[i]=1; 77else 78SampleDiff[i]=-1; 79} 80 81} 82} 83 84//step3:對(duì)相鄰相等的點(diǎn)進(jìn)行領(lǐng)邊坡度處理 85for(i=0;iPos_Peak[pFindPV->Pcnt]=i+1; 90pFindPV->Pcnt++; 91} 92elseif(SampleDiff[i+1]-SampleDiff[i]==2)//波谷識(shí)別 93{ 94pFindPV->Pos_Valley[pFindPV->Vcnt]=i+1; 95pFindPV->Vcnt++; 96} 97} 98} 99 100/******************************************** 101*Fuction:main 102*Note:模擬查找波峰波谷 103*******************************************/ 104intmain(intargc,char*argv[]){ 105 106inti=0; 107 108initialFindPV(); 109 110FindPV(&stFindPV,Sample); 111 112printf("Peak "); 113for(i=0;i
2、最后
當(dāng)然在實(shí)際的項(xiàng)目中為了更加穩(wěn)定的識(shí)別波峰波谷可能會(huì)對(duì)波峰波谷的出現(xiàn)特點(diǎn)進(jìn)行限制,從而進(jìn)一步減少誤識(shí)別,也有許多人使用數(shù)據(jù)擬合的辦法來(lái)識(shí)別波峰波谷,那么識(shí)別的準(zhǔn)確度就與所擬合的函數(shù)有關(guān),通過(guò)數(shù)學(xué)方法對(duì)所擬合函數(shù)進(jìn)行波峰波谷的求解,最終得到信號(hào)的波峰波谷,不過(guò)這樣的擬合過(guò)程對(duì)平臺(tái)的處理能力提出了一定的要求。
審核編輯:劉清
-
嵌入式
+關(guān)注
關(guān)注
5138文章
19521瀏覽量
314587 -
正弦波
+關(guān)注
關(guān)注
11文章
651瀏覽量
56270 -
計(jì)步器
+關(guān)注
關(guān)注
4文章
76瀏覽量
20215
原文標(biāo)題:信號(hào)波峰波谷二階差分識(shí)別算法
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
在labview中如何檢測(cè)到一定時(shí)長(zhǎng)的波峰波谷..
請(qǐng)問(wèn)如何精確計(jì)算這個(gè)電路電源輸出的波峰波谷
請(qǐng)問(wèn)如何解決ADC AD77xx數(shù)據(jù)采集出來(lái)正弦波波峰波谷缺陷問(wèn)題?
基于LabVIEW8.2的信號(hào)處理方法
在DSP平臺(tái)下對(duì)多路交流信號(hào)采樣時(shí)采用的一種異步采樣方法介紹
給大家介紹一種PCB設(shè)計(jì)復(fù)用方法
【Labview】識(shí)別標(biāo)記波峰波谷
一種基于BP網(wǎng)絡(luò)的信號(hào)動(dòng)態(tài)檢測(cè)方法
一種用CPLD實(shí)現(xiàn)視頻信號(hào)運(yùn)動(dòng)檢測(cè)的方法

信號(hào)波峰波谷的用處與檢測(cè)方法及實(shí)戰(zhàn)

概述信號(hào)波峰波谷二階差分識(shí)別算法

評(píng)論