Piek detecteren in MATLAB

MATLAB is een technisch softwarepakket dat gebruikt kan worden voor signaalverwerking en analyse. Een gebruikelijke procedure bij signaalanalyse is piekdetectie, of het vinden van lokale maxima - waarden die groter zijn dan aangrenzende gegevenspunten - binnen een signaal met ruis. Het is meestal nodig om de piekdetectie te beperken tot lokale maxima van een bepaalde breedte -- duur wanneer het signaal zich in het tijdsdomein bevindt -- evenals een bepaalde hoogte of grootte.

Stap 1

Definieer een gegevensbron door gegevens in MATLAB te importeren. Maak bijvoorbeeld een sinusgolf met willekeurige ruis:

mijn_signaal = sin (0:0.1:10) + rand (1.101);

Stap 2

Vind pieken in uw signaal met behulp van de kwadratische interpolatiemethode van "findpeaks()":

[piekwaarde, pieklocatie] = vindpieken (mijn_signaal);

Stap 3

Zoek naar pieken met een minimale hoogte met behulp van de parameter "minpeakheight". De hoogte is een reële waarde scalair die verwijst naar de minimale gegevenswaarde van toegestane pieken:

[peak_value, peak_location] = findpeaks(my_signal,'minpeakheight',2.5);

Stap 4

Zoek naar pieken gescheiden door een minimale afstand met behulp van de parameter "minpeakdistance". De waarde is het minimum aantal indices tussen pieken in de "my_signal" vector, en moet een geheel getal zijn:

[peak_value, peak_location] = findpeaks(my_signal,'minpeakdistance', 5);

Stap 5

Zoek alleen naar pieken boven een bepaalde drempel met behulp van de parameter "drempel". Dit is een reële waarde scalair die verwijst naar het minimaal toegestane verschil tussen piek- en aangrenzende gegevenspunten:

[peak_value, peak_location] = findpeaks(my_signal,'threshold',0.5);

Stap 6

Vind alleen een bepaald aantal pieken met behulp van de parameter "npeaks". De waarde moet een geheel getal zijn:

[peak_value, peak_location] = findpeaks(my_signal,'npeaks', 5);

Sorteer de geretourneerde lijst met pieken met behulp van de parameter "sortstr". Toegestane waarden zijn "ascend", "descend" en "none":

[peak_value, peak_location] = findpeaks(my_signal,'sortstr','ascend');