Monday 16 October 2017

Glidande Medelvärde Rekursiv Filter


Scientist och Engineers Guide till Digital Signal Processing av Steven W. Smith, Ph. D. En enorm fördel med det glidande medelfiltret är att det kan implementeras med en algoritm som är mycket snabb. För att förstå denna algoritm, föreställ dig att du skickar en insignal, x, genom ett sjupunkts glidande medelfilter för att bilda en utsignal, y. Se nu hur två närliggande utgångspunkter, y 50 och y 51, beräknas: Dessa är nästan samma beräkningspunkter x 48 till x 53 måste läggas till y 50 och igen för y 51. Om y 50 redan har beräknats , det effektivaste sättet att beräkna y 51 är: När y 51 har hittats med y 50 kan y 52 beräknas från prov y 51 och så vidare. När den första punkten är beräknad i y, kan alla andra punkter hittas med endast ett enda tillägg och subtraktion per punkt. Detta kan uttryckas i ekvationen: Observera att denna ekvation använder två datakällor för att beräkna varje punkt i utgången: poäng från inmatningen och tidigare beräknade punkter från utgången. Detta kallas en rekursiv ekvation, vilket innebär att resultatet av en beräkning används i framtida beräkningar. (Termen rekursiv har också andra betydelser, särskilt i datavetenskap). Kapitel 19 diskuterar en rad olika rekursiva filter mer detaljerat. Var medveten om att det rörliga genomsnittliga rekursiva filtret är väldigt annorlunda än typiska rekursiva filter. I synnerhet har de mest rekursiva filtren ett oändligt långt impulsrespons (IIR), som består av sinusoider och exponentiella. Impulssvaret för det glidande medlet är en rektangulär puls (finitivt impulsrespons eller FIR). Denna algoritm är snabbare än andra digitala filter av flera anledningar. För det första finns det bara två beräkningar per punkt, oberoende av längden på filterkärnan. För det andra är addition och subtraktion den enda matteoperationen som behövs, medan de flesta digitala filter kräver tidskrävande multiplikation. För det tredje är indexeringssystemet mycket enkelt. Varje index i ekv. 15-3 hittas genom tillsats eller subtraktion av heltalskonstanter som kan beräknas före filtreringsstart (dvs p och q). Framåt kan hela algoritmen utföras med heltalrepresentation. Beroende på vilken hårdvara som används kan heltal vara mer än en storleksordning snabbare än flytpunkten. Överraskande fungerar heltalsrepresentation bättre än flytpunkt med denna algoritm, förutom att det blir snabbare. Avrundningsfelet från flytpunktsräkning kan ge oväntade resultat om du inte är försiktig. Tänk dig till exempel att en 10.000 provsignal filtreras med denna metod. Det sista provet i den filtrerade signalen innehåller det ackumulerade felet på 10 000 tillägg och 10 000 subtraheringar. Detta framträder i utsignalen som en drivförskjutning. Helheter har inte detta problem eftersom det inte finns något avrundningsfel i aritmetiken. Om du måste använda flytpunkten med denna algoritm, visar programmet i tabell 15-2 hur du använder en dubbel precisionsackumulator för att eliminera denna drift. Recursive Moving Average Filter bull quotit (0) 0 bull 2 ​​160160160160 Det rörliga genomsnittliga filtret är en FIR-filter med längd N med alla kranar som är lika med (1N). 160 Den är känd för eländig frekvensavskiljning, men utmärkt tidssvar - i det avseendet är det Bessels a Bessel filter.160 Du kan implementera det med SigmaStudios FIR block Som beskrivs här: Ju längre filteret desto mer utjämnande - men standard FIR-filteralgoritmen använder många instruktioner för stora filter, eftersom det måste multiplicera koefficienter för varje kran.160 Detta är ett slöseri när alla koefficienterna är desamma .160 Som kapitel 15 i Steven W. Smiths bok påpekar kan du göra ett glidande medelfilter med en rekursiv teknik som har en kran före och efter en (N-1) storleksfördröjning.160 Ett sådant filter visas nedan som en del av En testkrets med signalkälla och ett Bessel-filter för jämförelse: 160160160160 Koefficienterna dras ut till det enskilda förstärkningsblocket vid ingången.160 Det aktuella provet lägger till utsignalen när det går in i fördröjningen, varvid det fördröjda provet subtraheras från utgången när det går ut.160 Adderaren med Feedback ackumulerar dessa tillägg och subtraheringar för att bilda utmatningen - det gör något som är trivialt i C men är annars en smärta i GUI.160. Även om en rekursiv teknik används, är filtret ett äkta FIR-filter - längden på sin impuls Svaret ställs in endast av din fördröjning. 160160160160 Mitt testinmatning är en kvadratvåg med extra ljud.160 Filtrerade resultat visas som övre spår i båda bilderna - Först det rörliga genomsnittliga filtret: Bessel-filtret: 160160160160 Det glidande medelfiltret ger mer ljud genom, men det bevarar bättre kvadratiska vågformar - det går inte runt hörnen och upp och ner sluttningarna är symmetriska (dess linjära fas). 160 Lyssna på de två vågformerna med hörlurar visar ett liknande resultat - mer ljud med det glidande medelfiltret, men det karakteristiska Ljudet av en kvadratvåg kommer igenom. Moore Consultancy Services Värdepapper och teknisk analys Digitala filter - Exponentiella rörliga medelvärden (1) Rekursiva digitala filter Ett sätt att strukturera digitala filter på ett effektivare sätt är att använda en del av utmatningen och tillämpa den Till ingången. Detta gör filtret rekursivt när utmatningsreferensen sker i ingången, vilket gör att filtret visas oändligt i längden. På grund av detta har filtren även namnet Infinite Impulse Response (IIR) - filter, eftersom svaret kan fortsätta i oändlighet. I det här fallet har det här enkla IIR-filtret endast ett steg och tar en (liten) procentandel av föregående utgång. Ekvationen för det här enkla IIR-digitala filtret är: Schematiskt ser ritningen av det här enkla IIR-filtret ut så här nedan. Diagrammet nedan visar vad som händer. Serie 1, den tunna stegingången, ger följande typiska transientutgångar. Med ett 9-värde för k sedan k 0,09, är Serie 2 (den tjocka linjen) det första typiska övergående svaret. Om procentsatsen (k) sänks till 5 (k 0,05) är Serie 3 (den tunna linjen under Serie 1) det förväntade resultatet. Med k droppat vidare till 1 (k 0,01) har vi Serie 4 (den streckade linjen väl under de andra två utgångarna) är svaret. Dessa utgångar följer alla exponentiella tidsreaktioner. Så med lite återkoppling har vi ändrat det ganska komplexa icke-rekursiva filtret till ett enkelt rekursivt filter med mycket samma frekvenssvar, men ett annat tidsrespons. Den IIR-filterutgångsvågformen fortsätter för evigt (till oändligheten) för att konvergera på stallet värde, och det är därför som dessa filter får namnet Infinite Impulse Response (IIR) - filter. Frågan är nu att binda dessa svar så att de är relaterade till varandra Med teknisk handel är den gemensamma nämnaren perioder (vanligtvis dagar), så det är nödvändigt att relatera rekursiv faktorn (k) till en periodfaktor. Lyckligtvis finns det ett givet direkt förhållande och det är genom formeln enligt följande: Där vi valde k 0,09 omvandlas denna formel till 21.2222 Perioder, och för k 0,05 omvandlar denna formel till 39,0 Perioder och för k 0,01 omvandlar denna formel till 199,0 perioder. Att gå bakåt vill vi verkligen ta reda på k-faktorn från perioden och genom att införliva formeln blir den: Så för 11,0 Perioder sedan k 0,16666666, för 21,0 Perioder sedan k 0,090909 och för k 40,0 Perioder sedan k 0,0487804 Allt verkar mycket enkelt , men förhållandet måste bindas. Med hänvisning till diagrammet är det uppenbart att tidsresponsen är en exponentiell sönderfall. I fysikmarken följer alla naturliga åtgärder en exponentiell laddning och sönderfall. Titta på en cistern flush: all varoosh i början och det slutar en trickle (innan pluggen släpper in för att fylla på tanken) När bilbelystorna släcker går de dimma och mörka på ett exponentiellt sätt. Det är ett naturfenomen överallt När regn börjar och slutar falla, är regnens densitet över tiden en exponentiell funktion och det följer samma exponentiella sönderfallsregler. Back i Electronics Land exponentiella sönderfall är mycket vanliga och laddnings - och urladdningstiderna mäts i en normaliserad tillvägagångssätt kallade tidskonstanter (T). En tidskonstant utladdar till ca 37, två till ca 14, tre till ca 5 fyra till ca 1,8 och fem till ca 0,6 - vilket är i grunden ingenting När elektroniska komponenter laddas följer de inversa av urladdningsgraden dvs: 63, 86, 95 , 98,2, 99,4 osv. Med hänvisning till den enkla IIR Digital Filter-ekvationen där den svarar på en Heaviside Step-funktion har laddnings kurvan följande ekvation: y (t) x (0). (1-exp - tT) Där T-tidskonstant (eller Period) - värde. Diagrammet för denna ekvation justerar exakt med det enkla rekursiva filtret som beskrivits ovan, så genom att tillämpa Heavisides Step-funktionen (genom att göra tiden varierande ingång a 1 istället för en 0) och sedan byta periodema som tidsfaktorn t (39) i direkt ovanför ekvation, då y (39) (1-exp -39T) 0,8646647 så 0.1353352 exp -39T och In (0.1353352) -2 så exp -2 exp -39T så -2 -39T och transponering, T 19.5 Så vad gjorde Alla de högstadietematiska meningarna Det innebar i grunden att det angivna antalet perioder i ett enkelt rekursivt filter motsvarar två (2) tidskonstanter. Med andra ord, när vi anger ett 100-dagars rekursivt filter på 100: e dagen, kommer filtrets svar (från en steginmatning) att motsvara den för två tidskonstanter (86 av maxbeloppet). Vi har nu matematik för att exakt förutsäga filterets utmatning från någon känd ingång utan att gissa. Tack Oliver Heaviside och de tidigare briljanta matematikerna. Nu kan vi använda sina grundläggande matematiker för att beräkna svaret på en ramp, och felet för Grafen på På vänster sida nedan visas en 100-enhetars stegingång som appliceras på både ett SMA20- och ett EMA20-filter, och de två utgångarna syns tydligt. Från steginmatningen stiger SMA20-utmatningen som en ramp tills den träffar det maximala värdet precis som en begränsad förstärkare med slewhastighet. EMA20 stiger snabbt och faller sedan för att exponentialt att asymptotiskt konvergera på den stabila utgången. De två utgångarna passerar över 80 marken, och detta är en referens som ska användas vid jämförelse av en mängd andra svar. Högerdiagrammet nedan visar ett IIR-filtersvar på en ramp (en vertikal position per horisontellt steg). (Detta kan ses på som säg 1 cent per dag.) Denna gång k 0,15 så är perioderna 12.33333 och Time Constant (T) därför 6,166,667 Perioder. Enhetsrampen är den raka prickade tunna positiva sluttlinjen och under det är det tjocka linjepåverkningssvaret på rampen, vilket också tar av och blir asymptotiskt parallellt med rampen. Det vertikala avståndet mellan dessa två är felet. Så nu vet vi att det här enkla IIR-filtret har ett exponentiellt första ordersvar, som har ett nollfel till ett stabilt ingångsvärde och ett känt konstant fel på en rampinmatning. Formeln för felet är Fel Rk 1, där R är höjden hos ingången. Att ersätta k 0,15 i denna ekvation ger ett oändligt fel på 5.66666 och det är exakt vad grafen visar. Ett rekursivt filter (IIR) i praktiken Ovanstående avsnitt har just beskrivit de inre funktionerna för det enklaste rekursiva filtret, (IIR-filter) som bara råkar vara identiska verkningar av ett exponentiellt rörande medelvärde (EMA) och nästan ingenting ändras från varandra Från någon namngivning Till exempel är en 20-dagars EMA verkligen ett IIR-filter med k 0,095238 och det borde inte bli någon överraskning. Nu vet vi också att tiden Konstant för ett 20-dagars EMA-filter är därför 10 dagar och att rampfelfaktorn är 9,5 (förutsatt att en cent per dag är ramphastighet). Ovanstående diagram (taget från MarketTools Chart) visar svarskillnaden mellan en SMA20 (Green) och en EMA20 (Blue). När det snabba priset börjar rampa EMA inleds spåren närmare och vinklar runt medan SMA20 glider långsammare och bildar en nästan rak linje. Detta borde inte vara överraskande, eftersom vi vet att SMA är mycket mindre reaktiv mot senaste förändringar än en EMA. Du kan tydligt se felet som de har till en ramp i priser och detta kan användas till fördel vid teknisk analys. Detta diagram visar också de rörliga genomsnitt som spårar priserna men med en mycket liknande prisförskjutning (fel) som orsakas av det praktiskt taget konstant förändringshastighet över en begränsad tid (i det här fallet). Problemet med priserna är att det finns ett återkopplingssystem som reglerar prisvariationerna och den här feedbacken är mänsklig hanterad som fungerar så här: Av någon anledning ser någon att de skulle vilja köpa ett visst lager, men priset är marginellt högre än Det tidigare handelspriset. När de köper aktien är det nya priset nu högre. Andra ser det priset som antingen för högt, korrekt eller fortfarande billigt. Med denna tanke i åtanke använder andra handlare de tidigare priserna som referens och tenderar att korrigera det priset tillbaka mot referenspriset som var och en av dem har. Detta medför att priset fluktueras på ett oscillerande sätt som tenderar att stabilisera med tiden. Allt är inte förlorat, eftersom det är viktigt att förstå att Moving Average-tekniken är ett 1: e ordersystem, för nu kan det användas i vetskapen att om priserna är generellt under det rörliga genomsnittet faller priserna faktiskt med tiden, och om priserna ligger över det rörliga genomsnittet, så stiger priserna generellt med tiden. Det är därför mycket vettigt att känna till denna mycket grundläggande regel, eftersom det innebär att de enda aktierna som ska involveras är de med priserna över den glidande genomsnittliga raden. Men vilken tid bör konstant användas för glidande medelvärde och varför nästan ingen teknisk analyspaket kommer någonstans nära detta djup, och de behandlar alla SMA och EMA med en verklig brist på förståelse. Problemet är nästan självförklarande eftersom nästan alla data är EOD-baserade och på grund av det kan övergången över glidande medelvärden lösa de flesta köp-säljsignalerna Med andra ord stoppade utvecklingen av teknisk analys som en buss som träffade en klippa när man flyttade medelvärden var löst med EOD-data. Det fungerar vinster från teknisk baserad försäljning som kan realiseras sluta utveckling Ett rörligt medelvärde Att fastställa det faktum att en SMA och en EMA är båda första ordningens system och att båda dessa effektivt minimerar bullret av handelsvariationer, särskilt de nära värdena Baserat på EOD-data kommer det inte som någon överraskning att dessa medelvärden har en användning som köp eller ej köpindikering för värdepapper som har någon form av trend. Deras användning är en enkel applikation genom att felet mellan det faktiska nära priset och det glidande genomsnittet när positivt indikerar att säkerheten bör hållas och den motsatta. Denna indikator är den mest primitiva av alla tekniska indikatorer, och det är lätta år bortom att använda någon form av ekonomiskt genererad indikation för att visa om ett säkerhetspris stiger eller faller i en trend. Indikatorn lyser verkligen när säkerheten är i en trend, men när priset svänger eller flattar ut har det ett problem med obeslutsamhet. Diagrammet nedan indikerar denna situation, och det exemplifieras genom att inkludera en omkopplingsfunktion för att visa vad som kan hända. Omkopplarfunktionen visas de genomsnittliga graferna för prisrörelser. I vänsterfallet är det en EMA12, och när det snäva priset fluktuerar blir omkopplaren väldigt otrevlig när prisutvecklingen stiger ut eller ändrar riktningen. En väg runt problemet är att använda ett långsammare glidande medelvärde som EMA21 som visas på höger sida. Antalet obeslutningspoäng reduceras, vilket innebär att antalet oanvändbara verksamheter skulle minskas avsevärt, men se närmare och stora vinstkörningar går förlorade eftersom det rörliga genomsnittet är för sent vid övergången. I bakgrunden är det positivt att 12 och 21 EOD-rörliga medelvärden är jämnare än EOD nära och som i sig kan användas till fördel. Två rörliga medelvärden Genom att jämföra två glidande medelvärden (som i sig redan är jämnda med egna attribut) kan en renare indikation erhållas och det kan ge några fördelar. Diagrammen nedan visar några exempel på samma säkerhet för direkt jämförelse. Ovanstående vänstra graf har samma omkopplingsfunktion baserat på två glidande medelvärden EMA12 och EMA26 och se att obeslutningen är praktiskt taget noll. Det här är ett positivt steg, men närmare titt på de faktiska omkopplingspunkterna visar att det är mycket konservativt och i många fall går stora vinster förlorade innan beslutet fattas för att dra ut. Om det inte var för det här kan det här vara en idealisk indikator för hållare som grundar sig på nära priser från EOD-siffror. Ovanstående högra graf (taget från OmniTrader) visar en sexmånadersvy av ett lager och det finns två exponentiella glidmedelvärden (EMA) i grafen. I det här fallet är det rörliga genomsnittet som kramar aktiekurserna en EMA8 och den andra som långsamt konvergerar i aktiekursen är en EMA35. Detta är ett bra exempel eftersom den snabbare EMA har intervallet av EOD-värdena på aktiekursen som skär det vid flera tillfällen. Den långsammare EMA når knappt EOD-prisklasserna. OmniTrader har en mycket trevlig funktion genom att varje testindikator kan ställas in för att självoptimera sig för varje säkerhet över en specificerad historia (t. ex. 250 handelsdagar). Detta ger indikatorerna en bra chans att ge en mycket bättre träffhastighet än vad du normalt skulle få genom att helt enkelt ställa in indikatorparametrarna. I det här fallet började de på EMA12 och EMA40 och bosatte sig på EMA8 och EMA35 för ett optimalt resultat. Problemet är osäkerheten eftersom både glidande medelvärden sammanfaller med varandra och inte har en ren crossover. Detta är inte ett stort problem eftersom vi vet att både SMA och EMA båda är 1 st ordningssystem och därför konvergerar de asymptotiskt med en konstant inmatning, så om ett pris förblir konstant, kommer de båda glidande medelvärdena att konvergera på den konstanta Värde, men med olika priser. Det verkliga problemet är ett av buller (faktiskt prisfluktuering om ett konstant värde) och detta kan orsaka det snabbare rörliga genomsnittet till whipsaw över det stabilare långsammare (längre) glidande medlet. Det finns flera lösningar på detta problem, och varje har sina fördelar. Flera rörliga medeltal Utökande på temat rörliga medelvärden från en till två till många är en logisk progression och tillvägagångssättet för multipla rörliga genomsnittsvärden är ett ganska enkelt koncept att visualisera. Daryl Guppy utformade den och består av tio glidande medelvärden i två grupper som är geometriskt åtskilda. Den första gruppen är kort sikt EMA3, EMA5, EMA7, EMA10 och EMA15, medan långsiktiga glidmedel är EMA30, EMA35, EMA40, EMA50 och EMA60. För att få en bild av hur det ser ut, visar de två diagrammen nedan de allmänna bilderna. I den vänstra grafen nedan följer de fem långsiktiga glidande medelvärdena i generellt parallella linjer när aktiekursutvecklingen uppåt, de sedan stigande priserna återgår sedan och de rörliga genomsnittliga linjerna växer från varandra och konvergerar sedan och utvidgas sedan som den nya trenden Sätter på plats och de glidande medelvärdena återigen bildar parallella linjer. När man tittar närmare i den högra handgrafen för samma lager med den kortare uppsättningen glidande medelvärden blir det uppenbart att när de exponentiella rörliga medeltalen konvergerar eller avviker, så kommer något att hända. Anledningen till att dessa rörliga medelvärden bildar effektivt parallella linjer medan En trend som händer är att felet från det faktiska priset till det rörliga genomsnittet är beroende av återkopplingsfaktorn i EMA. I direkt jämförelse visas SMA baserad på samma tidskonstanter nedan: Diagrammen ovan visar samma kurvbågar men alla med SMA istället för EMA. Det är på grund av det icke-linjära tillvägagångssättet som EMA har, vilket medför att kurvorna konvergerar varandra, där SMA-uppsättningen av kurvor i dessa nedre två grafer tydligt överskridar varandra. Guppy Flera rörliga medelvärden Daryl Guppy utvecklade en regnbåge med flera glidande medelvärden, kallade Guppy Moving Averages (GMA) som när de placerades på ett pristabell, konvergeras som trenden börjar äga rum och konvergeras igen som trenden har gått ner och Resten av tiden är de avvikande Hur lätt är det Baserat på EOD-trafiken är Daryls EMA-konstanter på kort sikt: 3, 5, 8, 10, 12, 15 och för långsiktiga 30, 35, 40, 45, 50 och 60. För de korta konstanterna är min gissning att detta baserades på en enkel aritmetisk uppsättning av EMAs som var nominellt 2,4 perioder i varandra och satt till närmaste heltal för perioden, vilket resulterade i: 3 , 5,4, 7,8, 10,2, 12,6 och 15,0 vilket ger 3, 5, 8, 10, 13 och 15, medan 13 drogs tillbaka till 12. Det verkar som om de långsiktiga konstanterna är baserade på en annan aritmetisk progression med 55 saknade Ut förmodligen eftersom det blev för trångt där, och det berättar för mig att den här sekvensen borde ha varit en geometrisk progression under alla omständigheter. Med fem intervall mellan 30 och 60 är multiplikatorn cirka 1,1487 så sekvensen blir 30,00, 34,46, 39,59, 45,47, 52,23, 60,00 och att föra detta till närmaste heltal ger: 30, 34, 40, 45, 52, 60 och detta skulle Ge en mycket jämn uppsättning långsiktiga EMAs från en geometrisk progression få de långsiktiga konstanterna. Så varför hängde jag på geometriska progressioner och varför lärde de dem i skolan? Det är så här, livsförhållandena är faktiskt geometriskt relaterade allting är förhållande till andra saker, även tillägg till familjer är geometriskt relaterade, inte aritmetiskt relaterade till större skala. Jag vet att lärarna inte visade mig det här i skolan och jag hade några fantastiska lärare. De bästa lärarna var överlägset de som hade industriella och affärsmässiga färdigheter genom icke-skolupplevelse, och var avundade av dem som inte gjorde det. Hur som helst För att se bilden finns inget som ett visuellt exempel. De två graferna ovan ger exempel på Guppy Moving Averages (GMMA), och dessa är exponentiella rörliga medelvärden, inte enkla rörliga medelvärden. Intressant, eftersom SMA har ett roder-svar eftersom de inte överreager de senaste värdena som EMAs gör. Det finns två familjer av dessa och vänster sida visar det långsiktiga bandet bort från priserna och konvergerar sig på förändringar. På höger sida visas de kortfristiga glidande medelvärdena närmare efter (nära) priserna. Att gå på en annan tangent, genom att ställa in en geometrisk progression baserad på rot 2 enligt en fotografilins, är en typisk sekvens 5, 7, 10, 14, 20, 28, 40, 56, 80, 113, 200 etc. Vänster Hand en baseras på EMA och den till höger baseras på SMA. Eftersom SMA har ett linjärt övergående svar är det övergripande spåret något mer avrundat än EMA som har ett avsmalande sönderfallsvarv, följaktligen sprutningen av exponentiella glidmedel i jämförelse med antalet övergångar med de enkla glidande medelvärdena. Det här är ett mycket populärt verktyg, och Guppys regnbågar ger en hög effektvisuell bild, och om det är vad du letar efter så är det här. Det är inte bara intressant att titta på de olika rörliga medelvärdena divergerar och konvergerar, men går det ett steg längre till Beräkna och visa att divergens och konvergens är nästa logiska evolutionära steg. Medan dessa regnbågar med rörliga medelvärden har en visuell effekt med EOD-data, är det en helt annan historia, eftersom inkrementen är mycket mindre på grund av de korta tidsluckorna och detta ger upphov till att faktiskt analysera sekvensen av korsningar , Eftersom detta väljer skillnaden mellan en handel och en investering men mer senare En alternativ till att tillgripa handel (levande) data är att använda ett bättre filter - eller kaskad (sätta en efter varandra) några första ordningens filter för att försöka öka förlust i stoppbandet med en kortare och mer linjär risetime - och Cascaded EMAs är nästa äventyrssteg. Jag implementerar ett 80-72-64-48 multi-pass glidmedelfilter för ett inbyggt system i C och i fast punkt. Implementeringen är en cirkulär buffert där jag håller en löpande summa och beräknar yn-1 xn - xn-M där M är längden på ett filter. Detta görs för varje subfilter med utgången från en tjänst som ingång för en annan. Jag skalar mina koefficienter med 2 som ger mig koefficienter med längd 2 eller 2 beroende på filterlängden. Då avkalas resultatet med 2 igen för att få rätt utgång. Nu ser allt bra ut på korta vågar men under långa tider får jag en drift. Orsaken till det rekursiva genomförandet är att spara beräkningar på en inbäddad processor. Jag har tagit med bilder av några av mina interners mittfilter, det här är när ett stegsvar tillämpas och vi kan se överföringsfunktionerna hos filtren som tar form, kvadrat, triangel och approximerar sedan en gauss, så filtret fungerar som förväntat. Finns det något sätt att fixa detta, och var är den mest troliga källan till detta. Är den här driften på grund av att en bit går vilse i skiftet eller något annat. Driften är inte närvarande för DC-ingångar, men för AC-signaler går det långsamt. Lösning: Problemet var i ackumulatorn som Robert föreslog i kommentarerna. Frågan var att ett element i beräkningen hade gått igenom ett extra upp och ner skift jämfört med resten, vilket skapade en runda offset som ackumulerades. Frågade 27 apr 15 kl 21:12 är din ackumulator yn avrundad eller kvantiserad på något sätt måste du se till att xn-M som subtraheras är exakt samma värde som xn som tillsattes M-prov sedan. så du vill verkligen göra en rörlig summa. Snarare än ett glidande medelvärde och skala utmatningen av din rörliga summa (med 1M) för att få dig genomsnittet. Detta är ganska genomförbart och ännu bättre gjort i fast punkt snarare än flytande punkt. Ndash robert bristow-johnson Apr 27 15 at 22:52 quotScaling coefficientsquot Jag antar att du delar upp med M efter varje steg och det är den koefficient som du skala Det är förmodligen orsaken till offset. Bättre än att dela upp med prod Mi i slutet av alla filter. Du måste hålla reda på de interna amplituderna men som du kommer att sluta överflöda ackumulatorerna. Detta löses emellertid lätt genom modulo aritmetik (varav komplementet är ett speciellt fall). Ndash Oscar 28 apr 15 kl 7:00 Oscar, det här är ett fast punktfilter. Jag menar att jag bara gör heltal aritmetiska. För ett glidande medelvärde av längden gt 1 med förstärkning 1 kommer filterkonstanterna att vara en fraktion som inte kan representeras i heltal. Så skalas koefficienterna för att göra dem heltal genom att vänster skifta dem x många bitar. På grund av detta måste slutprodukten också flyttas till höger av så många bitar. Jag kan inte hålla en löpande summa genom alla 4 filter utan att återställa utmatningen däremellan, ingångssignalen är 16 bitar och med koefficientskalan och längderna ett enda filter använder hela mitt ackumulatorutrymme på 32 bitars ndash user70614 28 april kl 15:20

No comments:

Post a Comment