Skip to main content

Labview fpga glidande medelvärde


Beräkning av rörligt medelvärde. Detta VI beräknar och visar det glidande medlet med ett förinställt nummer. Först initierar VI två skiftregister. Topskiftregistret initialiseras med ett element och lägger sedan kontinuerligt det föregående värdet med det nya värdet. Detta skiftregister håller Summan av de sista x-mätningarna Efter att ha delat resultaten av add-funktionen med det förinställda värdet beräknar VI det rörliga genomsnittsvärdet. Det nedre skiftregistret innehåller en matris med medelvärdet. Detta skiftregister håller alla värden av mätningen. Utbytesfunktionen Ersätter det nya värdet efter varje loop. Denna VI är mycket effektiv och snabb eftersom den använder funktionen ersättningselement inuti öglan och initierar arrayen innan den går in i loop. This VI skapades i LabVIEW 6 1.Bookmark Share. Exponentia l glidande medelstegsrespons fpga. Jag har ett problem med mitt filter, det exponentiella vägda glidande genomsnittliga filtret IIR-ordern Från boken Förstå digital signalbehandling Lyons Richard Jag har följande formel som beräknar 3DB-frekvensen fc från alfa Alpha är parametern för att styra filtret. Differensiell ekvation för filter ynxn alfa 1 - alfa y n-1.Relation mellan fc och alfa alpha cos 2fc fs - 1 kvadrat cos 2fc fs - 4 cos 2fc fs 3. Om jag nu väljer en 3dB-frekvens på 0,0794Hz tidskonstant TC 2s alpha 0,00169621 fs 94Hz. For ett IIR-filter 1: a ordningen, stiger tiden från stegresponsen från 10 till 90 är ta 2,2 TC vilket resulterar i ta 4,4. Men om jag simulerar steget svaret är min uppstigningstid ungefär 3 gånger av detta värde vid 14 år. Jag kan inte förklara varför stegresponsen hos mitt filter skiljer sig så Mycket För mitt rörliga medelfilter är den beräknade och simulerade uppgångstiden lika. Jag har vi som utförs på FPGA-enheten. Kanske kan någon hitta ett misstag. Se även alfa-filter eller RC-filter. Är din samplingsfrekvens fs korrekt Om slingtidpunkten inte matchar, skulle det förklara det. Dina datatyper ser bra ut att få alfa inom 1 Men jag föreslår en mindre förändring i genomförandet Som det står , Det är lite benägen att avrunda drift, eftersom 1-alfa multipliceras flera gånger med y n-1 En något mer tillförlitlig metod är att säga en ny n-1 alfa xn - y n-1 Skillnaden är subtil, Men ger mig bättre resultat många gånger och det eliminerar en multiplic. By vägen, tolka nummer gör samma sak som din konvertera från FXP till bool sedan tillbaka Det är lite mindre förvirrande, though. I mamma lite förbryllad av den tidsbestämda slingan som aldrig Slingor Inför den tidpunkten som jag antog att det inte skulle, så aldrig använt det jag använder Loop Timer istället. CLD-användare sedan rev 8 6.Message 2 of 13 1.087 Views. Re exponentia l glidande medelstegsrespons fpga. 10-01-2015 02 05 - redigerad 10-01-2015 02 17 AM. thanks för ditt svar.1, jag bevisar min samplingsfrekvens med slingtiden Min inmatning är 425 532 ticks vilket är lika med.94 Hz Detta tickrate Bekräftas av fästingar EWMA. - Kanske kan någon testa koden och berätta.2 Jag hittade din inställning i trick och tippar i Lyons bok. Jag kommer att försöka, men kan du förklara att rundan drev lite Jag är ganska ny på detta område. Finns det ytterligare en fördel att eliminera en multiplikator med undantag av resurser. Är frekvensresponsen, impulsresponsen och stegsvaret samma.3. Om jag bara bitshift är jag snäll en van vid denna metod. Inte säker på om Reinterprate-funktionen använder mindre resurser men tack för att du noterar det.4, den tidsbegränsade slingan repeterar varje 425 532 fästingar en gång Så med en frekvens på 94Hz beräknas ett värde av koden, eftersom koden inuti den tidsbundna slingan endast behöver en iteration. Eller Jag missförstår din fråga. Jag är inte säker på vilka ytterligare information du behöver försöka Att jämföra stegsvaret för ett glidande medelvärde med ett exponentiellt rörligt medelvärde EWMA Egentligen vill jag bara bekräfta teorin Som jag nämnde ovan för att få en tidskonstant av 2s vid en samplingsfrekvens på 94Hz måste alfa vara 0,00169 Stigningen Tid för stegsvaret från 10 till 90 av det slutliga värdet skiljer sig från teorinsökningen bör vara 4,4s med tidskonstant 2s men jag får nästan 14s om jag kör min kod på FPGA. Jag bekräftade att med alpha 0,00169 , Min kod tar 1297samples för att få från 0,1 till 0,9 slutliga värdet är 1, starta värdet 0. Som du kan se i min kod kontrollerar jag slingtid med indikatorns ticks ewma för att bekräfta samplingsfrekvensen för SCTL. Kan någon annan bekräfta de 1297prover som behövs i alpha 0,00169 Eftersom jag tror att jag behöver för många prover för att nå 0,9-värdet. Jag har redan genomfört den föreslagna EWMA-versionen från det första svaret Samma problem här. Message 5 Av 13 1.037 Visningar. Re exponentia l glidande medelstegsrespons fpga. 10-01-2015 08 13 - redigerad 10-01-2015 08 15 AM.1, jag bevisar min provtagningsfrekvens med slingtiden Min inmatning är 425 532 fästingar som är lika med.94 Hz Denna tickrate bekräftas av fästingar EWMA .- Kanske kan någon testa koden och berätta för mig.2, jag hittade din inställning i tricks och tippar avdelningen i Lyons bok. Jag kommer att försöka, men kan du förklara hur rundan går lite lite jag är ganska ny i Detta område. Finns det ytterligare en fördel att eliminera en multiplikator med undantag av resurser. Är frekvensresponsen, impulsresponsen och stegsvaret lika.3. Om jag bara bithift är jag snäll en vana vid denna metod. Inte säker på om reinterprate-funktionen använder mindre Ressources Men tack för att du noterade det.4, Den tidsbundna slingan repeterar varje 425 532 fästingar en gång Så med en frekvens på 94Hz beräknas ett värde av koden, eftersom koden inuti den tidsbundna slingan bara behöver en iteration eller missförstår jag din fråga. Jag använde ett kalkylblad för att simulera och få nästan exakt samma svar 12 99 cykler för att gå från 0 1 till 0 9 Kalkylblad gör ett användbart verktyg för att testa beräkningar.1 Okej, jag har aldrig använt SCTL med en cykelstimulering med T skrivet till stoppet. Det skulle tvinga matematiska funktionerna att vara ensamma - cykel, men jag är inte säker på om det är någon fördel jag bara ville se till att tiden var bekräftad, och det är.2 Den avrundade driften vinner antagligen inte t visas om inte din inmatning är liten mindre än 0 1 Jag ser Nu när du har 40 bitar 39 rätt i decimal för återkopplingen. Det tar ganska lite FPGA att multiplicera men har inte avrundade problem. Andra delar hade endast 18 bitar 17 i decimal, så alfa 0 00169 - 000007 Gånger skulle en inmatning på 0 1 ha varit 0 000169 - 0 000007 eller 7 fel Men multipliceringen är också 40 bit, så du borde inte se några problem. Typiskt har utdata yn färre bitar och kommer sluta sluta senast Bit Men eftersom det är i en slinga som multiplicerar med 1-alfa varje gång, samlas avrundan ibland varje slinga till dess den är stor enou Gh för att påverka tilläggets resultat Det är svårt att förklara, men min allmänna tumregel är att jag förväntar mig ett fel som är lika med den minsta delen dividerad med alfabetet, med hjälp av den ursprungliga metoden eller ungefär hälften som inte innehåller en multipliceringsmetod. Svaren kommer att vara nästan identiska med undantag för en liten skillnad. Den största fördelen är att spara FPGA-utrymme och kompilera tid. Du kan minska antalet bitar för att spara ännu mer.3 De är i princip identiska och båda metoderna är fria i FPGA Bitarna är inte ändrade, så ingen logik behövs. De är helt enkelt relabeled.4 Jag tror att du svarade det bra. Allmänt, vid denna tidpunkt skulle jag justera alfa till mina resultat matchade vad jag ville ha och fortsätt jag hatar inte förstå en Men det finns inte tid att dyka in i den. Men för vetenskapens skull, låt oss överväga att din formel kan vara bristfällig. Jag tror att du kan använda en formel för en kontinuerlig exponentiell sönderfall e-tau, inte för En diskret exponentiell förfall 1-alfa Det är lättare att titta Vid detta som en stegfunktion från 1 till 0 I så fall är yn för n 0 yn 1-alfa n Vi kan hitta n för yn 0 9, som n log 1-alfa 0 9 62 och n för yn 0 1, Som 1361, för en skillnad på 1299. CLD User since rev 8 6.thank dig för ditt detaljerade svar. När det gäller problemet med stigningstiden tror jag att jag hittade felet. Det kan vara bra att formeln inte är korrekt, eller vad Är förmodligen missförstådd av mig och satt i fel sammanhang. När jag cyklade hem från jobbet, kom ihåg en praktisk funktion av labview utjämningsfilter Här måste du bara ställa in tau TC och fs och det beräknar nominatorn och nämnaren för exponentiell glidande medelvärde och Glidande medelvärde Eftersom nominatorn är alfa kunde jag jämföra resultatet med den formel jag använde och det var ganska stor skillnad. Labview använder följande formel alfa 1-exp -1 fs TC Med denna formel är TC 2s lika med alfa 0,0053. Och Med denna alpha fungerar min simulering Risetime 4,4s. Quoting you Generellt, vid denna tidpunkt skulle jag justera alfa till min r Esults matchade vad jag ville ha och fortsätt jag skulle gärna göra detsamma, men eftersom det här är min mastersuppsats måste jag lösa sådana saker. Nu tillbaka till avrundningsfrågorna förstår jag att de små värdena är ett större problem. Eftersom detta filter Används i ett Lås In, värdena kommer att vara riktigt små Men jag testade det redan på vår mätutrustning och det fungerar, därför ska jag testa din version också, men om jag inte får problem, antar jag att jag behåller Det vid 40bits Att simulera följande setup orsakade ett fel på 2 3 Använda 57 bitar minskade felet till under 1 Jag tror att 40bits skulle vara tillräckligt. Och om resurserna har jag ingen oro. Även om du använder en myrio i slutet har jag fortfarande mycket DSP-skivor för multiplikationen och 10 gratis FlipFlops. Så jag antar att det här ämnet är löst Tack för din stora hjälp och intressanta tankar. Jag är glad att det fungerar, nu. Jag växte upp i eran utan DSP-skivor i FPGA, och Mindre cellantal, så tenderar fortfarande att tänka på dessa villkor föredrar jag fortfarande att spenna D 25 minuters programmering för att få mina kompileringstider nere, även om jag har haft fall där jag klippte sammanställningstiden från 90 minuter till 45 minuter genom att optimera ganska med en kraftfull server för kompilering, det är mindre viktigt. En av dessa optimeringar är att Reducera biträkningar där jag kan, speciellt för multiplikationer. Exempelvis är alfa 16 0 och för 0 0053 kan du också använda 12 -4 negativ heltalsräkning. Du kan också kunna eliminera mycket övre bitar från din ingång 5 minuter Att välja den minsta biträkningen kan enkelt spara 2-10 minuter för varje kompilering. Min andra optimering är att minska multiplikationer, men med en DSP-skiva, det är inte så viktigt jag kan inte hitta bra dokumentation om DSP-skivorna om du har Några, vänligen posta länkar, men när jag förstår det, om du multiplicerar större antal biträkningar, behöver det flera skivor och kanske tid att kombinera resultaten. Och ett annat knep väljer en alfabet med ett enkelt binärt värde, som 1 256 du Plockade ca 1 189, och ändra fs tills du ge T utjämning du vill Använd sedan en konstant för alfa Multiplicera med en konstant 1 256 är ledig i FPGA det skiftar bara bitarna. För att göra det, kan alfa-konstant optimera multiplikationerna ganska beroende på optimeringens smarts, Det kan ändra det till en uppsättning adders istället Frontpanelingångar är bra för att få saker att fungera, men konstanter optimerar mycket bättre. CLD User since rev 8 6.Om du genomsnittligen 16 gånger så många prover fs 16x vad det var ska du inkludera 4 fler bitar i din feedback Du har redan pleanty, så det kanske inte är viktigt om du inte går mycket snabbare annars ökar du fs Är antagligen bra. Om ingången har lågfrekvent brus, hjälper inte överprovtagning till att eliminera det vid alla högfrekventa ljud, men minskar med överprovtagning. Om exempelvis bruset över 10Hz är -5dB som är 10 - 5 gånger amplituden hos den signal du vill, och du provar vid 20S s, kommer du förmodligen att plocka upp -5dB i dina initiala avläsningar. Om din -3dB fc också är 10Hz kommer du att sluta med omkring -8dB ljud kvar i Din signal Om du istället tar 200S s, genomsnittliga grupper om 10, sedan skickar dessa medelvärden till filtret, vann du inte hjälpbrus vid 10Hz du mäter 10Hz brus utan samplingseffekter, men kommer att minska bruset över 100Hz med ungefär en faktor Nära men inte riktigt 10.There är hela terminslära klasser som diskuterar varför, hur Osv. Den korta versionen är detta Varje prov är summan av signalen du vill ha och ljud Om du lägger till 10 prov får du 10x den signal du vill ha och summan av 10 ljud. Tystets natur bestämmer vad du får när du Lägg till de 10 proverna av ljud Gaussisk ljud lägger till något sätt som om 83 av proverna är under X, summan har 83 summor under 1 1X eller något liknande. Linjärt brus lägger till ett annat sätt Och upprepande mönster lägger till ett annat sätt Så utan att veta exakt Vad bullret är, ingen kan svara dig med säkerhet, förutom att medelvärdet av flera prover antagligen hjälper, och nästan aldrig gör ont. Det finns också frågan om aliasing Om du har en sinusinterferans på 60Hz vid -3dB, och du provar på 10 001S s antar alltid att klockorna inte matchar noggrant, du kommer att få något som 0 006Hz vid -3dB läggas till din signal och ditt filter kommer inte att ta bort det. Men stötar din samplingsfrekvens till 100 001S s, kommer störningen att ligga på cirka 40Hz , Så ditt filter borde eliminera it. Averagi Ng 10 prover åt gången är en typ av filterlåda Om du tittar på det i en frekvensdomän kan du se att vissa högre frekvenser flyttas till lägre frekvenser på ett udda sätt, och inte alla minskar om du genomsnittligt 4000 s s , 100 åt gången får du ett genomsnitt 40 gånger per sekund Med 60Hz interferens får du ungefär 1 3 så mycket brus, skiftat till 20Hz, vilket vann t filter samt 60Hz skulle ha. Så skulle det bli bättre Att använda EWMA-filtret vid den högre samplingsfrekvensen än till genomsnittliga block av ingångar, filtrera sedan och Medelvärdet är förmodligen bättre än bara med en långsammare samplingsfrekvens. Om du har en inmatningsadapter med inbyggda elektroniska filter är det ännu bättre , Och det är inte nödvändigt att prova mer än 2X filter s frekvens. CLD-användare sedan rev 8 6.An introduktion till användning av LabView - Användning av en timed Loop. In den första LabVIEW-noten undersökte vi några enkla aritmetiska operationer i LabVIEW I den här noten undersöker vi hur man skriver ett enkelt program med en tidsinställd slinga. Det är inte tillräckligt för att göra aritmetik. I de flesta applikationer behöver du göra beräkningar om och om igen. Repetitiva beräkningar görs bäst med hjälp av en tidsbunden slinga. Tidiga slingor är viktiga eftersom du ofta stöter på situationer där du vill ta mätningar repetitivt i konstant tid Intervall Timed loopar låter dig ta data där du kan ställa in tidpunkten mellan mätningar Innan du får timing loopar, kommer vi att gå igenom några enkla loopar och vi kommer att sluta med några tidtagna slingor som genererar och visar sinusformade signaler. I denna notat - som I de andra LabVIEW-noterna kan du bara läsa igenom noten, men det går bättre om du arbetar tillsammans när vi diskuterar vad som händer. Det första du ska göra är att konstruera En enkel tidsbunden slinga Du måste göra följande. Start LabView Välj ny vi. Vi kommer att använda några rutiner som vi tidigare har skrivit. Du måste ha diagramfönstret aktivt. Välj Fönster-Visa-diagram om diagrammet inte är aktivt och visar. Välj fönsterfönsterfunktioner Palett Funktionspaletten visas nedan. På paletten Funktioner letar du efter menyn Strukturer uppe till vänster och klickar på för att få alternativ. När du placerar markören över de olika menyerna kan ett litet popup-fönster få veta vad Menyn innehåller. Ställ en stund på blockdiagrammet. Det här är vad du får Gör det åtminstone den här storleken. Du bör märka en iterationsräknare I och en villkorlig Terminal för Loppstopp. Samtidigt loop utförs så länge som Conditional Terminal är sant - Även om du kan ändra det själv. För att ändra den villkorliga terminalen för att se ut som den ovan i det nedre högra hörnet - om det råkar se ut som ett litet stoptecken - högerklicka på ikonen och sätt till Fortsätt om True. We kommerSkriv en slinga som exekveras för ett antal gånger som du anger - så småningom men för tillfället kommer vi att lägga till några saker för att göra det här. Först försök att köra vi Du ska få ett felmeddelande om att den villkorliga terminalen inte är ansluten Det är inte det enda problemet - men det är det problem du kommer att fixa först. För att börja, gå till frontpanelen och lägg till en numerisk indikator från numerisk meny När du har den numeriska indikatorn på frontpanelen högerklickar du på Indikator och välj Hitta terminal Du kommer att hämtas till diagrammet och terminalen kommer att bli uppenbar. Observera att tillsatsen av indikatorn på frontpanelen automatiskt lägger till en terminal för indikatorn på diagrammet. Det finns några komponenter som endast kan läggas till - eller raderas - Från frontpanelen eller diagrammet - även om de måste visas på båda. Flytta terminalen inuti öglan. Ändra representationen till ett heltal Format Kontrollen ska vara blå när du har den rätt Blå indikerar ett heltal. Nu lägger du till AC Ständigt till villkorlig terminal genom att högerklicka på terminalen för att lägga till en konstant Gör det konstant lika med True med hjälp av handverktyget. Vid denna punkt bör ditt blockschema se ut så här. Nu kan du köra programmet Allt som händer är Att indikatorn visar slingräknaren - och det kommer att visa att varje slinga tar väldigt lite tid. Om siffrorna på indikatorn snabbt zip-by, slår Stopp-knappen ut som ett stoppmärke precis under menyn. Det är din första ursäkt till Slingans värld Slingan du skrev borde ha körts mycket snabbt och borde ha visat ett snabbt ökande antal i indikatorn på frontpanelen. Vi kan nu lägga till en tidtagare i slingan för att styra hur snabbt den körs. Nästa kommer vi att ställa in Timing av loop execution. On tidsmenyn välj tidtimern med en metronome ikon och placera den inuti loop. Right klicka timern för att lägga till en konstant Gör det konstant lika med 1000 som s 1000 millisekunder med hjälp av textverktyget. Your diagram borde Titta l Ike this Förutom att vi genererar bilden nedan kan vi ha förlorat tråden från den TRUE konstanten till den villkorliga terminalen. Den här tråden ska vara där. Det visas bara inte på bilden. Vid denna punkt har du en slinga som är tidsbestämd, Och eftersom ingången till timer är 1000 som s millisekunder går det alltid med 1 sekunders intervall Det finns två saker vi vill göra för att förbättra detta program. Vi vill kunna ställa in tidsintervallet i sekunder. Vi vill visa Förfluten tid i sekunder. Vi kommer att ta hand om dessa två problem nästa. För att ställa in tidsintervallet måste du lägga till en numerisk kontroll på frontpanelen Gör det nu OBS! Du måste använda en kontroll som tillåter flytande ingångsinmatningar om du vill Till tiden slingan med intervaller som 1 5 sekunder Lägg till den här kontrollen nu. Efter att du har lagt till kontrollen högerklickar du på kontrollen och hittar terminalen för den numeriska kontrollen du just lagt till. Då måste du styra kontrollen så att den styr Inmatning till timerblokken Upp ovan Vi använde bara en konstant på 1000 för att få en sekund Om du matar in tidsintervallet i sekunder måste du multiplicera det tidsintervall som användaren matar in med en faktor 1000 för att få timerintervallet i millisekunder, så du behöver en Multiplikatorn och en konstant inmatning till ena sidan av multiplikatorn lika med 1000. Nu borde ditt blockschema se ut så här. Nå kör ditt program Naturligtvis är det enda som detta program gör för att berätta hur länge det har kört Det är ganska meningslöst om du inte använder det som en äggutlösare. P1 Ändra programmet ovan så att du kan stoppa programmet med en ON-OFF-kontroll. Här sa tips Försök byta ut konstanten om att den är ansluten till den villkorliga terminalen med en kontroll. Klicka på konstantuppsättningen till TRUE i blockschemat ovan och ändra det till en kontroll. Hitta sedan kontrollen på frontpanelen Ett sista program - bara för att avsluta det genom att producera något som blir nära användbart. Nästa lektion i denna serie kommer att ta Du till världen Av IEEE-488 GPIB-mätningar, och när du sätter dem i en slinga, har du några intressanta saker som du kan göra Hur som helst kommer det här sista programmet att beräkna en sinusvåg och visa den på klockan. Här är blockschemat. Du borde Notera följande i detta blockschema. I den tidigare vi beräknade vi den förflutna tiden och visade den på frontpanelen. Här tar vi den tiden och multiplicerar den med en faktor som är 2 p f. 2 p-faktorn är en konstant inbyggd i LabVIEW Du kan hitta den på panelen med numeriska operationer och du bör kolla in alla andra tillgängliga konstanter. Resultatet av multiplikationerna är ingången till en sinusfunktion. Du kan hitta den funktionen på den numeriska paletten för funktioner i en del - paletten av trigonometriska funktioner Kolla in vad som annars är där också. Först visar utgången från sinusfunktionen på en mätmätare. Den här indikatorn har en frontpaneldel och du borde lägga den från frontpanelen. Den främre fronten Panelen ser ut så här När du är klar. P2 Ändra programmet ovan så att du kan mata in sinusvågens amplitude Och det handlar om det för den här lektionen I nästa lektion får vi lära dig några enkla IEEE-488 GPIB-mätningar och därefter Vi ska göra dessa mätningar inuti en slinga.

Comments

Popular posts from this blog

Lames forexia de silvadec

Les caractristiques du bois composite Forexiareg: Garantie de 20 ans contre les attaques de termites et de mushignons. Rsistance naturelle aux agressions biologiques et lhumidit. Couleurs durables: le bois composite Forexia ne grise pas comme un bois massif. Faible entretien: Det är viktigt att du är medveten om att du är sjukvårdsman, du är inte nöjd med dig. Det är inte så mycket som du behöver, men du kan inte hitta det här. Det är inte så mycket som du behöver, och du behöver inte bara göra det så mycket som möjligt. Principe de pose inkl avec les clips. Sans charde: une scurit pour les petits et les plus grands. Adapteacute aux plages de piscine. Nej, du behöver inte se det här. Est jämförbar au chne dans sa rsistance labrasion et au poinonnement. Bonne rsistance la glisse, sec ou mouill. la mousse ne pntre pas les planches. Esthtique. aspekt bois, grand choix de couleurs. plusieurs dimensioner de lamesUne alternativ au bois massif Un mateacuteriau eacutecologique: Fabriqueacute e...