Pyöreä Puskuri Liikkuva Keskiarvo


Tutkija ja insinöörit opas digitaaliseen signaalinkäsittelyyn Steven W. Smith, Ph. D. Luku 28: Digitaaliset signaaliprosessorit Digitaaliset signaaliprosessorit on suunniteltu suorittamaan nopeasti FIR-suodattimia ja vastaavia tekniikoita. Ymmärtää laitteisto. meidän on ensin ymmärrettävä algoritmit. Tässä osiossa esitellään yksityiskohtaisesti FIR-suodattimen toteuttamiseen tarvittavat vaiheet. Seuraavassa osassa näemme, kuinka DSP: t on suunniteltu suorittamaan nämä vaiheet mahdollisimman tehokkaasti. Aluksi on erotettava toisistaan ​​off-line-käsittely ja reaaliaikainen käsittely. Off-line-käsittelyssä koko tulosignaali sijaitsee tietokoneessa samanaikaisesti. Esimerkiksi geofyysikko voi käyttää seismometriä maapallon liikkeen rekisteröimiseksi maanjäristyksen aikana. Kun ravistelu on ohi, tiedot voidaan lukea tietokoneeseen ja analysoida jollakin tavalla. Toinen esimerkki off-line-käsittelystä on lääketieteellinen kuvantaminen, kuten tietokonetomografia ja MRI. Tietojoukko hankitaan, kun potilas on koneen sisällä, mutta kuvan jälleenrakentaminen voi viivästyä vasta myöhemmin. Avainkohta on, että kaikki tiedot ovat samanaikaisesti käsittelyohjelman käytettävissä. Tämä on yleistä tieteellisessä tutkimuksessa ja tekniikassa, mutta ei kuluttajatuotteissa. Off-line-käsittely on henkilökohtaisten tietokoneiden ja pääkoneiden maailma. Reaaliaikainen prosessointi tuottaa lähtösignaalin samalla, kun tulosignaalia hankitaan. Tähän tarvitaan esimerkiksi puhelinviestintä, kuulokojeet ja tutka. Näiden sovellusten on oltava välittömästi saatavilla, mutta ne voivat viivästyä lyhyellä määrällä. Esimerkiksi puhuja tai kuuntelija ei pysty havaitsemaan 10 millisekunnin viivettä puhelun aikana. Samoin ei ole merkitystä, jos tutka-signaali viivästyy muutamassa sekunnissa ennen kuin se näkyy operaattorille. Reaaliaikaiset sovellukset syöttävät näytteen, suorittavat algoritmin ja tuottavat näytteen päälle ja toisella. Vaihtoehtoisesti ne voivat syöttää joukon näytteitä, suorittaa algoritmin ja tuottaa näytteen ryhmän. Tämä on digitaalisten signaaliprosessorien maailma. Katso nyt kuva 28-2 ja kuvittele, että tämä on FIR-suodatin, joka toteutetaan reaaliaikaisesti. Lähdötuloksen laskemiseksi meillä on oltava pääsy tiettyyn määrään tuoreimmista näytteistä syötteestä. Oletetaan esimerkiksi, että käytämme kahdeksan kertoimia tässä suodattimessa, 0. a 1. hellip a 7. Tämä tarkoittaa sitä, että meidän on tiedettävä kahdeksan tuoreimman näytteen arvo tulosignaalista x n, x n -1, hellip x n -7. Nämä kahdeksan näytettä on tallennettava muistiin ja niitä on jatkuvasti päivitettävä, kun uudet näytteet hankitaan. Mikä on paras tapa hallita näitä tallennettuja näytteitä Vastaus on pyöreä puskurointi. Kuvio 28-3 havainnollistaa kahdeksan näytepuskuria. Olemme asettaneet tämän pyöreän puskurin kahdeksaan peräkkäiseen muistipaikkaan, 20041 - 20048. Kuvio (a) esittää, kuinka kahdeksan näytettä syötteestä voidaan tallentaa yhteen tiettyyn ajankohtaan, kun taas (b) esitetään muutokset seuraavan näytteen jälkeen hankittu. Pyöreän puskuroinnin ajatuksena on, että tämän lineaarisen matriisin loppupää on liitetty alun muistipaikkaan 20041 pidetään 20048 seurauksena, samoin kuin 20044 on vuoden 20045 vieressä. Säilytät taulukon osoittimella (muuttuja, jonka arvo on osoite), joka osoittaa, missä viimeisin näyte asuu. Esimerkiksi (a) osoitin sisältää osoitteen 20044, kun taas (b) se sisältää 20045. Kun uusi näyte on hankittu, se korvaa taulukon vanhin näyte ja osoitin siirretään yhdellä osoitteella eteenpäin. Pyöreät puskurit ovat tehokkaita, koska vain yhtä arvoa täytyy muuttaa, kun uusi näyte hankitaan. Pyöreän puskurin hallitsemiseen tarvitaan neljä parametria. Ensinnäkin on oltava osoitin, joka osoittaa pyöreän puskurin alku muistissa (tässä esimerkissä, 20041). Toiseksi on olemassa osoitin, joka osoittaa ryhmän loppua (esim. 20048) tai muuttujaa, joka pitää sen pituuden (esim. 8). Kolmanneksi muistiosoitteen askelkoko on määritettävä. Kuvassa 28-3 askelkoko on yksi. esimerkiksi osoite 20043 sisältää yhden näytteen, osoite 20044 sisältää seuraavan näytteen ja niin edelleen. Näin ei useinkaan ole. Osoittaminen voi esimerkiksi viitata tavuihin ja jokainen näyte voi vaatia kaksi tai neljä tavua pitämään arvonsa. Näissä tapauksissa askelkoon tulisi olla kaksi tai neljä. Nämä kolme arvoa määrittelevät pyöreän puskurin koon ja kokoonpanon, eivätkä muutu ohjelmatoiminnon aikana. Neljäs arvo, osoitin uusimpaan otokseen, on muutettava, kun jokainen uusi näyte hankitaan. Toisin sanoen on oltava ohjelmalogiikka, joka ohjaa, kuinka tämä neljäs arvo päivitetään kolmen ensimmäisen arvon arvon perusteella. Vaikka tämä logiikka on varsin yksinkertainen, sen on oltava erittäin nopea. Tämä on tämän keskustelun koko asia. DSP: itä tulisi optimoida pyöreän puskurin hallintaan, jotta saavutettaisiin mahdollisimman nopeus. Keskeisenä, pyöreä puskurointi on myös hyödyllinen off-line-käsittelyssä. Harkitse ohjelmaa, jossa sekä sisääntulo - että lähtösignaalit ovat täysin muistissa. Pyöreää puskurointia ei tarvita konvoluutio laskemiseen, koska jokainen näyte voidaan välittömästi käyttää. Monet algoritmit toteutetaan kuitenkin vaiheittain. kun välijohdon välillä muodostetaan välisignaali. Esimerkiksi kaksikamppisarjan rekursiivinen suodatin toimii tällä tavalla. Raakajohtomenetelmä on tallentaa kunkin välissignaalin koko pituus muistiin. Pyöreä puskurointi tarjoaa toisen vaihtoehdon: tallenna vain ne välit näytteet, joita tarvitaan laskennassa. Tämä pienentää tarvittavaa muistimäärää monimutkaisemman algoritmin kustannuksella. Tärkeä ajatus on, että pyöreät puskurit ovat hyödyllisiä off-line-käsittelyssä, mutta ovat tärkeitä reaaliaikaisille sovelluksille. Nyt voimme tarkastella FIR-suodattimen toteuttamiseen tarvittavat vaiheet käyttämällä pyöreitä puskureita sekä tulosignaalin että kertoimien suhteen. Tämä luettelo saattaa tuntua vähäiseltä ja liialliselta - se ei ole. Näiden yksittäisten tehtävien tehokas käsittely on se, mikä erottaa DSP: n perinteisestä mikroprosessorista. Jokaiselle uudelle näytteelle on tehtävä kaikki seuraavat vaiheet: Tavoitteena on, että nämä vaiheet suoritetaan nopeasti. Koska vaiheet 6-12 toistetaan monta kertaa (kerran suodattimen jokaiselle kertoimelle), erityistä huomiota on kiinnitettävä näihin toimenpiteisiin. Perinteisten mikroprosessorien on yleensä suoritettava nämä 14 vaiheet sarjassa (yksi toisensa jälkeen), kun taas DSP: t on suunniteltu suorittamaan ne rinnakkain. Joissakin tapauksissa kaikki silmukan toiminnot (vaiheet 6-12) voidaan suorittaa yhdellä kellojaksolla. Tarkastele sisäistä arkkitehtuuria, joka sallii tämän upean suorituskyvyn. Minulla ei ole vihjeitä pyöreistä puskureista C-kielen suhteen teidän tehtävänne suhteen: kiertokuvakehikkikuvio on taulukko. Aloitat asioiden tuomisen osaksi nollaa ja kasvatat seuraavan pääsyn indeksiä. Kun indeksi tulee suuremmaksi kuin suurin sallittu arvo (eli seuraava pääsy päätyy taulukon loppuun), aseta indeksi takaisin nollaan. Tämä tarkoittaa sitä, että puskurin ollessa täynnä (ohjelma on kirjoittanut jotain jokaisen taulukon jokaiselle elementille) lisätoiminnot korvaavat edellisen arvon kussakin osoitteessa. Tämä korvaa vanhimman arvon uusimmalla arvolla joka kerta, ja taulukon kaikkien elementtien keskiarvo käyttää aina viimeisimpiä näytearvoja. Esimerkiksi pyöreä puskuri ints: Tietenkään et todellakaan tarvitse erillistä muuttuja nimeltä MAXINDEX, mutta olen kirjoittanut sen painottaen. (Se on: yksinkertaisesti vertailla currentindex ja BUFFERSIZE-1.) Originally Posted by tellthatmatt nopea kysymys, onko mitään erityistä toimintoa, jotta voin ottaa keskimääräinen array tai minun pitäisi koodata sitä lisäämällä kaikki elementit yhdessä amp sitten jakamalla . Sen nimi on silmukka. (Ei toimintoa, mutta useita sisäänrakennettuja ohjausrakenteita silmukoiden luomiseen.) Jos tiedät, että aiot tehdä jotain täsmälleen n kertaa, silmukka voi näyttää tältä: Oletetaan, että sinulla on array x kymmenen kaksinkertaista tarkkuusnumeroa ja haluat löytää niiden arvojen summan (eli: haluat summan x0 x1 x2. x9). Sitten voisit tehdä sen näin: Originally Posted by tellthatmatt mikä on paras tapa lukea kokonaislukuja tiedostosta tässä tapauksessa havnt vielä kattaa tämän luokan amp minun oppikirja doesnt selittää sitä hyvin hyvin ollenkaan. Uskon sen jotain tekemistä fgetsc () - toiminnon kanssa, mutta en ole varma. loput ohjelmani toimivat hyvin, en vain osaa lukea kokonaislukuja TEXT-tiedostosta Jos tekstitiedosto sisältää kokonaislukuja, fscanf () on todennäköisesti helpoin tapa, ja se on mielestäni sopivin. (Mutta muitakin tapoja.) Käytettäessä fscanf (), annat sen minkä tahansa muuttujan (osoitteet), joihin olet lukemassa. Fscanf paluuarvo on niiden kohteiden määrä, jotka on muunnettu onnistuneesti. Sinun tulisi aina (aina) testata tuottoarvoa. Esimerkiksi jos haluat lukea arvon yhdeksi arvoksi: Tämä on vain testi näyttääksesi, mitä yritettiin selittää. fscanf () epäonnistuu (toisin sanoen sen arvo on nolla), jos se ei voi muuntaa tavaraa inteksi --- se on kohta char char, joka ei ole välilyöntiä eikä se ole desimaaliluku 0: stä 9: een. jos se yrittää lukea tiedoston loppua. Jos haluat lukea arvoa array-elementtiin, anna vain elementin osoite scanf. Jos haluat lukea koko tiedostojen sisällön kokonaisluvuksi, jota käytetään pyöreänä puskurina: ympyränmuotoiset puskurisignaalit virtausgrafiat napautuvat napautettu viivajono Automaattinen regressiivinen siirto Kolme muistisanaa sijoitetaan alueelle, joka on järjestetty pyöreänä puskurina. Tulo kirjoitetaan indeksin osoittamaan sanaan ja syötteen kolme edeltävää arvoa luetaan indeksin kolmella edellisellä arvolla. Jokaisessa näytepisteessä neljä indeksiä kasvatetaan yhdellä, kun temppu alkaa paikasta 0, kun ylitämme puskurin pituuden M (tämä takaa puskurin pyöreyden). Vastapäivän nuoli osoittaa indeksien ottaman suunnan, kun taas nuolinäppäimellä nuoli osoittaa liikettä, jota tietojen pitäisi tehdä, jos indeksit pysyvät kiinteässä asennossa. Kuv. 13 käytämme pieniä kolmioita ilmoittamaan kertoimet suodattimen kertoimilla. Tämä on notaatio, jota käytetään yleisesti digitaalisten suodattimien digitaalisten suodattimien signaalivirtakuvioissa. Itse asiassa FIR-suodattimessa on viivästyslinja, koska se tallentaa N peräkkäisiä näytteitä syöttösekvenssistä ja käyttää kukin niistä enintään N näytteiden viiveellä. Pisteitä, joissa pyöreää puskuria luetaan, kutsutaan hankauksiksi ja koko rakennetta kutsutaan viivästetyksi linjaksi. Yleisesti ottaen kausaalisen IIR-suodattimen edustaa eroyhtälö, jossa lähtösignaali tietyllä hetkellä saadaan lineaarisena yhdistelmänä ottotulo - ja lähtösignaalien näytteistä aikaisemmissa hetkeissä. Lisäksi syötteen hetkellinen riippuvuus syötteestä sisältyy myös yleensä IIR-suodattimeen. Eroyhtälö, joka edustaa IIR-suodatinta, on ekv. (24) kutsutaan myös automaattiseksi regressiiviseksi siirrettäväksi keskiarvoksi (ARMA). Vaikka FIR-suodattimien impulssivaste on äärellisellä ajanjaksolla, IIR-suodattimien impulssivaste on yleensä ääretön laajennus. Siirtofunktio saadaan soveltamalla Z-muunnosta sekvenssiin (24). Siirtymätehtävässä Z-muunnos on pelkkä käännöskäytännön operatiivinen korvaaminen m-näytteellä, jonka kertolasku z: llä. Tulos on rationaalinen funktio H (z), joka tuottaa lähtöteoksen Z-muunnoksen tulo: Suodatusjärjestys määritellään polynomin asteeksi z Yksinkertaisempi IIR-suodatin Tässä osassa analysoidaan yksinkertaisin, ei-intuitiivisen IIR-suodattimen ominaisuuksia, jotka voidaan muodostaa: yksisuuntainen suodatin, jonka kertoimet ovat 80-72 -64-48 monenvälinen liikkuva keskimääräinen suodatin upotetulle järjestelmälle C: ssä ja kiinteässä pisteessä. Toteutus on pyöreä puskurin, jossa im pitää juoksevan summan ja laskee yn yn-1 xn-xn-M, missä M on suodattimen pituus. Tämä tehdään kullekin alisuodattimelle, jonka ulostulo on yksi, joka toimii syötteenä toiselle. Im kertoo minun kertoimet 2, joka antaa minulle kertoimet pituus 2 tai 2 riippuen suodattimen pituudesta. Sitten tulos pienenee uudelleen 2: lla oikean tuoton saamiseksi. Nyt kaikki näyttää hyvältä lyhyen ajan mittakaavoista, mutta pitkiä aikoja saan ajautua. Syynä rekursiiviseen käyttöön on säästää laskutoimituksia sulautetulla prosessorilla. Olen sisällyttänyt kuvan suodattimen sisältämistä sisäosista, silloin kun askelvaste otetaan käyttöön ja voimme nähdä suodattimien siirtofunktion muodon, neliön, kolmion ja sitten lähentävän gaussian, joten suodatin toimii odotetulla tavalla. Onko olemassa mitään keinoa korjata tämä ja mistä tämä on todennäköisin lähde. on tämä ajelehtuminen johtuen siitä, että hieman menetetään siirtymässä tai jotain muuta. Driftia ei ole DC-tuloille, mutta AC-signaaleille se hitaasti ajautuu. RATKAISU: Ongelmana oli keräyssäiliö, kuten kommentit kommentoivat robert. Kysymys oli, että yksi laskentatekijä oli ylittänyt ylhäältä ylös ja alaspäin siirtymisen muihin osaan verrattuna, mikä loi pyöreän offsetin, joka kertyi. kysyi April 27 15 at 21:12 on akun yn pyöristetty tai kvantisoitu millään tavalla sinun on varmistettava, että xn-M, joka on vähennetty on täsmälleen sama arvo kuin xn, joka oli lisätty M näytteet sitten. joten haluat todella siirtää summan. liikkumatonta keskiarvoa ja pienennä siirrettävän summan tuottoa (1M), jotta saat keskimäärin. tämä on varsin toteutettavissa ja jopa paremmin tehty kiinteän pisteen sijaan kelluva piste. osash robert bristow-johnson Apr 27 15 klo 22:52 quotScaling the coefficientsquot Oletan, että jakaa M jokaisen vaiheen jälkeen ja että kerroin, jonka mittaat Tämä on luultavasti syy offset. Parempi sitten jakaa tuottaja Mi kaikkien suodattimien lopussa. Sinun on seurattava sisäisiä amplitudeja, vaikka lopulta ylität akut. Tämä voidaan kuitenkin helposti ratkaista modulo-aritmeettisen avulla (joista toinen komplementti on erityinen tapaus). ndash Oscar 28. huhtikuuta klo 7:00 Oscar, tämä on kiinteä pistesuodatin. Merkitys i vain aritmeettinen kokonaisluku. Liikkuvan keskiarvon pituus gt1 ja vahvistuksen 1 mukaan suodattimen vakiot ovat murto-osa, jota ei voida edustaa kokonaislukuja. Joten kertoimet skaalataan, jotta niistä saadaan kokonaislukuja siirtämällä ne vasemmalle x useita bittejä. Tästä johtuen lopullista lähtöä on siirrettävä oikealle myös niin monta bittiä kohden. En pysty pitämään käynnissä olevaa summaa kaikkien 4 suodattimen läpi palaamatta lähtöä, tulosignaali on 16 bittiä ja kertoimen skaalaus ja pituudet yksi suodatin käyttää koko 32-bittisen akun tilan käyttäjää70614 28. huhtikuuta klo 8.20

Comments

Popular posts from this blog

Forex Nok Uutiset

Paras Binary Asetukset Signaalit 2013 Honda

Accentforex Kauppias 42