Thursday 5 October 2017

Rekursiivinen Liikkuvan Keskiarvon Matlab


Liikkuvan keskiarvon vaihtelut Liikkuva keskimääräinen suodatin on enemmän tai vähemmän täydellinen tietojen tasoittamiseen melun läsnä ollessa, jos hyödylliset tietosi ovat kokonaan ajanhetkellä. Siinä tapauksessa et välitä sen melko heikosta suorituskyvystä taajuusalueella. Kuvio 1 esittää liikkuvan keskimääräisen suodattimen impulssi-, askel - ja taajuusvastetta (kolmella molemmilla puolin kolmella ylimääräisellä näytteellä, jotka eivät ole osa impulssi - ​​ja askelvasteita selkeyden vuoksi). Joskus kuitenkin sinun täytyy työskennellä sellaisten tietojen kanssa, joista molemmat verkkotunnukset ovat tärkeitä. Näissä tapauksissa painotetut versiot liikkuvasta keskiarvosta ovat enemmän tai vähemmän samanlaisia ​​aikatasossa, mutta niillä on paljon parempi suoritus taajuusalueella. Toistuva liukuva keskiarvo Ensimmäinen asia, jonka voit parantaa liikkuvan keskiarvon taajuusvasteen, on soveltaa sitä useita kertoja. Kahden toiston jälkeen tämä on kerrointen kolmiomainen painotus (kuvio 2). Koska saman suodattimen levittäminen kaksinkertaistaa sen vaikutuksen kaksinkertaiseksi, taajuusvasteen ensimmäinen sivulohko on vain puolet korkeammasta kuin kuvio 1. Kolmionmuotoisen muodon syynä on se, että liikkuva keskiarvo on suorakaiteen muotoinen pulssi. Sen soveltaminen kahdesti aiheuttaa tämän suorakulmaisen pulssin konvoluutio itsestään, mikä johtaa yhdistetyn suodattimen kolmio-ikkunaan. Huomaa, että Ive otti saman suodatuksen pituuden kuviossa 2 kuin kuviossa 1, muuttamalla siten taajuusvasteen ensimmäistä nollaa. Alkuperäisen suorakulmaisen suodattimen todellinen konvoluutio olisi johtanut pidempään suodattimeen ja olisi säilyttänyt nollat ​​täsmälleen samassa paikassa, tietysti. Jos liikkuva keskimääräinen suodatin toistetaan useita kertoja, sen kertoimet konvertoivat Gaussin ikkunaan (kuvio 3) keskimmäisen raja-ilmiön takia. Tietenkin todellinen Gaussian ulottuu ääretöntä molempiin suuntiin, joten ei ole muuta vaihtoehtoa kuin leikata se jossakin vaiheessa (tai ehkä moninkertaistaa se toisella ikkunalla). Lisäksi Gaussin keskihajonta on valittava. Tässä kuvassa (ja suodatinsuunnittimen toteutuksessa) olen ottanut käyttöön MATLABin oletusasetukset. Käytännössä saatat haluta yksinkertaisesti käyttää toistuvasti liikkuvaa keskiarvoa Gaussin ikkunan sijaan. Kun rekursiivisesti toteutetaan, liikkuva keskiarvo on erittäin tehokas. kun taas Gaussin ikkuna on toteutettava konvoluutiolla. Blackman-ikkuna Toinen mahdollisuus on valita yksi klassisista ikkunatoiminnoista, joita käytetään ikkunan-sync - suodattimissa ja käyttää sitä suodatinverkkona (katso erinomainen Wikipedia-sivu ikkunatoiminnoista). Esimerkiksi Ive poimi Blackman-ikkunan (Kuva 4). Tämä parantaa pysäytyskaistan vaimennusta entisestään, mutta silti näyttää sujuvan ajan verkkotunnuksen vastauksen ilman soittoa tai ylityksiä. Yhteenvetona voidaan todeta, että jos tarvitset sujuvaa dataa, mutta tarvitset paremman taajuusominaisuuden kuin perusliikevälin keskiarvo on tarjolla, käytettävissä on useita vaihtoehtoja. Suodatussuunnittelutyökalu Tätä artikkelia täydentää suodatussuunnittelutyökalu. Kokeile eri ikkunatoimintoja ja suodattimen pituutta ja näe vaikutus taajuusvasteeseen. Yritän nyt yrittää täydentää matlab-tehtäväprojektia seuraavalla kysymyksellä: Kirjoita funktio, nimeltään movingaverage, joka ottaa skalaarin nimeltä x tuloutussignaaliksi ja palauttaa skalaarin. Toiminto käyttää puskuria pitämään aiemmat tulot ja puskurissa voi olla enintään 25 sisääntuloa. Erityisesti toiminnon on tallennettava viimeisimmät 25 syötettä vektorissa (puskurissa). Joka kerta, kun toimintoa kutsutaan, se kopioi syöttösignaalin puskurin elementtiin. Jos puskurissa on jo 25 sisääntuloa, se hylkii vanhimman elementin ja tallentaa nykyisen puskurissa. Kun se on tallentanut panos puskurissa, se palauttaa kaikkien puskurin elementtien keskiarvon. Ratkaisu, jonka annan, on seuraava: autohalkaajan mukaan toiminto toimii oikein, kun arvot 1-50 kulkevat peräkkäin, mutta epäonnistuvat, kun meluisaa siniaallon arvoa kulkee peräkkäin (jota minulle on kerrottu, joka saattaa johtua joistakin eräänlainen pyöristysvirhe). Olisin kiitollinen, jos joku teistä voisi antaa minulle vihjeitä mahdollisista virheen vaiheista koodini (lisätty yllä). Kiitos etukäteenRekurssi tai itsenäinen rutiini 1.- Perusteet Recursion on eräänlainen hankala ja fiksu rakenne, joka sallii toiminnon kutsua itsensä. Matlab-ohjelmointikieli tukee sitä, joten funktio voi kutsua itsensä omaan toteutukseensa. Rekursiiviset algoritmit voidaan toteuttaa suoraan Matlabissa. Tässä on yksinkertainen esimerkki rekursiosta. Esimerkki rekursiivisesta koodista: function y tenexp (n) Tämä on rekursiivinen ohjelma y 10n: n laskemiseksi. Ohjelma toimii vain, jos n on ei-negatiivinen kokonaisluku. Jos n on negatiivinen, algoritmi ei tapahdu. jos n 0 y 1 muuten tätä linjaa ei tarvita, mutta tarkastusta varten y 10 tenexp (n-1) loppua Näissä lauselmissa (tarkoituksellisesti) vältettiin puolipisteitä nähdäksesi arvopäivitykset rekursiotasojen eri tasoilla. Voit tutkia koodia suorittamalla vaiheittainen toiminto editorissa. Tämä koodi on rakenteeltaan haara. Vertailu n 0 on rekursion perusta, koska se määrittelee lopullisen vai pienimmän tason. Tämä on ainoa tapa saada ohjelma lopettamaan itseään. 8216: n muut 8217-osa haarassa on avain rekursiivisuudelle. Tämä temppu on se, että se kutsuu alempaa arvoa (n - 1), ja se jatkaa niin, kunnes se nousee n: ksi 0. Tätä itseään kutsuttavaa tekniikkaa käytettäessä on useita huomioita: ensimmäinen on se, että se on mahdollista että toiminto kutsuu itseään ikuisesti eikä koskaan palauta vastausta. Tämä tapahtuu yllä olevassa koodissa, jos annamme negatiivisen argumentin. Toinen on se, että rekursiota voi johtaa tarpeettomiin laskelmiin, jotka voivat olla aikaa vieviä. Edellä oleva koodi käyttää uudestaan ​​ja uudestaan ​​ohjeita, jotka voidaan suorittaa yhdellä rivillä (10n). Kolmas huomio on, että se tarvitsee enemmän muistin jakamista. Suurissa järjestelmissä tehdyissä laskelmissa muistitilaa ei tule hukata ohjelman yläpuolelle. Toisaalta rekursiivisia ohjelmia voidaan helpommin kirjoittaa ja lukea kuin ei-rekursiivisia ohjelmia. 2.- Rekursiivisuus ratkaista tekijät Nyt we8217 aiotaan kirjoittaa funktiota laskemalla factorial (n) käyttäen tätä tekniikkaa uudelleen. Tiedämme, että se ei ole tehokkain tapa laskea factorial numero, mutta se on käsitteellisesti rekursiivinen laskenta helppo testata ja toteuttaa. funktio y fact (n) Meillä on suurin määrä y n Me menemme alas 0 jos n 0 y 1 else Kerromme kaikki luvut ennen meidän, yksi kerrallaan. y y tosiasia (n-1) end Jälleen nämä ovat tämän esimerkin näkökohdat: Toiminnolla on mahdollista kutsua itseään ikuisesti eikä koskaan palauta vastausta. Tämä tapahtuu yllä olevassa koodissa, jos annamme negatiivisen argumentin. On tarpeetonta laskentaa, joka voi olla aikaa vievää. Yllä oleva koodi käyttää uudestaan ​​ja uudestaan ​​ohjeita, jotka voidaan suorittaa yhdellä sisäänrakennetulla toiminnolla (factorial (n)). 3.- Video: Puzzle ratkaistu rekursiivisella Miten voin tehdä rekursiivisen liikkuvan keskiarvon ja varianssin nopeasti Tutki varianssin suodattimen demo ja kirjoita takaisin, jos sinulla on kysyttävää sen jälkeen: Demo ottaa paikallisen keskiarvon, varianssi ja keskihajonta harmaan asteikon kuva. Käyttäjäkuvaa, jos sitä käytetään, käytetään kuvana. Jos käyttäjätunnusta ei lähetetä, käyttäjää pyydetään käyttämään demo-kuvaa. CodeAnalyst-toiminnon localvariance (userImage) kirjoittama koodi Puhdista. clc Tyhjennä komentoikkuna. sulje kaikki Sulje kaikki luvut (lukuun ottamatta imtool.) - työtilaa Varmista, että työtilan paneeli on näkyvissä. Vaihda nykyinen kansio tämän m-tiedoston kansioon. (Alla oleva koodi on Brett Shoelson of The Mathworks.) Älä käytä näitä rivejä, jos kutsut tätä toisesta m-tiedostosta. jos (isdeployed) cd (fileparts (which (mfilename))) lopettaa Initialize. fontSize 20 if nargin 0 Ei kuvaa siirretään komentoriville. Lue yksi tavanomaisista MATLAB-demo - kuvista alkuperäisen harmaasävykuvan mukaan ja näytä se. promptMessage sprintf (Mikä kuva haluat käyttää. nKolikot tai kameramies) - painiketta questdlg (promptMessage, Select Image, Coins, Cameraman, coins) jos strcmp (nappi, kolikot) grayImage double (imread (coins. png) kaksinkertainen. muu harmaaImage double (imread (cameraman. tif)) Cast kaksoisiksi. end else Käytä komentoriviltä siirrettyä kuva-aluetta. grayImage double (userImage) Cast kaksinkertaiseksi. lopettaa aloitusajoitus. startTime tic subplot (2, 2, 1) imshow (grayImage) otsikko (Alkuperäinen kuva, FontSize, fontSize) asetettu (gcf, Position, get (0, Screensize)) Maksimoi luku. Epäpuhtaat kuvan 5: 5 keskiarvona (laatikkosuodatin) - ikkunassa. blurredImage conv2 (harmaa kuva, ne (5,5) 25) subplot (2, 2, 2) imshow (blurredImage) otsikko (Epäselvä kuva, FontSize, fontSize) Suorita varianssisuodatin. Lähtökuva on panoskuvan varianssi liukuikkuna 3: llä. VarianceFilterFunction (x) var (x (:)) varianssiLisäkuva (harmaa kuva, 3 3, VarianceFilterFunction) Vaihtoehtoinen tapa tehdä varianssi-suodatin on seuraavalla rivillä: varianceImage reshape (std (im2col (originalImage, 3 3, liukuva) , size (originalImage) -2) subplot (2, 2, 3) imshow (varianceImage) otsikko (Varianssi Kuva, FontSize, fontSize) Laske varianssin neliöjuuri saadaksesi keskihajonta. standardDeviationImage sqrt (varianceImage) subplot (2, 2, 4) imshow (standardDeviationImage) otsikko (Standard deviation kuva, FontSize, fontSize) kulunutTime toc (startTime) viestin sprintf (DonennTulettu aika .2f sekuntia, Localvariance () - toiminnon loppu. 5. heinäkuuta, 12:33, ImageAnalyst ltimageanal. mailinatorgt kirjoitti: gt Tutki varianssin suodattimen demo ja kirjoita takaisin, jos sinulla on kysymyksiä GT sen jälkeen: gt gt Demo ottaa harmaasävykaavan paikallisen keskiarvon, varianssin ja keskihajonnan gt: n. gt: n käyttäjätiedosto, jos sitä käytetään, käytetään kuvana. gt Jos käyttäjänimeä ei lähetetä sisään, käyttäjää pyydetään käyttämään demo-kuvaa. gt Koodin kirjoittama ImageAnalyst gt - toiminto localvariance (userImage) gt Puhdista. gt clc Tyhjennä komentoikkuna. gt sulje kaikki Sulje kaikki luvut (lukuun ottamatta imtool.) gt - työtilaa Varmista, että työtilan paneeli on näkyvissä. gt gt Muuta nykyinen kansio tämän m-tiedoston kansioon. gt (Alla oleva koodi on Brett Shoelson of The Mathworks.) gt Älä käytä näitä rivejä, jos kutsut tätä toisesta m-tiedostosta. gt jos (isdeployed) gt cd (fileparts (which (mfilename))) gt loppu gt gt alustetaan. gt fontSize 20 gt jos nargin 0 gt Ei kuvaa siirretään komentoriville. gt: Lue alkuperäisen harmaasävykuvan tavallisista MATLAB-demo-kuvista gt ja näytä se. gt promptMessage sprintf (Mikä kuva haluat käyttää. n GT-kolikot tai kameramainen) gt-painike questdlg (promptMessage, Valitse kuva, kolikot, gt-kuvaaja, kolikot) gt jos strcmp (nappi, kolikot) gt grayImage double (imread. png)) Cast kaksoisiksi. gt else gt grayImage double (imread (cameraman. tif)) Cast kaksinkertaiseksi. gt end gt toinen gt Käytä komentoriviltä siirrettyä kuvamuotoa. gt grayImage double (userImage) Cast kaksoisiksi. gt end gt gt Käynnistysajoitus. gt; starttime tic gt gt: n sublot (2, 2, 1) gt imshow (grayImage) gt otsikko (alkuperäinen kuva, fontsize, fontSize) gt set (gcf, position, get (0, Screensize)). gt gt Häivyttää kuva 5: n prosentin keskiarvolla (laatikko suodatin) - ikkunassa. gt: n summa (2, 2, 2) gt imshow (blurredImage), gt title (epätarkkuuskuva, fontsize, fontSize) gt gt Suorita varianssi-suodatin. gt Tuloskuva on panoskuvan varianssi 3 x 3 liukuvaan ikkunaan. gt VarianceFilterFunction (x) var (x (:)) gt varianceImage nlfilter (harmaakuva, 3 3, VarianceFilterFunction) gt Vaihtoehtoinen tapa tehdä varianssi-suodatin on seuraavalla rivillä: gt varianceImage reshape (std (im2col (originalImage, 3 3 GT-koko (alkuperäinenImage) -2, gt-koko (originalImage) -2) gt subplot (2, 2, 3) gt imshow (varianceImage) gt otsikko (Varianssi Kuva, FontSize, fontSize) gt gt Lasketaan varianssin neliöjuuri saadaksesi standardin GT poikkeama. gt; standardin poikkeama (gtd), (gtd), (gtd), (gtd), (gtd), gt (yleinen poikkeama, fontsize) gt viivästetty aikamäärä (starttime) gt gt viesti sprintf (DonennElmetty aika .2f sekuntia, gt kulunut aika) gt msgbox (viesti) gt palauttaa Localvariance () - toiminnon loppu. Kuitenkin minulla ei ole imshow tai nlfilter, eli I dont on kuvankäsittely työkalupakki. ja ei pääse siihen, että hankinta jne. Olen ajatellut ehkä on olemassa yleinen tapa Matlab tehdä rekursiivinen laskenta, oli se rekursiivinen keskiarvo, tai rekursiivinen variancestd, tai muita hetkiä jne. Kaikki ajatukset Kiitos paljon Aihe: Miten Käytän rekursiivista liikkuvan keskiarvon ja varianssin nopeasti From: Steve Amphlett Luna Moon londonmoongmailgt kirjoitti viestin lt6fc04321-2ece-4f41-ad2d-4a0a2b436baex27g2000yqb. googlegroupsgt. gt gt Suuri koodi gt gt Kuitenkin minulla ei ole imshow tai nlfilter, eli I dont on image gt jalostus työkalupakki. ja ei pääse siihen, että hankinta jne. gt gt Ajattelen ehkä on yleinen tapa Matlab tehdä gt rekursiivinen laskenta, GT gt on se rekursiivinen keskiarvo, tai rekursiivinen variancestd tai muut hetket, gt jne. gt gt ajatuksia Kiitos paljon Kyllä. Miksi käytät sanaa rekursiivisesti Tulosi eivät ole riippuvaisia ​​tuloksista. No vain käyttää blockproc ja var () - toimintoja - thats yksi tapa. Aihe: Miten rekursiivinen liikkuvan keskiarvon ja varianssin voi tehdä nopeasti From: Oleg Komarov Luna Moon ltlunamoonmoongmailgt kirjoitti viestin lt2b265914-45f5-4b6e-9a85-c6d07191bfafs9g2000yqd. googlegroupsgt. gt Hi all, gt gt Rekursiivisen liikkuvan tai liikkuvan keskiarvon, gt gt resultt alfa pt (1-alfa) tulos, gt gt missä pt on uusi saapumisaika. gt gt Miten voimme tehdä tämän nopeasti Matlabissa käyttämällä suodatustoiminnon muotoa gt eli se toimii koko sarjalla sarakkeittain. gt gt Nyt, miten soveltaa samaa konseptia liikkuvan variansyyden gt gt: i arvata jotta liikkuvan varianssin, meidän täytyy ensin saada GT liikkuvan keskiarvon gt gt ja sitten liikkuvan keskialueen neliö: gt gt rollingmeansquaret alphapt2 (1- gt alpha) rollingmeansquare, gt gt sitten: gt gt rollingvariancet rollingmeansquaret - rollingmeant 2. gt gt Olen oikein Miten tehdä tämä nopea gt gt Kiitos Voit ajatella katselulistan säikeiksi, jotka olet kirjanmerkitty. Voit lisätä kenttälistalle tunnisteita, tekijöitä, säikeitä ja jopa hakutuloksia. Tällä tavoin voit helposti seurata aiheita, joita sinä olet kiinnostunut. Voit katsoa katselulistasi napsauttamalla QuoteMy Newsreaderquot-linkkiä. Jos haluat lisätä kohteita kellolistallesi, napsauta quotadd nähdäksesi listanlinkin linkin minkä tahansa sivun alareunassa. Kuinka voin lisätä kohteen kellolistalleni Jos haluat lisätä hakuehtoja katselulistalle, etsi haluamasi termi hakukenttään. Napsauta lainaa Lisää tämä haku katselusivulle - linkkiä hakutulossivulla. Voit myös lisätä tagin katselulistallesi etsimällä tunnistetta direktiivin quottagilla: tagnamequot, jossa tagname on tunnisteen nimi, jota haluat katsoa. Voit lisätä tekijän katselulistalle siirtymällä kirjoittajien profiilisivulle ja napsauttamalla sivun yläreunassa olevaa viittausta Lisää tämä tekijä katselusivun listalle - linkkiä. Voit myös lisätä tekijän katselulistallesi siirtymällä säikeeseen, jonka tekijä on lähettänyt ja napsauttamalla lainaa "Lisätä tämä tekijä katselusivulle" - linkkiä. Sinulta ilmoitetaan aina, kun kirjoittaja tekee viestin. Voit lisätä kierteen katselulistalle siirtymällä viestilehtisivulle ja napsauttamalla rivin lisäämällä tämän säiön sivun yläreunaan linkkikohtaan. Tietoa uutisryhmistä, lukijoista ja MATLABista Keskustelu Mitä ovat uutisryhmät Uutisryhmät ovat maailmanlaajuinen foorumi, joka on avoin kaikille. Uutisryhmiä käytetään keskustelemaan monista aiheista, ilmoituksista ja kauppatiedostoista. Keskustelut ovat kierrettyjä tai ryhmiteltyinä siten, että voit lukea lähetetyn sanoman ja kaikki vastaukset kronologisessa järjestyksessä. Tämä helpottaa keskustelun lähteen seurantaa ja nähdä, mitä on jo sanottu ennen kuin lähetät oman vastauksen tai lähetät uuden viestin. Uutisryhmän sisältöä jakavat eri organisaatioiden isännöivät palvelimet Internetissä. Viestejä vaihdetaan ja hallitaan avoimen standardiprotokollan avulla. Yksikään yksikkö ei lue uutisia. On olemassa tuhansia uutisryhmiä, joista kukin käsittelee yhtä aihepiiriä tai kiinnostavaa aluetta. MATLAB Central Newsreader lähettää ja näyttää viestit comp. soft-sys. matlab-uutisryhmässä. Kuinka lukea tai postittaa uutisryhmille Voit käyttää lukea ja lähettää viestejä tässä uutisryhmässä MATLAB Centralin verkkosivuilla. MATLAB Centralin isännöi MathWorks. MATLABin Keskuslukijaa lähettämäsi viestit näkevät kaikki uutisryhmien avulla riippumatta siitä, miten he pääsevät uutisryhmiin. MATLAB Centralin käyttöä on useita etuja. Yksi tili MATLAB Central - tili on sidottu MathWorks-tiliisi helpon pääsyn. Käytä valitsemasi sähköpostiosoitetta MATLABin keskuslukijalla voit määrittää vaihtoehtoisen sähköpostiosoitteen postitusosoitteesi välttäen ensisijaisen postilaatikon sekavuutta ja vähentämällä roskapostia. Roskapostin hallinta Useimmat uutisryhmän roskapostin suodattaa MATLAB Central Newsreader. Merkintäviestit voidaan merkitä johonkin kirjautuneen käyttäjän merkittyyn merkintään. Tunnisteita voidaan käyttää avainsanoina löytääksesi kiinnostavia tiedostoja tai luokitella kirjanmerkittyjä postitusasi. Voit sallia muiden näkevän tunnistetietosi, ja voit tarkastella tai etsiä myös otherrsquo-tunnisteita sekä koko yhteisön yhteisöjä. Merkitseminen tarjoaa tavan nähdä sekä suuret trendejä että pienemmät, hämärämpiä ideoita ja sovelluksia. Katso luetteloita Kelloristeluiden luominen mahdollistaa ilmoituksen tekijöiden, säikeen tai minkä tahansa hakumuuttujan valitsemista lähetyksistä tehdyistä päivityksistä. Varmuuslistailmoituksia voi lähettää sähköpostilla (päivittäinen pilkku tai välitön), My Newsreaderissa tai RSS-syötteen kautta. Muita tapoja päästä uutisryhmille Käytä uutisten lukijaa koulun, työnantajan tai Internet-palveluntarjoajan kautta Maksuta uutisryhmän käyttöoikeutta kaupalliselta palveluntarjoajalta Käytä Google-ryhmiä Mathforum. org tarjoaa uutisjulkaisijalle pääsyn comp. softin sys. matlab-uutisryhmään Suorita oma palvelimelle. Tyypillisiä ohjeita on: slyckng. phppage2 Valitse oma maa

No comments:

Post a Comment