Enkel Glidande Medelvärde Vhdl


För mitt projekt behöver jag minska bruset av en ADC-utgång och implementera ett enkelt glidande medelfilter i VHDL. Även om det fungerar i simulering, se bilden det har något konstigt beteende om jag visar det på chipskopet när systemet körs i FPGA se bilden. VHDL-koden som jag använder för glidande medelvärdet är följande: Jag använder Xilinx Vivado tool 2015 2 som körs på Ubuntu 14 04 x64. Kan du snälla hjälpa mig att identifiera problemet, så att resultatet resulterar i simulering motsvarar resultatet efter synthes. I m försöker skriva en VHDL glidande genomsnittlig jämnt viktad modul som använder FSMD ata Från vad jag förstår, skulle de nödvändiga staterna vara något som hämta, dela, utdata Nedan är processen jag skrev, men jag känner att min logik är en lite av Observera att den data jag m medger är bara en konstant serie med 8 bitars nummer, så jag tänkte att det borde vara bra att använda en icke-kausal design. Dataen har 64 poster, och för närvarande är fönstret för medelvärdet 4. Hur fel ser det här ut. Ett fåtal problem Kan se omedelbart. Du kan inte initiera temp någonstans. Du har inte några gränskontroller för att räkna är det en subtyp eller bara ett naturligt heltal. Vad händer med mönsterräkning jag när du närmar dig gränsen. Hur rullar du över. Din för-loop är 0 till len - är du säker på att du inte menar 0 för att länka - 1. Eftersom hela din avkodningsprocess är klockad behöver du inte alls nstate alls. Observera att du inte ens initierar cstate men du är fortfarande avkodning av det Du kan antingen avkoda en separat kombinationsprocess eller bara bli av med nstate och tilldela cstate direkt. Annars beror det på dina designmål Om du inte bryr dig om genomströmning utan behöver springa med en mycket hög klockfrekvens, Kanske vill utföra ditt tillägg i följd i stället för parallellt, till exempel. Svarade den 5 september 14 på 13 32.thanks, som definitivt gör saker bättre om count rollover, jag är inte säker på hur det gör det, eftersom för varje mönster räkna Upp till 63, jag vill visa sitt värde och av Raderar fönstret runt det, så om jag rullar över i landet, borde det inte gå utom gränserna men det kommer inte visa fullständiga uppgifter om jag gjorde ett orsakssamarbete, jag skulle ha någon försening i början, är det en liknande sak Jag behöver här men hos slutanvändaren1710566 sep 5 14 vid 23 23.my lösning var elsif clk händelse då om räkna 64 sedan räkna 0 annars beräkna slutet om i för loop jag sätter en utgång om räkna jag var större än 63 user1710566 sep 6 14 vid 0 05. Det är möjligt att implementera ett glidande medelvärde i C utan att behöva ett fönster på prover. Jag har funnit att jag kan optimera lite genom att välja en fönsterstorlek som är en kraft av två för att tillåta bitskiftande istället för att dela men inte behöva en buffert, skulle det vara trevligt. Finns det ett sätt att uttrycka ett nytt glidande medelresultat endast som en funktion av det gamla resultatet och det nya provet. Ta ett exempel på glidande medelvärde, över ett fönster med 4 prov att vara . Lägg till nytt prov eA glidande medelvärde kan implementeras rekursivt, men för en exakt beräkning av movin g genomsnittet måste du komma ihåg det äldsta inmatningsprovet i summan dvs a i ditt exempel För ett längd N glidande medelvärde beräknar du. Där är ynsignalen och xn är ingångssignalen Eq 1 kan skrivas rekursivt som. Så du alltid måste komma ihåg provet x nN för att beräkna 2. Som påpekat av Conrad Turner kan du använda ett oändligt långt exponentialfönster istället, vilket gör det möjligt att beräkna utmatningen endast från tidigare utdata och nuvarande input. but detta är inte ett vanligt obetydligt glidande medelvärde, men ett exponentiellt vägt glidande medelvärde, där proverna tidigare har en mindre vikt, men åtminstone teoretiskt glömmer du aldrig någonting, vikterna blir bara mindre och mindre för prover långt ifrån. Jag genomförde Ett glidande medelvärde utan individuellt objektminne för ett GPS-spårningsprogram som jag skrev. Jag börjar med 1 prov och dela med 1 för att få nuvarande avg. I lägger sedan till ett exempel och delas med 2 till den nuvarande avg. This fortsätter tills jag får t O längden på genomsnittet. Varje gång senare lägger jag till i det nya provet, får medelvärdet och tar bort det genomsnittet från summan. Jag är inte matematiker men det verkade som en bra väg att göra det. Jag tänkte att det skulle vända mage av en riktig matte kille men det visar sig att det är ett av de accepterade sätten att göra det Och det fungerar bra Kom bara ihåg att ju högre längden desto långsammare följer det du vill följa Det kan inte ha betydelse för det mesta men när du följer satelliter kan spåret vara långt från det faktiska läget och det kommer att se dåligt ut. Du kan ha ett mellanrum mellan mitten och de efterföljande punkterna som jag valde en längd på 15 uppdaterade 6 gånger per minut för att få tillräckliga utjämning och inte komma för långt från den faktiska lätta positionen med de släta spårpunkterna. svarade 16 november 16 vid 23 03.initialisera totalt 0, räkna 0 varje gång vi ser ett nytt värde. Då en input scanf lägger man till totalt nyttValue, ett steg Räkna, dela en genomsnittlig totalräkning. Detta skulle vara en rörlig av radera över alla inmatningar. För att beräkna genomsnittet över endast de fyra sista ingångarna, skulle det krävas 4 inmatningsvariabler, kanske kopiering av varje ingång till en äldre ingångsvariabel och beräkning av det nya glidande medlet som summan av de fyra ingångsvariablerna dividerat med 4 högerskift 2 skulle var bra om alla ingångar var positiva för att göra den genomsnittliga beräkningen. svarade 3 februari 15 på 4 06. Det kommer faktiskt att beräkna det totala genomsnittet och INTE det rörliga genomsnittet När räkningen blir större påverkas effekten av något nytt insamlingsprov försvinnande liten Hilmar Feb 3 15 på 13 53. Ditt svar.2017 Stack Exchange, Inc.

Comments

Popular Posts