Mi a jel frekvenciája? (solution needed)

Greg sez:

van egy periodikus jelem amit folyamatosan mintavételezek. ebben kellene megnéznem mi a jel frekvenciája. erre kellene egy egyszerű algoritmus, hogy megtaláljam a maximumokat, aztán a két csúcs közötti idő alapján már ugye megvan a frekcencia… mezei treshold-ot nem akarok használni, mert különböző amplitúdójú jelek frekvenciáját is meg kell tudni mondani.

és persze legyen egyszerű, mert egyrészt fel kell fognom :) másrészt mikrokontrollerben kell megoldani a feladatot wiring nyelven. :)

Értem a problémát! Emberek! Tanuljunk! Hogy kell megoldani ezt?

Annyit már gyorsan kiwikiztem, hogy a mikrokontroller egy baromi egyszerű és olcsó integrált CPU, vagyis nem csak a processzor, hanem némi memória (RAM, ROM, Flash) és input/output interfészek is van benne, ami mindenféle egyszerű felhasználásra alkalmazható. Keveset fogyaszt, olcsó, legtöbb alkalmazáshoz remek. Példák: távirányítók, motor vezérlő rendszerek, irodai eszközök, játékok. Érdekes adat:

About 55% of all CPUs sold in the world are 8-bit microcontrollers. According to Semico, Over 4 billion 8-bit microcontrollers were sold in 2006.

Az most nem érdekes, hogy Greg mire akarja használni a projektet, nyilvánvalóan egy csapásszámlálót akar építeni, illetve egyszerűbben mondva, faszkorbácsot.

Namasté.

update: Greg adott egy grafikont is, illetve néhány további komment előjön a hozzászólás folyamban.

az ekg nagyon jó hasonlat, ezért mezei szélsőérték vizsgálat nem elegendő. csináltam egy mintát, a wiimote -ot végigtologatva a nappali padlóján, kicsit gyorsítva menet közben. ebben kellene a 6 csúcsot megtalálni algoritmikusan, illetve mindig csak az utolsó kettő az érdekes.

(…)

kérdeztétek a platformot: Arduino, open source embedded hardware. Én a kisebb fogyasztású, méretű változatot tervezem használni, ami 8MHz -en ketyeg. 14 általános, digitális I/O láb, 6 analóg bemenet amik közül tetszőleges számú digitális kimenetként is üzemelhet. 1KB RAM, 512byte eeprom… 40mA áramfelvétel.

27 Responses to “Mi a jel frekvenciája? (solution needed)”

  1. Gravatar Icon 0 TBS

    Periodikus jelnél (frekvencia, ugye) a küszöb is működik akármilyen amplitúdó mellett… ;)

    Kevés az infó. Mérési tartomány, mérendő jelalak, stb.

    “Amit nem lehet megírni assemblyben, azt nem lehet megírni!”

    Amúgy nem csúcsokat keresnék (érdekel a MÉRETE..?), hanem megfelelő analóg jelformálás után az AD folyam előjelváltásait… Stb.

  2. Gravatar Icon 1 Kretusz

    oszcilloszkóp + subler + papír, ceruza

  3. Gravatar Icon 2 lipilee

    elolvasod rajta a számot, aztán kinézed katalógusból.

  4. Gravatar Icon 3 tfe

    Eloszor is meg kell hatarozni a legnagyobb merendo frekvenciat (megbecsulni, hogy kb mennyi lesz), a mintavetelezes frekvenciajat ennek megfeleloen kell mevalasztani (van vmi keplet amire nem emlekszem mar :)

    Pontos freki meghatarozashoz egy furier analizis kell, google az algoritmusra. Nem lesz egyszeru… Viszont ha valamilyen ismert kontrollerrel dolgozik Greg akkor tobb mint valoszinu hogy fog kesz kodot talalni a problemara, amit csak kicsit hekkelni kell. (nepszeruenk pl. a PIC, Atmel etc.)

    Mikrokontroller: annyiban kulonbozik egy CPU-tol, hogy memoria (data+code) illetve portok vannak egybetokozva a CPU-val. A “baromi egyszeru CPU” nem igazan fedi a valosagot :) Az ar meg relativ, vannak baromi draga kontrollerek is.

  5. Gravatar Icon 4 tfe

    PS: legegyszerubb keresni egy villanymernokot, aki Háréből/Jelekből penge volt az egyetemen, es tud segiteni neked. Nem rocket science, de azert nem is egy HelloWorld!

  6. Gravatar Icon 5 tfe

    PS2: Egy DSP-vel (Digital Signal Processor) lehet hogy egyszerubb lenne megoldani a feladatot, azokat erre talaltak ki.

    Van egy ismerosom aki uzemeltet egy (magyar) levlistat a temaban (mindenfele mikrokontroller programozas es egyeb elektronika) Ott biztosan lesz valaki aki tud segiteni. Ha erdekel dobj egy mailt, utananezek hogy lehet feliratkozni.

  7. Gravatar Icon 6 Sandokan
  8. Gravatar Icon 7 TBS

    DFT? DSP? Mit vízionáltok Ti itt épp..? Ez már pont “rocket science”… :D

    Az infó továbbra is kevés.

  9. Gravatar Icon 8 Zsolt

    Lehet valóban azt is csinálni, hogy a maximumokat számolod, de az csak impulzus-jellegű jelalaknál jó, amúgy félrevezető lehet.

    A politikailag korrekt megoldás az FFT, azaz gyors Fourier transzformáció. Ehhez persze megfelelően kell mintavételezni. Ha jól emlékszem az aliasingot úgy lehet elkerülni (ami egy evil thing lenne), hogy ha mondjuk 0 és 10 Hz között akarod az FFT-t, akkor minimum 20Hz -el mintavételezel.

  10. Gravatar Icon 9 initram5

    Egyedül a faszkorbácsot értettem.

  11. Gravatar Icon 10 mazsi

    szerintem elso korben nyugodtan hasznalj egyszeru threshold-ot:
    - ha a jeled bipolaris, akkor a kuszobszint lehet 0
    - ha nem az, de az alapvonal stabil, akkor a kuszobszintet tedd picit a fele
    - ha ez sem igaz, de az alapvonal csak lassan maszik, akkor a kuszobot allitsd a jel atlagertekere (mondjuk nehany [tiz] periodusidore szamolva)
    - ha meg ez sem igaz, akkor lehet, hogy egy microcontroller nem eleg

    ha zajos a jel, akkor esetleg erdemes egy moving average-et tenni ra (par mintat hasznalva).

  12. Gravatar Icon 11 Isti

    Zsoltnal mintavetelezes otos, najkviszt tétel.

  13. Gravatar Icon 12 turista

    Szerintem Nyquist-Shannon :) , mert a “sima” Nyquist-tétel csak a PI/periódusidőre mondja ki a mintavételi frekvencia minimumát.

  14. Gravatar Icon 13 greg

    Küldtem Józsinak linket a táblázatokhoz, illetve a grafikonhoz amin látszik kb milyen a jel. Annyit kell tudni, hogy egy olimpikon kajakos sprintben 100-130 csapást produkál percenként. Ez a alapján a mintavételi frekvencia 100-120Hz körül lesz.

    Mint az a grafikonon is látszik, az eredeti jel elég zajos, ezért csináltam két szűrőt (mozgóátlag, IIR szűrő) és az látszik, nagyon hasonló az eredő jel hasznossága, ezért maradok a mozgóáltagnál, mert azt kevesebb clock-ból, processzor műveletből meg lehet oldani.

  15. Gravatar Icon 14 greg

    Ja és kérdeztétek a platformot: Arduino, open source embedded hardware. Én a kisebb fogyasztású, méretű változatot tervezem használni, ami 8MHz -en ketyeg. 14 általános, digitális I/O láb, 6 analóg bemenet amik közül tetszőleges számú digitális kimenetként is üzemelhet. 1KB RAM, 512byte eeprom… 40mA áramfelvétel.

  16. Gravatar Icon 15 Ger

    Ez egy Atmel kontrolleres struktúra (egy kis környezet, mint a basic-stamp), ráadásul nem is egyszerű mikrokontrollerekkel. Lehet, hogy jobban jársz, ha valami célhardvert illesztesz ehhez (DSP vagy FFT).
    Esetleg csinálsz egy célharvert (trigger, számláló, komparátor, soksikert :-) )

    Ha még nem kötelezted el magad, akkor nézzél egyszerűbb dolgot. Nekem az INTEL kontroller már bonyolult volt (túl sok címzés, túl sok regiszter), szerény Assembly ismereteimhez.
    A PIC ilyen szempontból szimpatikusabb. C-ben és Assemblyben is könnyű programozni, nagyon széles a hardver-kínálat. Most már van soros programozás is, ami miatt az illesztös könnyű. Nagyon sok cuccot le lehet szedni internetről.

  17. Gravatar Icon 16 zamar

    ez kizárt dolog mer nemtudom

  18. Gravatar Icon 17 szenyo

    szerintem a legegyszerűbb papírt, ceruzát használni.

    :D

  19. Gravatar Icon 18 medoc

    Greg, csak nem egy Szub-Éta Deket-O-Métert akaesz építeni? :)

  20. Gravatar Icon 19 medoc

    Deket=Detekt ofkorsz…

  21. Gravatar Icon 20 greg

    Szenyo: a papírral az a baj, hogy a kajakban elázik miközben lapátolsz, a ceruzát meg nehéz megfogni a lapát mellé :)

    azért arduino, mert könnyen programozható. aki látott már C-t, azt 5 perc alatt otthon érzi magát. az open source jelleg miatt rengeteg tudás van már amit nem kell nekem végigszopni és sok extra kütyü kapható hozzá. illetve olyan kompatibilis hw alternatívát választok ami az én célomra a legjobb, hiszen maga a hw is “open source” bárki gyárthat saját, okosított verziókat.

    ráadásul olcsó technika, 3500 ft körül megvan az agy, ami már ciripel, villog. ehhez képest a dsp -s megoldás kb egy nagyságrenddel drágább. nagyobb, többet is fogyaszt. overkill. bőven elég ide egy mikrokontroller.

  22. Gravatar Icon 21 TBS

    Volna 1 kérdésem. Melyik összetevő frekvenciájára vagy kíváncsi..? Ez eléggé DFT/FFT-ért kiáltó jelecske, abból meg válogathatod a mérőablak domináns frekijét egyszerű sorttal.

    Mondjuk egy kondis csatolással az AD előtt eltüntetheted a “mozgóátlagot”, bár azt sejtem, hogy nem te digizel. Ha nem te digizel, akkor biza a szoftveres erőforrásigény lesz nagy.

    Ha pontatlan és “olcsó” megoldás kellene nekem, akkor nézném az előjelváltásokat a mozgóátlaghoz viszonyítva, stb…

    (Egy pici PIC 2 pillanat alatt FFT-zik neked izzadás nélkül évekig egy 4.5V-os zsebtelepről. ;) )

  23. Gravatar Icon 22 pozsy

    Le tudnam valahonnan tolteni a pelda adatsort valami tablazatos formaban? Nem akarok hulyesegeket mondani, de lenne par konkret otletem csak elobb kiprobalnam oket.

  24. Gravatar Icon 23 angelday

    pozsy,

    greg írja:

    “itt van két minta amit most használok én is. kb az első felénél van az értelmes jel, utána meg csak alapzaj/alap állapot ahogy a padlón fekszik az eszköz. (wiimote távirányítóval meg a prototipizálás)”

    http://plastik.hu/media/kajaktest2.csv
    http://plastik.hu/media/kajaktest4.csv

  25. Gravatar Icon 24 a gyula

    a faszkorbacs nekem nem volt meg benne a szotaramban, de felutottem az internetz-et az ‘f’ betunel, s megleltem bizonyos nyelvesz jozsef definiciojat:
    http://szleng.blog.hu/2008/10/04/faszkorbacs_1

    huzos.

  26. Gravatar Icon 25 tfe

    greg:

    Ha jol ertem a kihivast a DFT/FFT implementacio adja, erre valoban jobb egy DSP (PIC). Azok olcsok, valoszinuleg talalhato ahhoz is hasonlo osszeszerelt panel es nem kell implementalni az algoritmust, mert adott hardverben. Gondolom atmel is gyart olcso DSP/uC-t, ott pedig ugyanazt a C-t hasznalhatod mint ennel a panelnel.

  27. Gravatar Icon 26 ern0

    Greg, hagyd a picsába a matematikát! Vond ki a szomszédos értékeket, és ezt a delta számsort nézd meg a szemeddel, rá fogsz jönni a megoldásra.

Leave a Reply