Tuesday, October 11, 2016

Bewegende Gemiddelde Filter Matlab Conv

Die gebruik van MATLAB, hoe kan ek die 3-daagse bewegende gemiddelde van 'n spesifieke kolom van 'n matriks en voeg die bewegende gemiddelde op daardie matriks ek probeer om die 3-daagse bewegende gemiddelde van onder bereken op die top van die matriks. Ek het my kode voorsien: Gegewe die volgende matriks A en masker: Ek het probeer die implementering van die conv opdrag maar Ek ontvang 'n fout. Hier is die conv opdrag Ek het probeer om te gebruik op die 2de kolom van matriks A: Die uitset Ek verlang word in die volgende matriks: Indien u enige voorstelle, sou ek dit baie waardeer. Dankie vir kolom 2 van matriks A, ek berekening van die 3-daagse bewegende gemiddelde soos volg en die plasing van die resultaat in kolom 4 van matriks A (Ek herdoop matriks n as 39desiredOutput39 net ter illustrasie). Die 3-dag gemiddeld van 17, 14, 11, is 14 die 3-dag gemiddeld van 14, 11, 8 is 11 die 3-dag gemiddeld van 11, 8, 5 is 8 en die 3-dag gemiddeld van 8, 5, 2 is 5. Daar is geen waarde in die onderste 2 rye vir die 4de kolom omdat die berekening vir die 3-daagse bewegende gemiddelde begin aan die onderkant. Die 39valid39 uitset sal nie gewys word tot ten minste 17, 14, en 11. Hopelik sal hierdie sin uitvoering maak Aaron 12 Junie 13 by 01:28 1 Antwoord In die algemeen is dit sal help as jy die fout sal wys. In hierdie geval jy doen twee dinge verkeerd: Eerste het jou konvolusie te verdeel deur drie (of die lengte van die bewegende gemiddelde) Tweedens, let op die grootte van c. Jy kan nie net pas c in 'n. Die tipiese manier om 'n bewegende gemiddelde sou wees om dieselfde te gebruik, maar dit nie die geval is lyk wat jy wil hê. In plaas jy gedwing word om 'n paar lyne gebruik: Ek het nodig om 'n bewegende gemiddelde bereken oor 'n data-reeks, binne 'n for-lus. Ek het na die bewegende gemiddelde te kry oor N9 dae. Die skikking Im rekenaar in 4-reeks van 365 waardes (M), wat op sy beurt is gemiddelde waardes van 'n ander stel data. Ek wil die gemiddelde waardes van my data te stip met die bewegende gemiddelde in een stuk. Ek googled 'n bietjie oor bewegende gemiddeldes en die conv bevel en gevind iets wat ek probeer implementeer in my code .: So basies, ek bereken my gemiddelde en plot dit met 'n (verkeerde) bewegende gemiddelde. Ek opgetel die WTS waarde regs af die MathWorks webwerf, so dit is nie korrek nie. (Bron: www. mathworks. nl/help/econ/moving-average-trend-estimation) My probleem is egter dat ek nie verstaan ​​wat dit WTS is. Kan iemand verduidelik As dit iets te doen met die gewig van die waardes het: dit is ongeldig in hierdie geval. Alle waardes word geweeg dieselfde. En as ek doen dit heeltemal verkeerd, kan ek kry 'n paar hulp daarmee My opregte dank. gevra 23 September 14 aan 19:05 Die gebruik conv is 'n uitstekende manier om 'n bewegende gemiddelde implementeer. In die kode wat jy gebruik, WTS is hoeveel jy weeg elke waarde (as jy geraai). die som van daardie vektor moet altyd gelyk wees om een ​​te wees. Indien u verkies om elke waarde gewig eweredig en doen 'n grote N bewegende filter dan sou jy wil doen Die gebruik van die geldige argument in conv sal lei tot wat minder waardes in Me as jy in M. Gebruik dieselfde as jy dit nie omgee die gevolge van nul padding. As jy die seinverwerking toolbox kan jy cconv gebruik as jy wil om te probeer 'n omsendbrief bewegende gemiddelde. Iets soos Jy moet die conv en cconv dokumentasie te lees vir meer inligting as jy reeds havent. Jy kan filter gebruik om 'n lopende gemiddelde vind sonder die gebruik van 'n for-lus. Hierdie voorbeeld vind die loop gemiddeld van 'n 16-element vektor, met behulp van 'n venster grootte van 5. 2) gladde as deel van die krommepassing Gereedskap (wat beskikbaar is in die meeste gevalle) jj glad (y) glad die data in die kolom vektor y die gebruik van 'n bewegende gemiddelde filter. Die resultate word in die kolom vektor jj. Die verstek span vir die bewegende gemiddelde is 5.FIR filters, IIR filters, en die lineêre konstante-koëffisiënt verskilvergelyking Kousale bewegende gemiddelde (FIR) Comments nie Weve bespreek stelsels waarin elke monster van die produksie is 'n geweegde som van (sekere van die ) die monsters van die insette. Kom ons neem 'n oorsaaklike geweegde som stelsel, waar oorsaaklike beteken dat 'n gegewe uitset monster hang net af van die huidige insette monster en ander insette vroeër in die ry. Nóg lineêre stelsels in die algemeen nie, en eindig impulsrespons stelsels in die besonder, moet oorsaaklike wees. Maar oorsaaklikheid is gerieflik vir 'n soort van analise wat op pad was om gou te verken. As ons simboliseer die insette as waardes van 'n vektor x. en die uitgange as die ooreenstemmende waardes van 'n vektor y. dan so 'n stelsel kan geskryf word as waar die b waardes quotweightsquot toegepas word om die huidige en vorige insette monsters om die huidige uitset monster te kry. Ons kan dink aan die uitdrukking as 'n vergelyking met die gelykaanteken wat beteken gelykes, of as 'n prosedurele onderrig, met die gelykaanteken wat beteken opdrag. Kom ons skryf die uitdrukking vir elke uitset monster as 'n MATLAB lus van opdrag state, waar x is 'n N-lengte vektor van insette monsters, en b is 'n M-lengte vektor van gewigte. Ten einde te gaan met die spesiale geval aan die begin, sal ons x insluit in 'n meer vektor xhat wie se eerste M-1 monsters is nul. Ons sal die geweegde opsomming vir elke y (N) as 'n innerlike produk te skryf, en sal 'n paar wysigings van die insette te doen (soos b omkeer) vir hierdie doel. Hierdie soort stelsel word dikwels bekend as 'n bewegende gemiddelde filter, vir ooglopende redes. Van ons vroeër besprekings, moet dit duidelik dat so 'n stelsel is lineêre en verskuiwing-invariante wees. Natuurlik sou dit baie vinniger wees om die MATLAB konvolusie funksie conv (gebruik) in plaas van ons mafilt (). In plaas van die oorweging van die eerste M-1 monsters van die insette tot nul, ons hulle kan oorweeg om dieselfde as die laaste M-1 monsters wees. Dit is dieselfde as die behandeling van die insette as periodieke. Wel gebruik cmafilt () as die naam van die funksie, 'n klein verandering van die vroeër mafilt () funksie. In die bepaling van die impulsrespons van 'n stelsel, is daar gewoonlik geen verskil tussen die twee, aangesien alle nie-aanvanklike monsters van die insette is nul: Aangesien 'n stelsel van hierdie aard is lineêre en skuif-invariante, ons weet dat die uitwerking daarvan op enige sinusgolf sal slegs volgens skaal en skuif dit. Hier is dit sake wat ons gebruik die omsendbrief weergawe Die sirkulêr-gekonvuleerde weergawe geskuif en afgeskaal 'n bietjie, terwyl die weergawe met gewone konvolusie verwring aan die begin. Kom ons kyk wat die presiese skalering en verskuiwing is deur die gebruik van 'n FFT: Beide toevoer en afvoer het amplitude net by frekwensies 1 en -1, wat is soos dit moet wees, aangesien die insette was 'n sinusgolf en die stelsel was lineêre. Die uitset waardes groter deur 'n verhouding van 10,6251 / 8 1,3281. Dit is die wins van die stelsel. Wat van die fase Ons moet net om te kyk waar die amplitude is nie-nul: Die insette het 'n fase van pi / 2, soos ons versoek. Die uitset fase verskuif met 'n bykomende 1,0594 (met teenoorgestelde teken vir die negatiewe frekwensie), of oor 1/6 van 'n siklus van die reg, soos ons kan sien op die grafiek. Nou kan probeer om 'n sinusgolf met dieselfde frekwensie (1), maar in plaas van amplitude 1 en fase pi / 2, Kom ons probeer amplitude 1,5 en fase 0. Ons weet dat net frekwensie 1 en -1 nie-nul amplitude sal hê, so laat net kyk na hulle: weereens die amplitude verhouding (15,9377 / 12,0000) is 1,3281 - en as vir die fase dit weer verskuif deur 1,0594 as hierdie voorbeelde is tipiese, kan ons die effek van ons stelsel (impulsrespons 0,1 0,2 voorspel 0,3 0,4 0,5) op enige sinusgolf met frekwensie 1 - die amplitude sal verhoog word met 'n faktor van 1,3281 en die (positiewe frekwensie) fase sal verskuif deur 1,0594. Ons kan gaan op na die uitwerking van hierdie stelsel op sinusoïede van ander frekwensies bereken deur dieselfde metodes. Maar daar is 'n baie makliker manier, en een wat die algemene punt vestig. Sedert (omsendbrief) konvolusie in die tydgebied beteken vermenigvuldiging in die frekwensiedomein, daaruit volg dat Met ander woorde, die DFT van die impulsrespons is die verhouding van die DFT van die uitset na die DFT van die insette. In hierdie verband die DFT koëffisiënte is komplekse getalle. Sedert ABS (C1 / C2) ABS (c1) / ABS (C2) vir alle komplekse getalle C1, C2, hierdie vergelyking vertel ons dat die amplitude spektrum van die impulsrespons altyd die verhouding van die amplitude spektrum van die uitset na wat sal wees van die insette. In die geval van die fase spektrum, hoek (C1 / C2) hoek (c1) - hoek (C2) vir alle C1, C2 (word met dien verstande dat fases verskil deur n2pi gelyk beskou). Daarom is die fase spektrum van die impulsrespons sal altyd die verskil tussen die fase spektra van die uitset en die insette (met alles wat regstellings deur 2pi is nodig om die resultaat tussen - pi en pi hou) wees. Ons kan die fase-effekte sien meer duidelik as ons oop maak die voorstelling van fase, dit wil sê as ons verskeie veelvoude voeg van 2pi as wat nodig is om die spronge wat geproduseer word deur die periodieke aard van die () funksie hoek te verminder. Hoewel die amplitude en fase gewoonlik gebruik vir grafiese en selfs 'n tabel aanbieding, want hulle is 'n intuïtiewe manier om te dink oor die gevolge van 'n stelsel op die verskillende frekwensie komponente van sy insette, die komplekse Fourier koëffisiënte is meer nuttig algebraïes, omdat hulle toelaat die eenvoudige uitdrukking van die verhouding die algemene benadering wat ons so pas gesien sal saam met arbitrêre filters van die tipe geskets, waarin elke uitset monster is 'n geweegde som van sommige stel insette monsters. Soos vroeër genoem, is hierdie dikwels genoem Eindige Impulse Response filters, omdat die impulsrespons is van beperkte omvang, of soms Moving Gemiddelde filters. Ons kan die frekwensieweergawe kenmerke van so 'n filter van die FFT van sy impulsrespons te bepaal, en ons kan ook nuwe filters met gewenste eienskappe te ontwerp deur IFFT van 'n spesifikasie van die frekwensieweergawe. Outoregressiewe (IIR) Filters Daar sal min punt in 'name vir FIR filters wees, tensy daar was 'n paar ander soort (e) om hulle te onderskei van, en so diegene wat bestudeer pragmatiek sal nie verbaas wees om te verneem dat daar wel nog 'n groot soort lineêre tyd-invariante filter. Hierdie filters is soms genoem rekursiewe omdat die waarde van die vorige uitsette (asook vorige insette) aangeleenthede, hoewel die algoritmes in die algemeen geskryf met behulp van iteratiewe konstrukte. Hulle word ook genoem Oneindige Impulse Response (IIR) filters, want in die algemeen hul reaksie op 'n impuls gaan op tot in ewigheid. Hulle word ook soms genoem outoregressiewe filters, omdat die koëffisiënte kan beskou word as die gevolg van doen lineêre regressie te sein waardes uit te druk as 'n funksie van vroeër sein waardes. Die verhouding van EIR en OIR filters kan duidelik gesien word in 'n lineêre konstante-koëffisiënt verskilvergelyking, dit wil sê die oprigting van 'n geweegde som van uitsette gelykstaande aan 'n geweegde som van insette. Dit is soos die vergelyking wat ons vroeër het vir die oorsaaklike FIR filter, behalwe dat bykomend tot die geweegde som van insette, ons het ook 'n geweegde som van uitsette. As ons wil hê om te dink aan dit as 'n prosedure vir die opwekking van uitset monsters, moet ons die vergelyking herrangskik om 'n uitdrukking vir die huidige uitset monster y (N) te kry, die aanneming van die konvensie dat 'n (1) 1 (soos deur skalering ander as en BS), ons kan ontslae te raak van die 1 / n (1) term: y (n) b (1) x (n) b (2) x (n-1). b (LW1) x (N-NB) - 'n (2) y (N-1) -. - 'N (Na1) y (N-na) As al die n (N) buiten 'n (1) is nul, dit verminder na ons ou vriend die oorsaaklike FIR filter. Dit is die algemene geval van 'n (kousale) LTI filter, en geïmplementeer word deur die MATLAB funksie filter. Kom ons kyk na die geval waar die ander as b b koëffisiënte (1) is nul (in plaas van die FIR geval, waar die n (N) is nul): In hierdie geval, die huidige uitset monster y (N) word bereken as 'n geweegde kombinasie van die huidige insette monster x (n) en die vorige uitset monsters y (n-1), y (n-2), ens Om 'n idee te kry van wat gebeur met sulke filters kry, kan ons begin met die geval waar: dit wil sê, die huidige uitset monster is die som van die huidige insette monster en die helfte van die vorige uitset monster. Wel neem 'n inset impuls deur 'n paar keer stappe, een op 'n slag. Dit moet duidelik op hierdie punt dat ons maklik 'n uitdrukking vir die nde uitset monster waarde kan skryf: dit is net (As MATLAB getel vanaf 0, sou dit eenvoudig .5n wees). Sedert wat ons berekening is die impulsrespons van die stelsel, het ons gedemonstreer deur 'n voorbeeld dat die impulsrespons, want dit kan hê oneindig baie nie-nul monsters. Om hierdie triviale eerste-orde filter in MATLAB te implementeer, kan ons gebruik filter. Die oproep sal lyk: en die resultaat is: Is hierdie besigheid eintlik nog lineêr Ons kan kyk na hierdie empiries: Vir 'n meer algemene benadering, oorweeg die waarde van 'n uitset monster y (N). Deur opeenvolgende vervanging kan ons dit skryf, want dit is net soos ons ou vriend die konvolusie-som vorm van 'n FIR filter, met die impulsrespons deur die uitdrukking .5k. en die lengte van die impulsrespons om oneindig. So dieselfde argumente wat ons gebruik om te wys dat FIR filters was lineêre sal nou hier van toepassing. Tot dusver dit mag lyk soos 'n groot bohaai oor nie veel nie. Wat is hierdie hele lyn van ondersoek goed vir Wel beantwoord hierdie vraag in fases, wat begin met 'n voorbeeld. Dit is nie 'n groot verrassing dat ons kan bereken 'n gemonsterde eksponensiële deur rekursiewe vermenigvuldiging. Kom ons kyk na 'n rekursiewe filter dat daar iets minder voor die hand liggend nie. Hierdie keer goed maak dit 'n tweede-orde filter, sodat die oproep om te filter van die vorm sal wees Kom stel die tweede uitset koëffisiënt a2 om -2cos (2pi / 40), en die derde uitset koëffisiënt A3 tot 1, en kyk na die impulsrespons. Nie baie nuttig as 'n filter, eintlik, maar dit genereer 'n gemonsterde sinusgolf (van 'n impuls) met drie vermenigvuldig-voeg per monster Ten einde te verstaan ​​hoe en hoekom dit doen dit, en hoe rekursiewe filters kan ontwerp en in ontleed die meer algemene geval, moet ons terug te stap en 'n blik op 'n paar ander eienskappe van komplekse getalle, op pad na die begrip van die Z transform. Created op Woensdag 8 Oktober, 2008 20:04 Laas Opdateer op Donderdag, Maart 14, 2013 01 : 29 Geskryf deur Batuhan Osmanoglu Hits: 38924 bewegende gemiddelde in Matlab myself dikwels ek 'n behoefte aan die gemiddeld van die data wat ek het om die geraas te verminder 'n bietjie. Ek het n paar funksies te doen presies wat ek wil hê, maar matlabs gebou in filter funksie werk redelik goed sowel. Hier Siek skryf oor 1D en 2D gemiddeld van data. 1D filter kan verwesenlik word deur die filter funksie. Die filter funksie vereis ten minste drie insette parameters: die teller koëffisiënt vir die filter (b), die deler koëffisiënt vir die filter (a), en die data (X) natuurlik. 'N loop gemiddelde filter kan gedefinieer word deur eenvoudig: Vir 2D data kan ons die Matlabs filter2 funksie gebruik. Vir meer inligting oor hoe die filter werk, kan jy tik: Hier is 'n vinnige en vuil implementering van 'n 16 deur 16 bewegende gemiddelde filter. Eerstens moet ons die filter te definieer. Sedert alles wat ons wil hê, is gelyk bydrae van alle bure kan ons net gebruik om die kinders funksie. Ons verdeel alles met 256 (1616), aangesien ons nie wil hê dat die algemene vlak (amplitude) van die sein verander. Om die filter kan ons net die volgende Hier sê van toepassing is die resultate vir fase van 'n Kong interferogram. In hierdie geval Range is in Y-as en Azimuth is gekarteer op X-as. Die filter was 4 pixels wyd in Range en 16 pixels wyd in Azimuth. Teken Search29 September 2013 Moving gemiddeld konvolusie Wat is bewegende gemiddelde en wat is dit goed vir Hoe beweeg gemiddelde gedoen deur die gebruik van konvolusie Moving gemiddelde is 'n eenvoudige operasie gewoonlik gebruik om geraas van 'n sein te onderdruk: ons stel die waarde van elke punt aan die gemiddelde van die waardes in die buurt. Deur 'n formule: Hier x is die insette en y is die uittreesein, terwyl die grootte van die venster is w, veronderstel vreemd te wees. Die formule hierbo beskryf 'n simmetriese werking: die monsters geneem word van beide kante van die werklike punt. Hier is 'n werklike lewe voorbeeld. Die punt waarop die venster eintlik gelê is rooi. Waardes buite x veronderstel is om nulle wees: om te speel en sien die gevolge van bewegende gemiddelde, 'n blik op hierdie interaktiewe demonstrasie. Hoe om dit te doen deur konvolusie Soos jy dalk herken het, die berekening van die eenvoudige bewegende gemiddelde is soortgelyk aan die konvolusie: in beide gevalle 'n venster is gegly langs die sein en die elemente in die venster word opgesom. So, gee dit 'n probeer om dieselfde ding te doen deur gebruik te maak van konvolusie. Gebruik die volgende parameters: Die verlangde uitset is: As eerste benadering, laat ons probeer om dit wat ons kry deur convolving die x sein deur die volgende k kern: Die uitset is presies drie keer groter as die verwagte. Dit kan ook gesien word dat die uitset waardes is die opsomming van die drie elemente in die venster. Dit is as gevolg tydens konvolusie die venster gly langs, al die elemente daarin word vermenigvuldig met een en dan opgesom: yk 1 cdot x 1 cdot x 1 cdot x Om die gewenste waardes van y kry. die uitset sal verdeeld wees teen 3: deur 'n formule insluitende die afdeling: Maar sou dit nie wees optimale om die afdeling te doen tydens konvolusie Hier kom die idee deur herrangskik die vergelyking: So sal ons die volgende k kern gebruik: In hierdie manier waarop ons sal kry die verlangde uitset: In die algemeen: as ons wil doen bewegende gemiddelde deur konvolusie 'n venster grootte van w. Ons sal gebruik maak van die volgende k kern: 'n eenvoudige funksie doen die bewegende gemiddelde is: 'n Voorbeeld gebruik is:


No comments:

Post a Comment