Thursday, 16 November 2017

Fast punkt representation binära alternativ


3.7.Binary Fix Point Ett binärt fixerat system är ett annat exempel på ett arabiskt numeriskt system. Den enda skillnaden från decimal är radixen. Binär använder en radix av 2 istället för 10. Vi anger radix (bas) med ett prenumeration på numret. Från och med nu antar vi inte en bas av 10. 1001.101 2 1 2 3 0 2 2 0 2 1 1 2 0 1 2 -1 0 2 -2 1 2 -3 Ett enkelt sätt att läsa binärt är att arbeta till vänster och direkt från binärpunkten, dubbla eller halvera värdet på siffrorna vid varje steg: De siffror som används i något arabiskt system varierar alltid från 0 till radix-1. Att använda större siffror skulle göra det möjligt att representera ett värde på mer än ett sätt. Om exempelvis binär fixpunkt tillåter användningen av siffran 2, kan numret två representeras som antingen 2 eller 10. 3.7.1. Begränsningar av binär konvertering 110 till binär. Kan inte göras: som att försöka representera 13 i decimal. Det kräver ett oändligt antal siffror. Detta är ett problem för monetära beräkningar. Lösningar (BCD, cent) Flytande PointFixed-Point Numbers Fasta punkttal är ett enkelt och enkelt sätt att uttrycka fraktionerad antal, med ett fast antal bitar. System utan hårddiskstöd stödjer ofta fastnummer för att representera bråknummer. (System utan hårdvarvstöd stödjer ett brett sortiment av hårdvara - från high-end fast punkt-DSP, FPGA, och dyra anpassade ASIC-enheter som bearbetar streaming media snabbare än någon flytande punkt enhet som någonsin byggts för extremt låga mikrokontroller ). Termen Fix-Point refererar till läget för binärpunkten. Binärpunkten är analog med decimalpunkten för ett bas-tio-tal, men eftersom detta är binärt snarare än decimal används en annan term. I binär kan bitarna vara 0 eller 1 och det finns ingen separat symbol för att ange var binärpunkten ligger. Vi föreställer oss dock, eller antar, att binärpunkten ligger vid en fast plats mellan utvalda bitar i numret. I ett 32-bitars tal kan vi exempelvis anta att binärpunkten existerar direkt mellan bitarna 15 (15 eftersom den första bitnumret är numrerad 0, inte 1) och 16, vilket ger 16 bitar för hela nummerdelen och 16 bitar för den fraktionerade delen. Observera att den mest signifikanta biten i hela talfältet generellt betecknas som teckenbiten som lämnar 15 bitar för hela talstyrkan. Bredd och precisionsredigering Bredden på ett fast punktnummer är det totala antalet bitar som är tilldelade för lagring för fastpunktsnumret. Om vi ​​lagrar hela delen och fraktionen i olika lagringsplatser, är bredden den totala mängden lagring för numret. Räckvidden för ett fastpunktsnummer är skillnaden mellan det minsta antalet möjliga och maximalt antal möjliga. Precisionen för ett fastpunktsnummer är det totala antalet bitar för den fraktionerade delen av numret. Eftersom vi kan definiera var vi vill ha den fixerade binära punkten, kan precisionen vara ett tal upp till och inklusive bredden på numret. Observera dock att ju mer precision vi har, desto mindre totalt utbud har vi. Det finns ett antal standarder, men i den här boken kommer vi att använda n för bredden på ett fast punktnummer, p för precisionen, och R för det totala intervallet. Inte alla siffror kan representeras exakt med ett fast punktnummer, så att närmaste approximation används. Formeln för att beräkna integerrepresentationen (X) i ett Qm. n-format för ett floatnummer (x) är: Om du vill konvertera det tillbaka används följande formel: Några exempel i Q3.4-format: Slumpmässigt valda floats: Några exempel i det (extremt vanliga) 1 Q7.8-formatet: Eftersom binärpunktens position är helt konceptuell, är logiken för att lägga till och subtrahera fastnummer, identisk med den logik som krävs för att lägga till och subtrahera heltal. När vi lägger till en halv plus en halv i Q3.4-format så kan vi förvänta oss att se: Vilket är lika med en som vi skulle förvänta oss. Detta gäller lika med subtraktion. Med andra ord, när vi lägger till eller subtraherar fastnummer, kommer binärpunkten i summan (eller skillnaden) att ligga på exakt samma plats som i de två siffrorna som vi arbetar på. När vi multiplicerar två 8-bitars fastpunkttal behöver vi 16 bitar för att hålla produkten. Eftersom det finns ett annorlunda antal bitar i resultatet jämfört med ingångarna, bör den binära punkten förväntas röra sig. Det fungerar dock exakt samma sätt i binärt som det gör i decimal. När vi multiplicerar två siffror i decimal, är decimalpunktens placering N-siffror till vänster om produkternas högsta siffran, där N är summan av antalet siffror som ligger till höger om decimalpunkten i multiplikatorn och multiplikatorn . Således, i decimal när vi multiplicerar 0,2 gånger 0,02, får vi: Multiplikatorn har en siffra till höger om decimalpunkten, och multiplicanten har två siffror till höger om decimalpunkten. Produkten har sålunda tre siffror till höger om decimaltalet (det vill säga decimaltalet ligger tre siffror till vänster). Det fungerar detsamma i binärt. Från tilläggsexemplet ovan vet vi att den ena halvan i Q3.4-format är lika med 0x8 i hexadecimal. Eftersom 0x8 gånger 0x8 i hex är 0x0040 (även i hex), kan fixpunktsresultatet också förväntas vara 0x0040 - så länge vi vet var binärpunkten befinner sig. Låt skriva ut produkten i binär: Eftersom både multiplikatorn och multiplicanten har fyra bitar till höger om binärpunkten, är binärpunktens placering i produkten åtta bitar till vänster. Således är vårt svar 00000000.01000000, vilket, som vi förväntar oss, motsvarar ett fjärdedel. Om vi ​​vill att utmatningsformatet ska vara detsamma som formatet för inmatningen måste vi begränsa intervallet för ingångarna för att förhindra överflöde. Att konvertera från Q7.8 tillbaka till Q3.4 är en enkel fråga om att flytta produkten direkt med 4 bitar. Fast punktnummer används ofta internt i digitala filter inklusive FIR och IIR filter. Det finns ett antal praktiska överväganden för att implementera FIR - och IIR-algoritmer med hjälp av fastnummer. 2 3 Många inbyggda system som producerar sinusvågor, som DTMF-generatorer, lagrar ett sinusbord i programminnet. (Den används för att approximera matematiska sinus () och cosinus () funktioner). Eftersom sådana system ofta har mycket begränsade mängder programminne, används ofta fasta siffror två olika sätt när sådana tabeller används: värdena lagrade i tabellerna och bradsna brukade indexeras i dessa tabeller. Värden som lagras i sinusbordet Redigera vanligtvis en kvadrant av sinus - och cosinusfunktionerna lagras i den tabellen. Vanligtvis är det en kvadrant där dessa funktioner producerar utgångsvärden i intervallet 0 till 1. Värdena i sådana tabeller lagras vanligtvis som fasta nummer - ofta 16-bitars siffror i osignerat Q0.16-format eller 8-bitars nummer i unsigned Q0.8 värden. Det verkar finnas två populära sätt att hantera det faktum att Q0.16 inte kan hantera 1,0, det hanterar bara siffror från 0 till (1.0-2-16): (a) Skala med exakt en kraft på två (i det här fallet 216 ), som de flesta andra fastpunktssystem, och ersätta (klipp) värden för stora för att lagras som det största värdet som kan lagras: så 0 representeras som 0, 0,5 representerad som 0x8000, (1,0-2-16) representerad som 0xFFFF och 1.0 avkortad och representeras också som 0xFFFF. 4 (b) Skala med det största möjliga värdet (i detta fall 0xFFFF), så både max och minsta värden kan representeras exakt: så 0 representeras som 0, (1.0-2-16) representerad som 0xFFFE och 1,0 är representerad som exakt 0xFFFF. 5 Några personer ritar ganska exakta cirklar och beräknar ganska noggrann sinus och cosinus med en Bezier spline. Tabellen blir 8 värden som representerar en enda Bezier-kurva som approximerar 18 i en cirkel till en noggrannhet av ca 4 delar per miljon eller 14 i en cirkel till en noggrannhet av ca 1 del i tusen. 6 7 Många föredrar att representera rotation (som vinklar) när det gäller varv. Heltalsdelen av varvtalet berättar hur många revolutioner som har hänt. Den fraktionerade delen av svängningarna, när de multipliceras med 360 (eller 1 2 8) med standardtecknad fastpunktsräkning, ger en giltig vinkel i intervallet -180 grader (radianer) till 180 grader (radianer). I vissa fall är det lämpligt att använda osignerad multiplikation (i stället för signerad multiplicering) i binär vinkel, vilket ger rätt vinkel i intervallet 0 till 360 grader (2 radianer). Den största fördelen att lagra vinklar som en fast punkt fraktion är en hastighet. Kombinera någon nuvarande positionsvinkel med någon positiv eller negativ inkrementell vinkel för att få den nya positionen är väldigt snabb, även på långsamma 8-bitars mikrokontroller: det tar ett enda heltalstillägg och ignorerar överflödet. Andra format för att lagra vinklar kräver samma tillägg, plus speciella fall för att hantera kantfallet med över 360 grader eller underflödande 0 grader. Jämfört med att lagra vinklar i binärt vinkelformat, lagrar vinklar i något annat format - till exempel 360 grader för att ge en fullständig revolution, eller 2 radianer för att ge en fullständig revolution - oundvikligen resulterar i lite mönster som ger vinklar utanför det intervallet, som kräver extra steg att sträcka - sänka värdet till önskat område, eller resulterar i några bitmönster som inte är alla giltiga vinklar (NaN) eller båda. Genom att använda ett binärt vinkelformat i svängenheter kan vi snabbt (med skift-och-mask, undvika multiplicering) separera bitarna i: bitar som representerar heltalsvarv (ignoreras när vi tittar upp vinkelns sinus, bryter vissa system aldrig om att lagra dessa bitar i första hand) 2 bitar som representerar kvadrantbitarna som direkt används för att indexera in i uppslagstabellen med låg ordning mindre än ett steg i indextabellen (fasackumulatorbitar, ignorerad när man tittar upp vinkelns sinus utan interpolering) Lågordningsfasbitarna ger förbättrad frekvensupplösning, även utan interpolering. Vissa system använder lågorderbitarna för att linjärt interpolera mellan värdena i tabellen. 12 Detta gör att du kan få mer noggrannhet med ett mindre bord (spara programutrymmet) genom att offra några cykler på denna extra interpolationsberäkning. Några system får ännu mer noggrannhet med ett ännu mindre bord genom att offra några cykler för att använda dessa lågordnade bitar för att beräkna kubisk interpolering. 4 Kanske är det vanligaste binära vinkelformatet brads. Brads Redigera Många inbyggda system lagrar vinkeln, den fraktionerade delen av varv, i ett binärt vinkelformat för byte. 13 Det finns flera sätt att tolka värdet i den byten, vilket alltså betyder (mer eller mindre) samma vinkel: en vinkel i enheter av brads (binära radianer) lagrade som ett 8 bitars osignerat heltal, från 0 till 255 brads en vinkel i enheter av brads lagrade som ett 8-bitars tecknat heltal, från -128 till 127 brads en vinkel i varvtalsenheter, lagrad som en fraktionell sväng i osignerat Q0.8-format, från 0 till strax under 1 full vrid en vinkel i enheter av varv, lagrad som en fraktionell tur i signerat Q0.7 () - format, från -12 till knappt 12 full tur En full tur 14 är 256 brads 15 är 360 grader. Om en enda byte inte ger tillräckligt med precision, kan bradsystemet enkelt utökas med mer fraktionerade bitar - 65.536 siffror per tur kan representeras i 16 bitar. 16 För vidare läsning EditIntroduction till Fast Point Number Representation I verkligheten handlar vi om reella tal - siffror med fraktionerad del. Mest moderna datorn har inbyggt (hårdvaru) stöd för flytande punktnummer. Användningen av flytpunkten är emellertid inte nödvändigtvis det enda sättet att representera bråknummer. I den här artikeln beskrivs fastpunktsrepresentationen av reella tal. Användningen av fast punktdatatyp används ofta i digital signalbehandling (DSP) och spelapplikationer, där prestanda ibland är viktigare än precision. Som vi kommer att se senare är den fasta aritmetiken mycket snabbare än flytande aritmetik. Minns att ett binärt tal representerar värdet: 1 2 5 1 2 4 0 2 3 1 2 2 0 2 1 1 2 0 Om vi ​​delar numret 53 med 2 vet vi att resultatet ska vara 26,5. Hur representerar vi det om vi bara hade heltalrepresentationer Nyckeln till att representera bråknummer, som 26,5 ovan, är begreppet binär punkt. En binär punkt är som decimalpunkten i ett decimalsystem. Det fungerar som en delare mellan heltalet och den delade delen av ett tal. I ett decimalsystem anger en decimalpunkt läget i ett tal som koefficienten ska multiplicera med 10 0 1. Till exempel i siffran 26.5 har koefficienten 6 en vikt av 10 0 1. Men vad händer med 5 till Avrundningsrätten Vi vet från vår erfarenhet att den bär en vikt av 10 -1. Vi vet att siffran quot26.5quot representerar värdet quottwenty six and a halfquot eftersom 2 10 1 6 10 0 5 10 -1 26.5 Det allra samma begreppet decimalpunkt kan tillämpas på vår binära representation, vilket gör en kvotpunktpunktpunkt. Liksom i decimalsystemet representerar en binär punkt koefficienten för termen 2 0 1. Alla siffror (eller bitar) till vänster om binärpunkten bär en vikt av 2 0. 2 1. 2 2. och så vidare. Siffror (eller bitar) till höger om binär punkt bär en vikt av 2 -1. 2 -2. 2 -3. och så vidare. Till exempel representerar numret: värdet: Nu, återkall i klassen, vi diskuterar att flytta ett heltal till höger genom att 1 bitposition motsvarar att dividera talet med 2. I fallet med heltal, eftersom vi inte har en bråkdel , vi kan helt enkelt inte representera siffra till höger om en binär punkt, vilket gör denna skiftprocess till ett heltal. Det är emellertid helt enkelt en begränsning av heltalrepresentationer av binärt tal. I allmänhet dividerar matematiskt, givet ett fast binärt punktläge, att bitmönstret av ett tal till höger med 1 bit alltid dividerar numret med 2. På samma sätt multiplicerar ett nummer till vänster med 1 bit multiplicerandet med 2. Förskjutningsprocessen ovan är nyckeln till förståelse av fast punktnummerrepresentation. För att representera ett riktigt tal i datorer (eller någon annan maskinvara i allmänhet) kan vi definiera en fastpunktsantalstyp helt enkelt genom att implicit fixa binärpunkten för att ligga i någon position av ett tal. Vi kommer då enkelt att hålla sig till denna implicita konvention när vi representerar siffror. För att definiera en fast punkttyp konceptuellt är allt vi behöver två parametrar: bredden på talrepresentationen och binär punktposition inom numret. Vi använder notationen fixedltw, bgt för resten av denna artikel, där w betecknar antalet bitar används som helhet (bredden på ett tal), och b betecknar läget för binär punkträkning från den minst signifikanta biten (räknat från 0). Till exempel betecknar fixedlt8,3gt ett 8-bitars fastpunktsnummer, varav 3 höger flesta bitar är fraktionerade. Därför kan bitmönstret: När vi tittar på den här tabellen så kan vi lätt inse att vi kan representera talet -2.5 med bitmönstret quot1011quot, om vi antar att binärpunkten är i position 1. Nu borde du finna att fasta punkttal är verkligen en nära släkting till heltalrepresentation. De två skiljer sig bara i läget för binär punkt. Faktum är att du faktiskt kan överväga heltalsrepresentation som en speciell casequot av fasta poängtal, där binärpunkten ligger i position 0. Alla de aritmetiska operationer som en dator kan styra på heltal kan därför också tillämpas på fastpunktsnummer. Därför är fördelen med fast punkträkning att de är lika rakt framåt och effektiva som heltal aritmetiska i datorer. Vi kan återanvända all hårdvara som byggts för för heltal aritmetik för att utföra realtalsräkning med fastpunktsrepresentation. I annat ord kommer den fasta aritmetiken gratis på datorer. Nackdelen med fast punktnummer är naturligtvis förlusten av intervall och precision när det jämförs med flytpunktsrepresentationer. Till exempel, i en fixedlt8,1gt-representation, är vår fraktionsdel bara exakt för en kvantitet på 0,5. Vi kan inte representera nummer som 0.75. Vi kan representera 0,75 med fixedlt8,2gt. men då förlorar vi intervallet på heltalet. C har inte native quottypequot för fast punktnummer. På grund av arten av fast punktrepresentation behöver vi helt enkelt inte en. Minns alla aritmetik på fasta punkttal är samma som heltal, vi kan helt enkelt återanvända heltalstypen int i C för att utföra fastpunktsräkning. Positionen för binär punkt gäller endast i fall då vi skriver ut det på skärmen eller utför aritmetik med olika quottypequot (till exempel när vi lägger till int till fixedlt32,6gt). Fast punkt är ett enkelt men mycket kraftfullt sätt att representera fraktioner i datorn. Genom att återanvända alla heltal aritmetiska kretsar hos en dator är fastpunktsräkningsmetoden storleksordningar snabbare än flytande aritmetik. Detta är anledningen till att det används i många spel och DSP-applikationer. Å andra sidan saknar det utbudet och precisionen som floating point nummerrepresentation erbjuder. Du, som programmerare eller kretsdesigner, måste göra avvägningen.

No comments:

Post a Comment