Küsimus:
Kas Arduino jaoks on signaali silumisraamatukogusid?
asheeshr
2014-02-16 19:57:38 UTC
view on stackexchange narkive permalink

Töötan mobiilirobotiga, mida juhitakse traadita 2,4 GHz ühenduse kaudu. Vastuvõtja on ühendatud Arduino Unoga, mis on pardal peamine kontroller. Vastuvõtjast tulev kõige kriitilisem (ja peamine) sisendkanal tekitab väga mürarikka signaali, mis toob kaasa palju väiksemaid muudatusi ajamite väljundis, kuigi neid pole vaja.

 enter image description here Joonistage Arduino sisend 30 sekundi intervalliga. 

Otsin teeke, mis suudaksid tõhusalt siluda. Kas Arduino (Uno) jaoks on saadaval signaali silumise teeke?

Ma ei tea, kas leiate selliseid teeke, kuid kardan, et need võivad Arduino jaoks vajada palju protsessori võimsust. Pigem valin võimaluse korral elektroonilise lahenduse (madalpääsfilter).
Olen selles küsimuses jfpoilpretiga. Ma arvan, et vajate elektroonilist lahendust. Prooviksin stabiliseerimiskondensaatorit (lihtne madalpääsfilter). Eeldan, et kasutate ADC-kanalit, nii et peaksite selle kanali korki maapinnale panema. Alustage väärtustest umbes 100 pf ja töötage sealt üles.
Neli vastused:
#1
+9
asheeshr
2014-03-07 20:14:24 UTC
view on stackexchange narkive permalink

Microsmooth on kergekaaluline signaalide silumise raamatukogu, mida praegu arendan.

Sellega tegeletakse endiselt ja eesmärk on muuta see mälu mõttes kergeks ja kiireks . Kogu pakub silumiseks mitu filtrit:

  • lihtne liikuv keskmine
  • eksponentsiaalne liikuv keskmine
  • kumulatiivne liikuv keskmine
  • Savitzky Golay Filtreeri
  • Ramer Douglas Peckeri algoritm
  • Kalmogorovi Zurbenko filter

Teegi kasutamiseks laadige see alla ja lisage see lähtekataloogi. Lisaks lisage oma lähtefailile järgmine rida:

  #include "microsmooth.h"  
Tere, mul on probleeme teie teegi kasutamisega. Kas te ei kasutaks oma kogu importimiseks "Import Library" ... Proovisin allika lihtsalt oma .ino kausta kopeerida, kuid näen vigu automicrosmooth.h puudumisel, seeriat pole määratletud ja puudub; Kas see raamatukogu töötab endiselt? Aitäh
@waspinator Vabandust selle pärast. Parandas vead. Aitäh tagasiside eest!
#2
+7
David Cary
2014-03-26 22:37:56 UTC
view on stackexchange narkive permalink

Ma arvan, et näen teie mürarikkas signaalis palju ühe prooviga müra naelu.

Mediaanfilter aitab ühe prooviga müra naastudest vabaneda paremini kui ükski lineaarne filter. (See on parem kui mis tahes madalpääsfilter, liikuv keskmine, kaalutud liikuv keskmine jne. selle reageerimisaja ja võime ignoreerida selliseid ühe valimi müra piikide kõrvalekaldeid).

Tegelikult on signaale palju - Arduino pehmendavad teegid, millest paljud sisaldavad mediaanfiltrit.

signaali siluvad teegid saidil arduino.cc:

signaali silumiseks mõeldud teegid githubis:

Kas teie robotis toimiks midagi sellist? (Mediaan-3 nõuab väga vähe protsessori võimsust ja seega kiire):

  /*median_filter.ino2014-03-25: alustas David Cary * / int median_of_3 (int a, int b, int c) {int the_max = max (max (a , b), c); int the_min = min (min (a, b), c); // asjatult tark kood int the_median = the_max ^ the_min ^ a ^ b ^ c; return (the_median);} int uusim = 0; int viimane = 0; int vanim = 0; kehtetu seadistus () {Serial.begin (9600); // loe esimene väärtus, lähtesta sellega. vanim = juhuslik (200); hiljutine = vanim; uusim = hiljutine; Serial.println ("mediaanfiltrinäide:");} void loop () {
// viska vanim väärtus ja nihkub uusimasse väärtus vanim = hiljutine; hiljutine = uusim; uusim = juhuslik (200); Serial.print ("uus väärtus:"); Serial.print (uusim, DEC); int mediaan = mediaan_of_3 (vanim, viimane, uusim); Serial.print ("silutud väärtus:"); Seeriaprint (mediaan, DEC); Serial.println (""); viivitus (5000);}  
#3
+4
TheDoctor
2014-02-16 20:45:56 UTC
view on stackexchange narkive permalink

Kas olete proovinud madalpääsfiltrit? Leidsin näite siit ja teise siit.

Mõlemal teegil on teie valitud analoogandurilt loetavate andmete loend, mis on keskmistatud. Iga uus anduri väärtus lisatakse loendisse ja viimane visatakse välja järgmiselt:

  List: 3 4 3 3 4 3 5 3 2 3 4 3 lisatud uus lugemine. vana välja visatud / - / - Loend: 5 3 4 3 3 4 3 5 3 2 3 4 loendi keskmine  
Päris palju, mida teeb lihtne [FIR-filter] (https://et.wikipedia.org/wiki/Finite_impulse_response) kõigi kraaniväärtustega, mis on seatud väärtusele 1. Puudutuste väärtustega vehkimine võib signaali veelgi parandada, kuid nõuab kõrgemat matemaatikat.
Märkus. Teine link arvutab [kumulatiivse liikuva keskmise] (http://en.wikipedia.org/wiki/Moving_average#Cumulative_moving_average), mis pole praktiline valik ajami juhtimiseks, eriti see, mis võib hõlmata sagedast käivitamist ja peatamist. Silutud signaal jälgib tegeliku signaali tippväärtust alati üsna varuga.
#4
+2
akellyirl
2014-02-16 22:34:31 UTC
view on stackexchange narkive permalink

Saate seda digitaalselt filtreerida madalpääsfiltri abil:

  int valueFilt = (1-0,99) * väärtus + 0,99 * valueFilt;  

Katkestussageduse muutmiseks muutke 0,99 (lähemal väärtusele 1,0 on madalam sagedus). Selle väärtuse tegelik avaldis on exp (-2 * pi * f / fs), kus f on soovitud piirsagedus ja fs on sagedus, mille põhjal andmeid proovitakse.

Veel üks tüüpi "digitaalne filter" "on sündmuste filter. See töötab hästi andmetega, millel on kõrvalarvud; nt. 9,9,8,10,9,25,9. Sündmuse filter tagastab kõige sagedasema väärtuse. Statistiliselt on see režiim.

Statistilisi keskmisi, nagu Keskmine, Režiim jne. Saab arvutada Arduino keskmise kogu abil.

Näide on võetud Arduino teegi leht viitas:

  #include <Average.h> # define CNT 600int d [CNT]; void setup () {Serial.begin (9600);} void loop () {int i; for (i = 0; i<CNT; i ++) {d [i] = juhuslik (500); } Serial.print ("keskmine:"); Seeriaprint (keskmine (d, CNT), DEC); Serial.print ("Režiim:"); Serial.print (režiim (d, CNT), DEC); Serial.print ("Max:"); Seerianumber. (Maksimaalne (d, CNT), DEC); Serial.print ("Min:"); Seeriaprint (minimaalne (d, CNT), DEC); Serial.print ("Standardhälve:"); Seeriaprint (stddev (d, CNT), 4); Serial.println (""); Serial.println (""); viivitus (5000);}  
Pange tähele, et see on väga aeglane, kuna see hõljub hõlpsasti ja tagasi.


See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...