Fórum témák

» Több friss téma
Fórum » Digitális szűrő
 
Témaindító: 5cmarzo, idő: Aug 28, 2008
Témakörök:
Lapozás: OK   2 / 2
(#) sargarigo válasza vilmosd hozzászólására (») Ápr 27, 2011 /
 
Azt el tudnád mondani, hogy a mechanikus urak mit fognak csinálni a mérleggel? Hogy csillapítja a rendszert működőképesre, hogy közben legalább grammos pontosság maradjon? Most így elsőre valami szivacsot tudnék elképzelni, de ez valószínűleg nem lenne jó erre..
(#) sargarigo hozzászólása Ápr 27, 2011 /
 
Ez a median szuros dolog eleg szepen muzsikal tesztadatokon! Igeretes!
(#) vilmosd válasza sargarigo hozzászólására (») Ápr 28, 2011 /
 
Hali
A lengescsillapitasra tobbfele megoldas letezik, de a szivacs, gumilap nem tartozik ezek koze. Levegos, vagy folyadekos csillapito pohar, orvenyaramos fek (kib nagyon eros magnes, es vastag alu lap). Melle meg a merlegtechnika sok-sok eves tapasztalata. Ezek nelkul lehet csinalni egy merleghez hasonlito valamit, de merleget nehezen. Nagyon fontos, hogy a mozgo resz, es az alaplap kozott nem szabad megvaltoztatni a kapcsolatot, mert hibat okoz a meresben. Az elektronikus szures, atlagolas (egyeb SW varazslasok) csak a meres, es az adagolas pontossagat rontja, es lassitja a merest. Persze ha 400 g +- 100 g a cel akkor nem szoltam. Mi a zsakolokat 50 kg +- 500 g- re csinaltuk (technologiai meres, nem kereskedelmi).
(#) Fizikus válasza sargarigo hozzászólására (») Ápr 28, 2011 /
 
Szia!
Az alabbi PDF-ben egy egyensulyozo robotot epitett valaki, es az adatokat Kalman filterrel szurte, ez arra jo, hogy "megtippeli" hogy hol lesz a kovetkezo meresi eredmeny. Lehet hogy ez neked is segithet:
Kalman Filter
(#) Fizikus válasza Fizikus hozzászólására (») Ápr 28, 2011 /
 
Ennek a 14.-ik oldalan meg egy eleg zajos meresi adatsoron hasznaljak a Kalman filtert:
Bővebben: Link
(#) abcdabcd válasza 5cmarzo hozzászólására (») Máj 3, 2011 /
 
Találtam véletlenül egy oldalt, ahol erről írnak, az illető azt írja, hogy ő is szerette volna tudni, hogy egyszerűen hogy működik ez... angolul van remélem nem gond, én még nem olvastam végig, de a szerző Uwe Beis, akinek pl ADC meg DAC terve is van a neten, mint elég jól kidolgozott szerkezetek, lehet ezekkel már te is találkoztál korábban... (ha eddig nem nézd meg azokat is a honlapján)
Bővebben: Link
(#) cassis hozzászólása Szept 10, 2012 /
 
Kellene csinálnom egy AD konvertert, amely egy szenzorból érkező DC jelet alakítja át. Mivel elég nagy felbontásra lenne szükség 24 bites AD átalakítót néztem ki. A nagy felbontás miatt mindenképpen simítanom kellene a jelet. Ehhez PIC re írt átlagoló algoritmust gondoltam. Igaz már ez is egy aluláteresztő szűrőként viselkedik, mégis komolyabb digitális szűrésben gondolkodom. És már itt elakadtam. Nem tudom ilyen feladatra inkább a FIR vagy az IIR filter érdemes használni. Én inkább a FIR -t választanám, de nagyobb érvet nem tudok mellé tenni. (talán mert nem gerjed be )
A neten találtam interaktív szűrő tervezőt itt: http://www-users.cs.york.ac.uk/~fisher/mkfilter/trad.html, de ez a hagyományos Butterworth / Bessel / Chebyshev approximációkat közelíti. Itt szó nincs FIR vagy IIR típusról. Hogy van ez? Akkor ezek milyen digitális típusok?
Másik dolog, hogy a fent említett feladathoz milyen megfontolások alapján érdemes szűrőkarakterisztikát választani?
A hozzászólás módosítva: Szept 10, 2012
(#) Atielektro válasza cassis hozzászólására (») Szept 10, 2012 /
 
Az oldalon, amit linkeltél, IIR szűrőt lehet tervezni. Röviden összefoglalva az IIR az analóg szűrők diszkretizálásából (Z-transzformált) származtathatóak.
Az IIR-rel kevesebb mintából jobb szűrést érhetsz el (legalábbis tapasztataim szerint), de a FIR viszont sokkal egyszerűbb. Ha nagy a mintavételezésed, akkor szerintem ezt használd. Az IIR bonyolultabb, bár ez a generátor jónak tűnik.
Ha teheted, akkor ajánlom figyelmedbe a Matlab Filter Design toolbox-át. Mondjuk az csak az együtthatókat számítja ki, C kódot nem generál, de cserébe viszont kirajzolja a szűrő fázismenetét és Bode diagramját.
A hozzászólás módosítva: Szept 10, 2012
(#) cassis hozzászólása Szept 10, 2012 /
 
Magam is mintha arra emlékeztem volna, hogy a IIR szűrőnek van csak fizika társa, a FIR nek nincs, így kizárásos alapon is lényegében ez jött ki. De azért köszönöm a választ megerősített a gondolatomban. Viszont továbbra is kérdés, hogy a szűrőparaméterek tervezésekor van -e valamilyen mankó, hiszen csak a mérési hibából eredő véletlen zajokat szeretném kiszűrni a szenzor jeléből.
A FIR szűrő egyszerűsége csábító, és mivel elég sok minta állhat rendelkezésre egységnyi idő alatt (MCP3550-50 nél is az fs= 25600 Hz és nem feltétel a gyors ADC) talán a FIR is elboldogul vele.
A hozzászólás módosítva: Szept 10, 2012
(#) Atielektro válasza cassis hozzászólására (») Szept 10, 2012 /
 
Az a 25600 Hz nem igazán fedi a valóságot. Ez a mintavételezés a konverteren belül történik. Az AD-ből te max 12.5 mintát tudsz másodpercenként kiolvasni.
Amúgy én MCP3551-et használtam tömeg mérésére. A program először átlagolta a mintákat, majd az átlagokon elvégzett egy 13-ad rendű FIR-el egy szűrést. Az eredményt csatoltam. A végső jelem a zöld görbe. Látható, hogy inkább az átlagolás az, ami segített a jelen... Ha DC-t akarsz mérni, akkor nem elég neked egy jó hosszú átlagolás?

FIR_pelda.PNG
    
(#) szaffo555 hozzászólása Dec 14, 2012 /
 
FIR szűrő megvalósítása érdekelne PIC18 al.
Remélem jó helyen kérdezek, mert alapvetően a programozásban kérnék segítséget, de maga a kérdés eléggé elméleti a digitális szűrők világában, ezért teszem fel itt a kérdést.
A FIR szűrő elméleti alapösszefüggését értem:

  1. /*
  2.   FIR szűrő konvolúciót megvalósító részlete
  3.   Bemenetek:
  4.      m: <konvhossz> hosszú minta vektor
  5.      a: <konvhossz> hosszú együttható vektor
  6.   Kimenet: a konvolúció eredménye
  7. */
  8.  
  9. float konvolval_fir(const float *m, const float *a, int konvhossz) {
  10.     int i;
  11.     float er=0;
  12.     for (i=0; i<konvhossz; i++) er += m[i] * a[i];
  13.     return er;
  14. }


Azonban találtam itt egy gyakorlati példát, amelyet már nem nagyon értek.

  1. #define FIR_WEIGHTS       8
  2. #define MAX_DATA_SAMPLES  16
  3.  
  4. char weights[FIR_WEIGHTS];
  5. char data_buffer[MAX_DATA_SAMPLES];
  6. char data_index; /* points to most recently received data sample */
  7.  
  8. int fir(void)
  9. {
  10.  char i,j;
  11.   sum;
  12.  
  13.  j  = data_index - FIR_WEIGHTS;
  14.  if(j < 0)
  15.    j = j + MAX_DATA_SAMPLES;
  16.  
  17.  sum = 0;
  18.  for(i=0; i<FIR_WEIGHTS; i++) {
  19.  
  20.    sum = sum + weights[i] * data_buffer[j];
  21.    j = j + 1;
  22.    if(j >= MAX_DATA_SAMPLES)
  23.      j = 0;
  24.  
  25.  }
  26.  
  27.  return sum;
  28.  
  29. }


Valaki el tudná kicsit részletesebben magyarázni?
Ebben van már pl. kivonás is, de miért?

Másik dolog, hogy a szorzó súlyok elvileg nem egész számok. Viszont át lehet őket alakítani 2n vel való szorzással (balra léptetéssel) egésszé, így könnyebb egész részükkel szorozni. Aztán a képződött, összegzett eredményt vissza kell osztani értelemszerűen. Még azt is érteni vélem, hogy a szorzás - összeadás során képződött eredmény bithely igénye:

szorzó bitjei + szorzat bitjei + Log2(m)

ahol "m" a konvolúció hossza.

Eddig jól gondolom?

Viszont a Microchip AN 852 jéban van egy példa, (28-29. oldal), ahol ez nem jön be.

A hozzászólás módosítva: Dec 14, 2012
(#) ha1drp válasza szaffo555 hozzászólására (») Dec 14, 2012 /
 
Itt a kivonás jelentősége , hogy a bemenő adatok adatbufferének mutatóját kezelje. Mindig az utolsó 8 ( FIR_WEIGHTS ) adattal dolgozik.
Ha új mérés kerül az adatbufferbe annak indexe a data_index lesz. Ezt a programrészlet nem tartalmazza.

Esetlegesen egy DsPIC, PIC32 kontroller választása esetén, -ahol hardveres támogatás van- a túlcsordulás, sebesség problémáid megszűnnének.
(#) szaffo555 válasza ha1drp hozzászólására (») Dec 14, 2012 /
 
Amit írtál értem, de hogyan fog "Mindig az utolsó 8 ( FIR_WEIGHTS ) adattal dolgozni"?
Ezt még nem látom pontosan, segítenél ebben?
Másik kérdésem a súlyok egész számmá alakításának kérdése lenne. Esetleg ebben is tudnál segíteni?
A hozzászólás módosítva: Dec 14, 2012
(#) elektros90 hozzászólása Okt 11, 2013 /
 
Sziasztok!
Segítséget szeretnék kérni. Digitális szűrőt kell terveznem vagy Matlabban vagy FilterExpress programban. A FE-t nemtalálom neten, ami meg van az nem jo a win7 en. Tudnátok esetleg ajánlani valami hasonló progit? Köszönöm előre is.
(#) norbiv8 hozzászólása Nov 12, 2021 /
 
Sziasztok!
Szeretnék 1400-1500Hz közötti jelet mikrovezérlővel mintavételezni majd FFT-vel feldolgozni 1Hz felbontással. 3000 minta/másodperc mellett ez kivitelezhető (legyen 4096 hogy ne legyen macera az FFT ablakkal), de lehetne ezt valahogy optimalizálni? Nekem csak az a 100Hz sávszélesség érdekes és csak 8k RAM van a prociban. Előre is köszönöm a segítséget.
(#) Peter65 válasza norbiv8 hozzászólására (») Nov 13, 2021 /
 
Szia!
Nem vagyok FFT guru, de tudtommal a sikeres jelfeldolgozásnak vannak szabályai. Ha egy jelfolyamból 1Hz-es felbontással akarod a spektrumot felrajzolni, akkor ahhoz vagy sűrű minta kell, vagy hosszú idő. Ha 3ksmpl-lel mintavételezzel egy kb. 1,5kHz-es jelet, akkor csak kettő mintád lesz belőle, amiből nem lehet megmondani, hogy 1,499kHz, vagy 1,5kHz. Sejtéseim szerint kb. 1 másodpercig fenn kellene állnia változatlanul a jelfolyamnak, hogy ilyen mintavételezéssel elfogadható eredményed legyen, de inkább még hosszabbnak. Egy gyorsan változó jelfolyamot ezért így nem tudsz feldolgozni az elvárt felbontással.
Dr. Simonyi Ernő: Digitális szűrők könyvében többféle FFT eljárás is le van írva, nem tudom, hogy neked melyik lenne a legjobb. Első ötletem az lenne, hogy minden minta után mind a 100 spektrumnak előállítanám az aktuális cosx és sinx értékét (vagy egy nagy táblázat kellene, ami lehet hogy nem fér bele a mikrovezérlőbe), és a 200db szorzást elvégezném a szummázásokkal együtt. Ez a jelfelbontástól függően még egy szorozni tudó 8 bitessel is lehet hogy megoldható.
(#) norbiv8 válasza Peter65 hozzászólására (») Nov 13, 2021 /
 
Szia, köszönöm az írásod. Azt hittem a Nyquist kritérium teljesülése elegendő, de hát innen is látni, hogy messziről szagolgatom a témát. Az ajánlott könyvet sajnos sehol nem találtam, de megpróbálom itt az aprón. Addig is kicsit bővebben kifejtenéd az általad vázolt algoritmust? STM32F100-on kellene futnia, szóval van hardveres szorzás.
(#) pucuka válasza norbiv8 hozzászólására (») Nov 14, 2021 /
 
Háát, én csak Xilinx FPGA használatával láttam megoldásokat, de ehhez már nem értek.
(#) Peter65 válasza norbiv8 hozzászólására (») Nov 14, 2021 /
 
A könyvet valóban nem könnyű megszerezni. A neten elég sok irodalom fenn van, még magyar nyelven is. Most hogy rákerestem ezt az anyagot láttam a legjobbnak.
Amit felvázoltam, az 100db 1Hz szélességű digitális szűrő felépítése lenne úgynevezett DFT-vel (Diszkrét Fourier Transzformációval). Tehát ez nem FFT (Fast Fourier Transformation, azaz gyors Fourier átalakítás), erre valószínűleg nem is jó, az a felharmonikus számításoknál gazdaságos.
Tehát 1Hz szélességű spektrum nagyságának meghatározásához módszert kell kiválasztani, méretezni. Ahogy most utána néztem, az 1Hz sávszélességhez bizony 1 sec hosszú jelfolyam kell legalább. Ha nem átfedéssel végzel több mérés-sorozatot, akkor így kb. 1 sec-enként lesz egy eredményed. Nem írtál róla semmit, hogy ez jó lehet-e egyáltalán, akár a jelfolyam változékonysága miatt, vagy a gyakrabban szükséges mérési eredmény miatt. Továbbá kellene, hogy mégis milyen pontossági elvárásaid vannak. Ha elég egy ilyen spektrumot kb. 10-20% pontossággal meghatározni, akkor az úgynevezett ablakolással nem kell foglalkozni, de ha ennél jobbat szeretnél, akkor bizony szükség lesz rá (lásd a korábbi linken a 12. fejezetet; Simító ablakok).
Amit korábban javasoltam, ahhoz kellene egy szinusztáblázat, mondjuk 16 bites előjeles és 216 elemű, ez lehet a flash-ben. Ebből fogjuk kikeresni mindig az aktuális értékeket. Ki kellene jelölni 100db változót, amik azt számolják, hogy melyik lesz a következő kiolvasandó érték a szinusztáblázatból. Ezeket elsőre 32 bitesre választanám, a felső 16 bit mutatná, hogy melyik az aktuális kiolvasandó elem. Minden minta feldolgozás után növelni kell ezek értékét a frekvencia értékéből adódó lépésnagysággal. A jel mintavételezését minél nagyobbra választanám, amit még elbír majd a valósidejű számítási kapacitás. Egy minta nem egy AD konverzió eredménye lenne, hanem akár 64-szeres túlmintavételezést használnék, és 16 bites formára hoznám. Ennek, és a 16 bites szinuszértéknek a szorzata 32 bites előjeles számot eredményez. El kell végezni a szorzást a szinusz és a koszinusz komponensre, ezeket spektrumonként 2-2 64 bites változóban összegezném. Ha van esetleg a procinak DSP utasítása, akkor lehet hogy ahhoz kellene a változókat szabni. Ha letelt az ablak hossza, akkor a 64 bites összegzett jelekből vissza kell számolni a spektrum abszolút értékét (abs=GYÖK(sin_summa2 + cos_summa2) ), és ez lesz a keresett érték.
A hozzászólás módosítva: Nov 14, 2021
(#) norbiv8 válasza Peter65 hozzászólására (») Nov 14, 2021 /
 
Végül a könyvet egy segítőkész fórumtárs megtalálta online, de megpróbálom beszerezni eredetiben is. Nekem kicsit túl elméleti az ott használt nyelvezet és nehezen tudom azt gyakorlatba átültetni.
Szóval a jel változása lassú, most úgy gondolom, hogy másodpercenként 1 eredmény sorozat jó lesz. (Ha mégsem, akkor jól értem, hogy 50% átfedéssel 0.5 másodpercenként lenne eredményem?) 20% pontosság elég, úgy sem garantálható, hogy az adott bin-en belül lesz pont a jel.
Elkezdtem számolgatni a szinusz tábla mérete 128Kbyte, sajnos a meglévő mikrokontrollerel nem fog menni. Néznem kell ehez a feladathoz valami komolyabbat. Addig is megpróbálom az itt leírt lépéseket összerakni, úgy érzem lesz még kérdésem.
(#) Peter65 válasza norbiv8 hozzászólására (») Nov 14, 2021 /
 
Az online könyv engem is érdekelne. Igen, valóban erős az elmélet, és a matematikai háttere, viszont átfogó, teljes képet igyekszik adni.
Igen, jól érted, hogy lehetne fél-másodpercenként eredményed átfedéssel. Ha a 20%-os pontosság elég, és a spektrumok kis átfedése nem probléma, akkor lecsökkentheted mondjuk 0,8sec-re az ablakot, és így kicsit gyakrabban lesz eredmény.
A 20%-os pontossági lazaság további engedményekre ad lehetőséget. A táblázatot biztosan visszaveheted kisebbre, 210 vagy 212 eleműre. A számok ábrázolását is hozzá lehetne ehhez illeszteni, optimalizálni. Sajnos nekem sincs olyan gyakorlatom a témában, hogy ezt könnyedén meg tudjam becsülni neked. Ha valamiért jó lenne az előzetesen választott kontrollerbe beleférni, akkor érdemes lehet végig gondolni, mire elég, és az neked megfelelő-e.
(#) dB_Thunder hozzászólása Csü, 18:49 /
 
Sziasztok!

Egy segítségre lenne szükségem! Szeretnék csinálni egy digitális (FIR vagy IIR) aluláteresztő szűrőt tanulás céljából.
A hardver egy Seeedunio XIAO lenne, van benne AD és 1 DA csatorna is.
A alap feladat: audió jel digitalizálása, aluláteresztő szűrés, mondjuk 100Hz-en 4rendű szűréssel, DA visszaalakítás.

De sajnos a programozáshoz nem értek annyira, hogy ezt megírjam, és még ehhez hasonló példaprogramot sem találtam.
Tudnátok segíteni?

Köszi mindenkinek!
(#) sdrlab válasza dB_Thunder hozzászólására (») Csü, 20:21 /
 
Első körben azt kell tudni, hogy ha analóg szűrő típust szeretnél digitálisan előállítani, az csak IIR szűrő lehet, FIR nem. Az utóbbinak nincs analóg megfelelője, így fokszáma sem értelmezett, helyette pl karakterisztika alapon tervezik meg. Cserébe tulajdonképpen bármilyen szűrő realizálható vele! Viszont a számítási igénye jóval nagyobb, mint az IIR szűrőké!
A FIR könnyen számolható, és még könnyebben leprogramozható, és mindig stabil. Az IIR nehezen számolható, a programkódja sem túl átlátható, és cserébe simán be tud gerjedni, ha nem jók az együtthatók.
Az én véleményem, kezdőként egyértelműen a FIR szűrővel kezdd..., nem túl meredek szűrés esetén még nem túl hosszú az együttható lánc(tömb), az még belefér időben kis mikrovezérlőbe is... A te hardveredben ráadásul azt hiszem kapásból van FIR támogatáshoz DSP utasítás is már, így elég komoly szűrésre is elegendő az már....
A hozzászólás módosítva: Csü, 20:24
(#) dB_Thunder válasza sdrlab hozzászólására (») Csü, 20:50 /
 
Minél egyszerűbb, gyorsabban futó, érthető kód lenne lényeg, "valós, természetes" karakterisztikával!
Lebegő pontos számítást nem támogat még ez a cucc, tehát jó lenne ha az együtthatók egészek lennének.. Láttam olyan számolót amit meg lehetett kérni, hogy egészre optimalizáljon.

Később majd kipróbálnák, és ami fontos, meghallgatnám más szűrőket, komolyabb meredekségűeket is. Cél a tanulás, megértés, valamilyen fokon!

Legvégső cél sok band-pass filter leprogramozása, de ott már nem kell visszaalakítani, csak az értékek kellenek...

Még egyenlőre arra sincs megoldásom, hogy audió jelet bedigitalizáljam, majd visszaalakítsam megint analóggá...

Valljuk be vagyok!
(#) sdrlab válasza dB_Thunder hozzászólására (») Csü, 20:54 /
 
Ha sok sávszűrő a cél, akkor kapásból az FFT irányába indulj el....
Arra fogsz találni sok kész forráskódot is, magát az algoritmust nem kell megértened, csak az alapjait így...
(#) dB_Thunder válasza sdrlab hozzászólására (») Csü, 21:06 /
 
Nem jó!
Azonnal kell az eredmény, nem x ms múlva, és folyamatosan!
Még egy halom számítást kell megcsinálni utána... majd...
(#) Peter65 válasza dB_Thunder hozzászólására (») Csü, 21:25 /
 
Az Fourier szűrés is tud valós idejű lenni, és a számításokat folyamatosan végezheted, ahogy a minták rendelkezésre állnak. Természetesen itt is, mint minden szűrésnél vannak szabályok. A szűrendő jelből legalább kb. a szűrő sávszélességének reciproka idő intervalumnyi mintavételezésnek meg kell történie, hogy meglegyen az első eredményed. Utána csúszó ablakozással olyan gyakran aktualizálhatod, ami az igényeidnek megfelel.
(#) sdrlab válasza dB_Thunder hozzászólására (») Csü, 23:51 /
 
Ugyanazzal a paraméterekkel bíró FFT szűrő optimálisan méretezve nagyjából ugyanazt a jel késleltetést fogja adni, mint akár digitális, akár analóg szűrő társai! Csodák nincsenek...
FFT esetén váltott pufferes feldolgozás kell a folytonos jelfeldolgozáshoz...
A hozzászólás módosítva: Csü, 23:52
(#) dB_Thunder válasza sdrlab hozzászólására (») Pé, 15:51 /
 
Jogos a 3 pont!

Bármilyen megoldásnak kell valamennyi "adat", hogy valamilyen értelmezhető eredményt adjon. Tetszik ez a csúszó ablakolás!
Következő: »»   2 / 2
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem