Nicht gerade ein gleitender Durchschnitt, aber eher wie ein Tiefpassfilter: Betrachten Sie die letzten 20 Samples, die in einer Variablen hinzugefügt wurden, nennen Sie es SUM. Sie erhalten dann eine neue Probe und möchten sie SUM hinzufügen, aber zuerst müssen Sie den ältesten in SUM gespeicherten Wert subtrahieren. Sie haben nicht die vorherigen 20 Werte, also nehmen Sie an, dass es der Mittelwert der letzten 20 ist, das heißt, SUM20. Auf diese Weise wäre die aktualisierte Version von SUM mit dem letzten Sample: SUMLTUM - SUM20 NEWSAMPLE Der Pseudomittel wird SUM20 sein. Natürlich, wenn man einen anderen Wert für n, zB n2k, wählt, wäre die Mathematik einfacher und schneller: SUMLT-SUM - SUMgtgtk NEWSAMPLE Auch hier ist dies kein gleitender Durchschnitt, aber es kann sehr gut den gleichen Anforderungen entsprechen . Das Verhalten dieser Mathematik ist einfach: es funktioniert wie ein 1-poliger Tiefpassfilter. Die Antwort auf eine Stufeneingabe ist eine digitalisierte Exponentialfunktion, und die Zeitkonstante ist ein bisschen unter nSAMPLETIME. Hoffe das hilft, ----- Mensaje Original ----- De: pic Mikrocontroller Diskussion Liste mailto: PICLIST-HvpawkHQRZp23lw5opublic. gmane. org En nombre de Robert Mash Enviado el: jueves, 18 de septiembre de 2003 17:09 Para : PICLIST-HvpawkHQRZp23lw5opublic. gmane. org Asunto: PIC gleitenden durchschnittlichen Filter Gibt es eine Möglichkeit, eine n Probe gleitenden Durchschnitt ohne Speicherung von n Proben Ich möchte eine 20 Probe gleitenden Durchschnitt zu tun. Muss ich beiseite legen 20 locationvariables für diese Aufgabe Gibt es einen Slicker Weg - piclist Hinweis: Um die PICList mailto: piclist-unsubscribe-request-XnYjCi86RQ8qNwGfFDJpublic. gmane. org - piclist Hinweis: Um die PICList mailto: piclist verlassen - unsubscribe-request-XnYjCi86RQ8qNwGfFDJpublic. gmane. org 2003-09-18 15:57:03 UTC Das ist eine gute Idee. Danke ----- Ursprüngliche Mitteilung ----- Von: Alvaro Deibe Diaz ltadeibe-5zoOUvexkpublic. gmane. orggt Zu: ltPICLIST-HvpawkHQRZp23lw5opublic. gmane. orggt Gesendet: Donnerstag, 18. September 2003 11:44 Betreff: Re: PIC gleitende durchschnittliche Filter Post von Alvaro Deibe Diaz Betrachten Sie die letzten 20 Samples in einer Variablen hinzugefügt, nennen Sie es SUM. Sie erhalten dann eine neue Probe und möchten sie SUM hinzufügen, aber zuerst müssen Sie den ältesten in SUM gespeicherten Wert subtrahieren. Sie haben nicht die vorherigen 20 Werte, also nehmen Sie an, dass es der Mittelwert der letzten 20 ist, das heißt, SUM20. Auf diese Weise wird die aktualisierte Version von SUM mit der letzten Probe SUMLT-SUMMUS-NEWSAMPLE Das Pseudomittel wird SUM20 sein. Natürlich, wenn du einen anderen Wert für n wählst, zB n2k, ist das SUM-SUM-SUM - SK-NEUSAMPLE Auch hier ist kein gleitender Durchschnitt, aber es kann sehr gut den gleichen Anforderungen entsprechen. Das Verhalten dieser Mathematik ist einfach: es funktioniert wie ein 1-poliger Tiefpassfilter. Die Antwort auf eine Stufeneingabe ist eine digitalisierte Exponentialfunktion, und die Zeitkonstante ist ein bisschen unter nSAMPLETIME. Hoffe das hilft, Alvaro Deibe. ----- Mensaje Original ----- En nombre de Robert Mash Enviado el: jueves, 18 de septiembre de 2003 17:09 Asunto: PIC gleitenden durchschnittlichen Filter Gibt es eine Möglichkeit, ein n Probe gleitenden Durchschnitt ohne Speicherung n Proben Ich möchte eine 20 Probe gleitenden Durchschnitt zu tun. Muss ich beiseite legen 20 locationvariables für diese Aufgabe Gibt es einen Slicker Weg Robert Mash - piclist Hinweis: Um die PICList - piclist Hinweis: Um die PICList - piclist Hinweis: Um die PICList mailto: piclist-abbestellen lassen - request-XnYjCi86RQ8qNwGfFDJpublic. gmane. org 2003-09-18 16:22:53 UTC Beitrag von Robert Mash Das ist eine gute Idee. Danke, ich habe so etwas in der avr. Ich war immer 7200 Lager Lesungen eine Sekunde, und ich brauchte, um sie über so viel wie vier Sekunden, mit minimalen Speicher Auswirkungen, wie ich hatte auch 20 serielle Puffer in meinem Widder passen. 28k Speicher war keine Option, ich musste es auf den 512 Bytes internen RAM machen. Was ich tat, war die Implementierung von Datenschichten. 16 Lesungen wurden summiert, dann gedreht, um einen zweiten Schichteintrag zu bilden. Zu diesem Zeitpunkt werden die Top-Layer-Daten abgelegt. Sobald sie verfügbar sind, werden 16 Sekunden-Layer-Einträge in eine dritte Schicht gemittelt, und die zweite Schicht wird abgelegt und so weiter. Wenn das Signal verschwunden ist, dann würde ich durchschnittlich, welche Daten verbleiben, und geben Sie ein einzelnes Lager aus. Die lustigste Sache war, ich musste sie auch von Polar zu rechteckigem Format umwandeln, damit ich die Mittelung realistisch machen konnte. Der Durchschnitt von drei Lagern scheint einfach, 89,90,91 ist offensichtlich 90, aber versuchen 359,0,1. Das normale ergebnis von 180 ist offensichtlich falsch Geschwindigkeit war auch ein Thema. Mittlerweile zurück auf der Ranch, acht serielle Ports bei 4800 Baud Vollduplex unterbrechen mich und der Neunte läuft bei 115200, auch Vollduplex und im Paketieren und de-packetisieren von Daten zwischen den Puffern. Die 4800 baud uarts waren max3100s reden mit mir durch spi, so fügen Sie ein paar paar puffer für spi in und out, und die damit verbundenen unterbreche. Die letzten beiden seriellen Puffer waren für einen internen Befehlskanal, den ich für die Strömungssteuerung und die Port-Einstellungen analysieren musste. Jeder der neun seriellen Kanäle hatte xonxoff, oder rtscts flow control auch. Es war eine ziemlich beschäftigte kleine Maschine. - piclist Hinweis: Um die PICList mailto: piclist-unsubscribe-request-XnYjCi86RQ8qNwGfFDJpublic. gmane. org 2003-09-18 16:05:42 UTC Ich habe so etwas in einem Bestandskontrollprogramm vor etwa 20 Jahren gemacht. Ich dachte, FIFO und LIFO Kalkulation war zu kompliziert, also habe ich einen gewichteten Durchschnitt. Ich habe die Menge auf der Hand und die Kosten gespeichert. Als neue Teile ankamen, kam ich mit einem neuen Gesamtwert durch Multiplikation der Menge an Hand mit den Kosten, die derzeit in der Inventar-Aufzeichnung und das Hinzufügen der Menge, die ich fügte hinzu, die neuen Kosten. Dies gab einen neuen Gesamtwert für die vorhandenen Teile. Dies wurde dann durch die neue quanity (Menge aus Inventarrekord plus Menge hinzugefügt) geteilt, um die neuen gewichteten Durchschnittskosten zu liefern, die dann wieder in den Inventarrekord (zusammen mit der aktualisierten Menge) zurückgegeben wurden. Jeder Inventarrekord musste nur die Menge an Hand und die Kosten tragen. Das war alles in dBase II geschrieben und lief unter CPM. Ich kann es noch unter einem CPM Emulator auf dieser Windoze Maschine laufen. FCC Rules Online bei hallikainen Das Beste, was man in den Jahren ins Internet schlägt - Juno SpeedBand Surfen Sie das Web bis zu FÜNF ZEITEN SCHNELLER Nur 14.95 Monat - Besuch Juno, um sich heute anzumelden - piclist Hinweis: Um die PICList mailto: piclist-abmelden - Request-XnYjCi86RQ8qNwGfFDJpublic. gmane. org Alvaro Deibe Diaz Post von Matt Redmond Also, kann yall empfehlen anständige Versionen der 1. AC zu PIC Compiler CCS hat einen schönen C-Compiler für 100-150. Es hat viele Bibliotheksfunktionen und Beispiele, die für Sie als Anfänger attraktiv sein könnten. Noch wichtiger ist, dass sie ein sehr aktives User-Forum haben - also ist die Hilfe nicht zu weit weg. Es gibt viele PIClist Mitglieder, die CCS C Compiler auch verwenden. Post von Matt Redmond 2. Ein Programmierer geeignet für den Einsatz mit einer breiten Palette von Flash-PICs. Im Teil zu USB aber es ist nicht wirklich notwendig. Ich denke, Parallel Bites Amp würde es gerne vermeiden. CCS hat auch einen schönen USB-Debugger (75), der alle späteren PIC16F - und PIC18F-Geräte programmiert. Richten Sie Ihre Hardware für ICSP von Anfang an ein und Sie sind alle eingestellt. Ich mag auch die Debuggersoftware viel besser als Microchips MPLAB. Wenn Sie einen guten Hardware-Programmierer wollen, der praktisch alle PICs abdeckt, empfiehlt Id Newfound Electronics Warp13 Programmierer. Sie halten es immer besser als Microchip mit ihrem eigenen PicStart Plus Programmierer. Sie können es direkt von ihnen oder aus einer Vielzahl von anderen Online-Quellen zu kaufen. Post von Matt Redmond 3. Ein PIC Simulator Microchips MPLAB Software (kostenlos) hat einen anständigen Simulator. Es geht um das einzige, was ich MPLAB für mehr und selten dazu nutze. Post von Matt Redmond Id Liebe in der Lage sein, in-Circuit-Debugging zu tun, aber ich denke, es ist wirklich nicht notwendig, es sei denn, es gibt einige Konsens, dass es ist. Siehe oben 2. -) Persönlich konnte ich nicht ohne einen In-Circuit-Debugger oder Emulator zu bekommen. Du kannst einfach echte Hardware nicht sehr gut simulieren und ich finde das, wo die meisten mein Debugging passieren muss - wo der PIC auf die echte Welt trifft Post von Matt Redmond Das ist nur Hobby Stuff amp Ich bin auf einem Budget - ich kann nicht blasen Tausend Dollar auf all dieses Zeug. Keine Notwendigkeit, viel Geld für gute Werkzeuge zu sprengen. Sie sollten in der Lage sein zu tun, was Sie ganz schön für weniger als 200-300 wollen. Matt Pobursky Maximale Leistungssysteme P. S. Ich habe keine Zugehörigkeit zu CCS, nur ein zufriedener Kunde. - piclist Hinweis: Um die PICList mailto: piclist-unsubscribe-request-XnYjCi86RQ8qNwGfFDJpublic. gmane. org Hallo matt Redmond, Im neu zu PIC auch, Ive grundlegende In-Circuit 16Fxxx Programmierer Kit (machen meine eigenen), weiß nicht, welches Projekt Um anzufangen. Sie geben mir eine gute Idee, mit zu beginnen, können wir die Info für dieses Projekt zwei Gehirne besser als eins teilen, denke ich. Obwohl ich Erfahrung mit Elektronikprojekt habe aber keine Erfahrung mit PIC. ----- Ursprüngliche Mitteilung ----- Von: pic Mikrocontroller Diskussion Liste mailto: PICLIST-HvpawkHQRZp23lw5opublic. gmane. orgOn Behalf von Matt Redmond Gesendet: Freitag, 19. September 2003 3:51 AM Zu: PICLIST-HvpawkHQRZp23lw5opublic. gmane. org Betreff: PIC: Nur anfangen, brauchen Ratschläge. Ich bin gerade bereit, mit PICs zu spielen. Meine Erfahrung mit Elektronik ist sehr begrenzt, obwohl ich die Grundlagen verstehe. Ich bin generell daran interessiert, das folgende mit PICs zu tun: Anbindung einer numerischen (3x4) Tastatur, Steuerung von LEDs und LCDs, Kommunikation mit externen Geräten über RS232 und Kommunikation mit einem PC über IrDA. So kann man auch anständige Versionen folgendermaßen empfehlen: 1. Ein C-PIC-Compiler 2. Ein Programmierer, der für den Einsatz mit einer Vielzahl von Flash-PICs geeignet ist. Im Teil zu USB aber es ist nicht wirklich notwendig. Ich denke, Parallel Bites Amp würde es gerne vermeiden. 3. Ein PIC-Simulator Id Liebe in der Lage sein, in-Circuit-Debugging zu tun, aber ich denke, es ist wirklich nicht notwendig, es sei denn, es gibt einen Konsens, dass es ist. Das ist nur Hobby-Stamp-Amp, ich bin auf einem Budget - ich kann nicht tausend Dollar auf all dieses Zeug wehen. - piclist Hinweis: Um die PICList zu verlassen mailto: piclist-unsubscribe-request-XnYjCi86RQ8qNwGfFDJpublic. gmane. org - piclist Hinweis: PICList Beiträge müssen mit einem Thema beginnen: PIC:, SX:, AVR: - gtuP ONLY EE:, OT : - gtOther KAUFEN:, AD: - gtAds Post von Matt Redmond 1. AC zu PIC Compiler Versuchen Sie Java - muvium Post von Matt Redmond 2. Ein Programmierer geeignet für den Einsatz mit einer breiten Palette von Flash-PICs. Im Teil zu USB aber es ist nicht wirklich notwendig. Ich denke, Parallel Bites Amp möchte es vermeiden. UVM Geräte haben Programmierer eingebaut - keine Notwendigkeit für einen Programmierer Beitrag von Matt Redmond 3. Ein PIC Simulator Testen Sie Virtual Breadboard. Virtualbreadboard - Halten Sie sich auf Version 1.2 für jetzt zum Lernen. Version 2 hat Unterstützung für Muvium (schließlich - Seufzer) Post von Matt Redmond Id Liebe in der Lage sein, in-Circuit Debugging zu tun, aber ich denke, es ist wirklich nicht notwendig, es sei denn, es gibt einige Konsens, dass es ist. Nun, es kommt für Muvium, aber es ist noch nicht hier - Remote Internet Debugging über Java Debugging Infrastruktur. Verwenden Sie Ihren Lieblings-Java-Editor zum Debuggen .. Als Notiz. 1.0.7 mit Unterstützung für 18F-Geräte ist alles nur verfügbar .. (sorry zu denen, die bereits gestorben sind, halten ihren Atem) James Caska muvium uVM - Java gezüchtet für eingebettet ----- Ursprüngliche Nachricht ----- Von: pic Mikrocontroller Diskussionsliste mailto: PICLIST-HvpawkHQRZp23lw5opublic. gmane. org Im Auftrag von CL Low Gesendet: Freitag, den 19. September 2003 um 14:59 Uhr Zu: PICLIST-HvpawkHQRZp23lw5opublic. gmane. org Betreff: Re: PIC: Gerade anfangen, brauche Rat. Hallo matt Redmond, Im neu auf PIC auch, Ive grundlegende In-Circuit 16Fxxx Programmierer Kit (mach meine eigenen), weiß nicht, welches Projekt zu starten-on. Sie geben mir eine gute Idee, um mit zu beginnen, können wir die Informationen dafür teilen Projekt zwei Gehirne besser als eins, denke ich. Obwohl ich Erfahrung mit Elektronikprojekt habe aber keine Erfahrung mit PIC. ----- Ursprüngliche Mitteilung ----- Von: pic Mikrocontroller Diskussion Liste mailto: PICLIST-HvpawkHQRZp23lw5opublic. gmane. orgOn Behalf von Matt Redmond Gesendet: Freitag, 19. September 2003 3:51 AM Zu: PICLIST-HvpawkHQRZp23lw5opublic. gmane. org Betreff: PIC: Nur anfangen, brauchen Ratschläge. Im gerade jetzt bereit, mit PICs zu spielen. Meine Erfahrung mit Elektronik ist sehr begrenzt, obwohl ich die Grundlagen verstehe. Ich bin generell daran interessiert, das folgende mit PICs zu tun: Anbindung einer numerischen (3x4) Tastatur, Steuerung von LEDs und LCDs, Kommunikation mit externen Geräten über RS232 und Kommunikation mit einem PC über IrDA. So kann man auch anständige Versionen folgendermaßen empfehlen: 1. Ein C-PIC-Compiler 2. Ein Programmierer, der für den Einsatz mit einer Vielzahl von Flash-PICs geeignet ist. Im Teil zu USB aber es ist nicht wirklich notwendig. Ich denke, Parallel Bites Amp würde es gerne vermeiden. 3. Ein PIC-Simulator Id Liebe in der Lage sein, in-Circuit-Debugging zu tun, aber ich denke, es ist wirklich nicht notwendig, es sei denn, es gibt einen Konsens, dass es ist. Das ist nur Hobby-Stamp-Amp, ich bin auf einem Budget - ich kann nicht tausend Dollar auf all dieses Zeug wehen. - piclist Hinweis: Um die PICList zu verlassen mailto: piclist-unsubscribe-request-XnYjCi86RQ8qNwGfFDJpublic. gmane. org - piclist Hinweis: PICList Beiträge müssen mit einem Thema beginnen: PIC:, SX:, AVR: - gtuP ONLY EE:, OT : - Weitere KAUFEN:, AD: - gtAds - piclist Hinweis: PICList Beiträge müssen mit einem Thema beginnen: PIC:, SX:, AVR: - gtuP NUR EE:, OT: - gtOther BUY:, AD: - gtAds Sent: Donnerstag, 18. September 2003 12:21 Uhr Betreff: PIC: Gleitender Durchschnitt Filter Gibt es einen Weg, um ein n Probe gleitenden Durchschnitt ohne Speicherung von n Proben Ich möchte eine 20 Probe gleitenden Durchschnitt zu tun. Muss ich beiseite legen 20 locationvariables für diese Aufgabe Gibt es einen Slicker Weg Robert Mash Das hängt davon ab, wie genau Sie wollen, um den Standard mittleren Durchschnitt zu approximieren. Wenn Sie eine herkömmliche Boxcar-Integration wünschen, müssen Sie alle 20 vorherigen Werte behalten, damit Sie sie einzeln subtrahieren können, um neue Bedingungen hinzuzufügen. (Der Name boxcar stammt aus der rechteckigen Form der Fensterfunktion, die sich aus dem Hinzufügen jedes Termes mit gleichem Gewichtungsfaktor ergibt.) Wenn Sie bereit sind, einen exponentiellen Filter (genau analog zu einem RC Hardware Filter) zu implementieren, können Sie viel besser machen . Aus der Z-Transformationstheorie kann ein einstufiges rekursives Filter als y (n) x (n) alpha y (n-1) y (n) modelliert werden, wobei der Stromausgang x (n) der Stromeingang y (n -1) ist die vorherige Ausgabe und alpha ist eine Konstante, die das Zeitintervall festlegt, über das sich der Filter an den Eingang erinnert. Wenn ich dieses Recht dachte, ist alpha exp (- T tau), wobei T das Zeitintervall zwischen den Proben und tau ist, die effektive Zeitkonstante erwünscht. Rescaling wird benötigt, um eine Beziehung zwischen tau und 20 (oder was auch immer benötigt wird) zu finden. Diese Art von Filter diskontiert früheren Samples, wie die Zeit vergeht, im Gegensatz zu dem mittleren (Boxcar) Filter, der alle Werte gleichermaßen gleich behandelt, bis sie ausfallen. Es gibt mehrere Einschränkungen für diesen Filter. 1. Es benötigt Gleitkomma. 2. Entweder muss Alpha vorberechnet werden, oder die Exponentialfunktion muss zur Laufzeit zur Verfügung stehen. - piclist Hinweis: PICList Beiträge müssen mit einem Thema beginnen: PIC:, SX:, AVR: - gtuP NUR EE:, OT: - gtOther BUY:, AD: - gtAds 2003-09-20 16:52:55 UTC Post Von John N. Power Wenn Sie bereit sind, einen exponentiellen Filter (genau analog zu einem RC Hardware Filter) zu implementieren, können Sie viel besser machen. Aus der Z-Transformationstheorie kann ein einstufiges rekursives Filter als y (n) x (n) alpha y (n-1) modelliert werden. Dies definiert definitiv kein RC-Filter. Für eine Sache, beachten Sie, dass dies eine unendlich zunehmende Serie auch mit einer konstanten Eingabe und ein ALPHA größer als 0. Es führt keine nützliche Filterfunktion, die ich denken kann. Wie schon oft dargelegt wurde, ist der richtige Weg, um einen RC-Filter zu modellieren: FILT lt-- FILT ALPHA (NEU - FILT) Siehe die Archive für viele ausführliche Diskussionen. Embed Inc, eingebettete Systemspezialisten in Littleton Massachusetts (978) 742-9014, embedinc - piclist Hinweis: Der Listenserver kann für Sie Unterthemen (wie Anzeigen oder Offthemen) herausfiltern. Siehe piclisttopics 2003-10-16 18:55:37 UTC sah deinen Beitrag. Ich muss das Lesen von ADXL202 g Sensor entwerfen. Wie Sie sicher wissen, es hat große laute und ein Filter, oder eine laufende avery ist kritisch. Ich fand nicht die Erklärung über Ihre Gleichung. PICLIST ist unten. Könnten Sie helfen, Detail zu finden, um den Faktor Paul zu entscheiden. Es gibt keinen Grund, dass dies eine private Nachricht für mich sein muss. Die PICLIST ist niemals lange her. Ich habe gerade Nachrichten abgerufen und die Aktivität sieht ziemlich kontinuierlich aus, seit ich das letzte Mal geholt habe. Die längste Lücke zwischen den Nachrichten war nur 40 Minuten. Wie für den Filter, welches Detail, welcher Faktor Embed Inc, eingebettete Systemspezialisten in Littleton Massachusetts (978) 742-9014, embedinc - piclist Hinweis: Die PICList ist drei verschiedene Möglichkeiten archiviert. Siehe piclistarchives für Details. Jan-Erik Soderholm XA (TNPAC) 2003-09-20 09:38:21 UTC Beitrag von John Ferrell Der 16F84 ist nicht produziert Der 16F84 ist. Der 16F84A ist nicht. Ist es nicht wirklich wichtig, es gibt keinen Grund, was so jemals, um etwas mit einem von ihnen zu entwickeln. - piclist Hinweis: Der Listenserver kann für Sie Unterthemen (wie Anzeigen oder Off-Themen) herausfiltern. Siehe piclisttopics 2003-09-20 19:58:28 UTC Beitrag von John Ferrell Der 16F84 ist nicht produziert Post von John Ferrell Der 16F84 ist. Der 16F84A ist nicht. Post von John Ferrell Ist nicht wirklich wichtig, es gibt keinen Grund, was so jemals, um etwas mit einem von ihnen zu entwickeln. Jan-Erik Viele Projekte im Internet, sehr gute Preise bei überschüssigen Geschäften, viele davon kostenlos von Leuten, die nur 628, 877 und 18F Serien verwenden, etc -------------- ------------------- Haben Sie Yahoo Yahoo SiteBuilder - Kostenlose, einfach zu bedienende Website-Design-Software - piclist Hinweis: Der Listen-Server kann herausfiltern Unterthemen (wie Anzeigen oder off Themen) für Sie. Siehe piclisttopics 2003-09-22 18:29:59 UTC Was auch immer. Schauen Sie sich an: finitesited3jsys16F628.html John Ferrell 6241 Phillippi Rd Julian NC 27283 Telefon: (336)685-9606 johnferrell-public. gmane. org Dixie Wettbewerb Produkte NSRCA 479 AMA 4190 W8CCW Mein Wettbewerb ist nicht mein Feind - piclistnomail Going offline Dont AutoReply Wir E-Mail listserv-XnYjCi86RQ8qNwGfFDJpublic. gmane. org mit SET PICList DIGEST im Körper Auf Thu, 25 Sep 2003 11:27:09 0800, CL Low schrieb: :: einige, wie ich versehentlich heruntergeladen diese Version auf Web, LET PIC :: BASIC LITE :: Version 7.1, kümmern Sie sich, lassen Sie mich wissen, wo bekomme ich ein :: Programmierer (Hardware) :: curcuit supportcomparable mit ihm Im ein neuer Hobbyist. :: regards :: cl low Jeder pic Programmierer kann die Hex-Datei verwenden, die von diesem Compiler produziert wird. Crownhill (die Leute, die den LET Basic Compiler machen) auch eine Reihe von Programmierern und Entwicklungsboards. Und bevor Wouter eine E-Mail abfeuert - hat er die Wisp628, die auch mit der Hex-Datei arbeiten wird. Ich glaube, dass einer der Crownhills Programmierer dem EPIC ähnlich ist und wenn ihre IDE eine Programmieroption hat, dann könnte dies der Programmierer sein, den es erwartet. Siehe ihre Website für weitere Details. PS Niemals etwas versehentlich tun, viel mehr Spaß, es absichtlich zu tun :-) - cdb, bodgy1-sFbbPxZDHXw0npublic. gmane. org am 26.09.2003 Ich war schon immer ein paar Dendrites hinter einem Axon und glaub mir, dass es zeigt. Licht fährt schneller als Klang. Thats, warum manche Leute hell erscheinen, bis sie sprechen - piclist Hinweis: Der Listenserver kann für Sie Unterthemen (wie Anzeigen oder Off-Themen) herausfiltern. Siehe piclisttopics Jan-Erik Soderholm XA (TNPAC) 2003-09-20 20:05:04 UTC Zusammenfassung: Eine neuere Version dieses Gerätes ist verfügbar. Bitte beachten Sie PIC16F84A Aber wir alle wissen das, richtig Es gibt Leute, die alte Autos auch fahren, nur für den Spaß daran. Ich habe nichts dagegen - piclist Hinweis: Der Listenserver kann für Sie Unterthemen (wie Anzeigen oder Off-Themen) herausfiltern. Siehe piclisttopics 2003-09-20 20:15:58 UTC Beitrag von Jan-Erik Soderholm XA (TNPAC) Eine neuere Version dieses Gerätes ist verfügbar. Bitte beachten Sie PIC16F84A Aber wir alle wissen das genau das, was ist mit: STATUS: IN PRODUCTION Post von Jan-Erik Soderholm XA (TNPAC) Es gibt Leute, die alte Autos auch fahren, nur für den Spaß daran. Ich habe nichts dagegen Ich auch nicht, aber ich sage nicht, dass sie nicht existieren, weil ich ein neues treibe --------------------------------- Haben Sie Yahoo Yahoo SiteBuilder - Kostenlose, einfach zu bedienende Website-Design-Software - piclist Hinweis: Der Listen-Server kann herauszufinden, Unterthemen (wie Anzeigen oder off Themen) für Sie. Siehe piclisttopics 2003-09-21 21:10:54 UTC Beitrag von Robert Mash Gibt es einen Weg, um ein n Probe gleitenden Durchschnitt ohne Speicherung von n Proben Ich möchte eine 20 Probe gleitenden Durchschnitt zu tun. Muss ich beiseite legen 20 locationvariables für diese Aufgabe Gibt es einen Slicker Weg Robert Mash Wenn Sie bereit sind, einen exponentiellen Filter (genau analog zu einem RC Hardware-Filter) zu implementieren, können Sie viel besser machen. Aus der Z-Transformationstheorie kann ein einstufiger rekursiver Filter als y (n) x (n) alpha y (n-1) modelliert werden. Ich glaube, ich habe einen Fehler bei der Normalisierung dieser Formel gemacht. Es sollte y (n) (1 - alpha) x (n) alpha y (n-1) - piclist Hinweis: Die PICList ist drei verschiedene Arten archiviert. Siehe piclistarchives für Details. 2003-09-21 22:08:48 UTC Beitrag von John N. Power Ich glaube, ich habe einen Fehler in der Normalisierung dieser Formel gemacht. Es sollte y (n) sein (1 - alpha) x (n) alpha y (n-1) Ja das korrekt modelliert ein einfaches RC-Filter, obwohl es im Allgemeinen nicht so ist, wie du einen solchen Filter auf einem PIC implementieren möchte. Embed Inc, eingebettete Systemspezialisten in Littleton Massachusetts (978) 742-9014, embedinc - piclist Hinweis: Die PICList ist drei verschiedene Möglichkeiten archiviert. Siehe piclistarchives für Details. Robert Mash 2003-09-18 15:09:05 UTC Alvaro Deibe Diaz 2003-09-18 15:44:51 UTC Robert Mash 2003-09-18 15:57:03 UTC David VanHorn 2003-09-18 16:22 : 53 UTC Harold Hallikainen 2003-09-18 16:05:42 UTC Alvaro Deibe Diaz 2003-09-18 17:11:58 UTC Robert Mash 2003-09-18 16:21:29 UTC Olin Lathrop 2003-09-18 17:03:49 UTC Duane 2003-09-18 17:49:24 UTC Olin Lathrop 2003-09-18 18:03:21 UTC Picdude 2003-09-18 18:05:57 UTC Picdude 2003-09-18 20 : 09: 09 UTC Dan Devine 2003-09-18 18:29:50 UTC Duane 2003-09-18 20:11:34 UTC Olin Lathrop 2003-09-18 22:05:00 UTC Wouter van Ooijen 2003-09- 18 19:00:39 UTC Matt Redmond 2003-09-18 19:51:27 UTC Wouter van Ooijen 2003-09-18 20:20:14 UTC Matt Pobursky 2003-09-18 21:04:38 UTC Olin Lathrop 2003 -09-18 22:13:39 UTC Matt Pobursky 2003-09-19 01:30:28 UTC Charles Rogers 2003-09-18 21:50:51 UTC CL Low 2003-09-19 04:58:36 UTC James Caska 2003-09-19 05:55:07 UTC John Ferrell 2003-09-19 20:04:04 UTC Bob Blick 2003-09-19 18:50:46 UTC CL Low 2003-09-20 04:46:24 UTC Vincent Vega 2003-09-19 21:05:59 UTC Harold Hallikainen 2003-09-18 17:40:46 UTC mer Yalhi 2003-09-19 05:48:53 UTC John N. Power 2003-09-19 20 : 08: 15 UTC Olin Lathrop 2003-09-20 16:52:55 UTC Olin Lathrop 2003-10-16 18:55:37 UTC Jan-Erik Soderholm XA (TNPAC) 2003-09-20 09:38:21 UTC Vincent Vega 2003-09-20 19:58:28 UTC John Ferrell 2003-09-22 18:29:59 UTC CL Low 2003-09-25 03:27:09 UTC CL Low 2003-09-25 04:17: 37 UTC cdb 2003-09-26 02:01:51 UTC Jan-Erik Soderholm XA (TNPAC) 2003-09-20 20:05:04 UTC Vincent Vega 2003-09-20 20:15:58 UTC John N. Power 2003-09-21 21:10:54 UTC Olin Lathrop 2003-09-21 22:08:48 UTCAs andere haben erwähnt, sollten Sie einen IIR (unendliche Impulsantwort) Filter anstatt die FIR (endliche Impulsantwort) Filter Sie betrachten Verwenden jetzt. Es gibt mehr dazu, aber auf den ersten Blick sind FIR-Filter als explizite Windungen und IIR-Filter mit Gleichungen implementiert. Der spezielle IIR-Filter, den ich viel in den Mikrocontrollern verwende, ist ein einpoliger Tiefpassfilter. Dies ist das digitale Äquivalent eines einfachen R-C-Analogfilters. Für die meisten Anwendungen, diese haben bessere Eigenschaften als die Box-Filter, die Sie verwenden. Die meisten Verwendungen eines Kastenfilters, dem ich begegnet haben, sind ein Ergebnis von jemand, der nicht in der digitalen Signalverarbeitung Klasse auffällt, nicht als Ergebnis der Notwendigkeit ihrer besonderen Eigenschaften. Wenn du nur hohe Frequenzen abschwächen willst, die du kennst, ist Rauschen, ein einpoliger Tiefpassfilter ist besser. Der beste Weg, um ein digital in einem Mikrocontroller zu implementieren, ist in der Regel: FILT lt-- FILT FF (NEU - FILT) FILT ist ein Stück persistenten Zustand. Dies ist die einzige persistente Variable, die Sie benötigen, um diesen Filter zu berechnen. NEU ist der neue Wert, den der Filter mit dieser Iteration aktualisiert. FF ist die Filterfraktion. Die die Schwere des Filters anpasst. Schauen Sie sich diesen Algorithmus an und sehen Sie, dass für FF 0 der Filter unendlich schwer ist, da sich die Ausgabe niemals ändert. Für FF 1 ist das eigentlich kein Filter, da der Ausgang gerade dem Eingang folgt. Nützliche Werte sind dazwischen. Bei kleinen Systemen wählst du FF auf 12 N, so dass die Multiplikation mit FF als rechte Verschiebung durch N Bits erreicht werden kann. Zum Beispiel könnte FF 116 sein und die Multiplikation mit FF daher eine rechte Verschiebung von 4 Bits. Andernfalls braucht dieser Filter nur einen Subtrakt und man fügt hinzu, obwohl die Zahlen in der Regel breiter als der Eingabewert sein müssen (mehr auf numerische Genauigkeit in einem separaten Abschnitt unten). Ich nehme normalerweise AD-Lesungen deutlich schneller als sie benötigt werden und wenden Sie zwei dieser Filter kaskadiert. Dies ist das digitale Äquivalent von zwei R-C-Filtern in Serie und dämpft um 12 dBoctave über der Rolloff-Frequenz. Allerdings ist für AD-Lesungen in der Regel mehr relevant, um den Filter im Zeitbereich zu betrachten, indem man seine Schrittantwort berücksichtigt. Dies sagt Ihnen, wie schnell Ihr System eine Veränderung sehen wird, wenn das, was Sie Änderungen messen. Um das Entwerfen dieser Filter zu erleichtern (was nur bedeutet, FF zu wählen und zu entscheiden, wie viele von ihnen zu kaskaden), verwende ich mein Programm FILTBITS. Sie legen die Anzahl der Schaltbits für jede FF in der kaskadierten Filterreihe fest und berechnet die Sprungantwort und andere Werte. Eigentlich laufe ich in der Regel über mein Wrapper-Skript PLOTFILT. Dies führt FILTBITS, die eine CSV-Datei macht, dann die CSV-Datei. Zum Beispiel ist hier das Ergebnis von PLOTFILT 4 4: Die beiden Parameter zu PLOTFILT bedeuten, dass es zwei Filter gibt, die von der oben beschriebenen Art kaskadiert sind. Die Werte von 4 geben die Anzahl der Verschiebungsbits an, um die Multiplikation mit FF zu realisieren. Die beiden FF-Werte sind also in diesem Fall 116. Die rote Spur ist die Einheit Schritt Antwort, und ist die Hauptsache zu betrachten. Zum Beispiel sagt Ihnen dies, dass, wenn sich die Eingabe sofort ändert, die Ausgabe des kombinierten Filters auf 90 des neuen Wertes in 60 Iterationen absetzen wird. Wenn Sie sich um 95 Zeit entscheiden, dann müssen Sie auf 73 Iterationen warten, und für 50 Einschwingzeit nur 26 Iterationen. Die grüne Spur zeigt Ihnen die Ausgabe von einer einzigen Amplitude. Dies gibt Ihnen eine Vorstellung von der zufälligen Geräuschunterdrückung. Es sieht so aus, als würde kein einzelnes Beispiel mehr als eine 2,5-Änderung in der Ausgabe verursachen. Die blaue Spur ist, ein subjektives Gefühl zu geben, was dieser Filter mit weißem Rauschen macht. Dies ist kein rigoroser Test, da es keine Garantie gibt, was genau der Inhalt von den zufälligen Zahlen war, die als der weiße Rauschen Eingang für diesen Lauf von PLOTFILT ausgewählt wurden. Sein nur, um Ihnen ein grobes Gefühl zu geben, wie viel es zerquetscht wird und wie glatt es ist. PLOTFILT, vielleicht FILTBITS, und viele andere nützliche Sachen, vor allem für PIC Firmware-Entwicklung ist in der PIC Development Tools Software-Version auf meiner Software-Downloads-Seite verfügbar. Hinzugefügt über numerische Präzision sehe ich aus den Kommentaren und nun eine neue Antwort, dass es Interesse an der Diskussion über die Anzahl der Bits, die benötigt werden, um diesen Filter zu implementieren. Beachten Sie, dass die Multiplikation mit FF log 2 (FF) neue Bits unterhalb des Binärpunktes erzeugt. Bei kleinen Systemen wird FF gewöhnlich als 12 N gewählt, so daß diese Multiplikation tatsächlich durch eine rechte Verschiebung von N Bits realisiert wird. FILT ist also meist ein Fixpunkt ganzzahlig. Beachten Sie, dass dies nicht ändern, eine der Mathematik aus der Prozessoren Sicht. Wenn Sie z. B. 10-Bit-AD-Messwerte und N 4 (FF 116) filtern, benötigen Sie 4 Bruchbits unterhalb der 10-Bit-Integer-AD-Messwerte. Eine der meisten Prozessoren, youd machen 16-Bit-Integer-Operationen aufgrund der 10-Bit-AD-Messwerte. In diesem Fall können Sie immer noch genau die gleichen 16-Bit-Integer-Opertionen, aber beginnen mit der AD-Lesungen links um 4 Bits verschoben. Der Prozessor kennt den Unterschied nicht und muss nicht. Die Mathematik auf ganzen 16-Bit-Ganzzahlen zu machen, funktioniert man, wenn man sie als 12,4 Fixpunkt oder wahre 16-Bit-Ganzzahlen betrachtet (16,0 Fixpunkt). Im Allgemeinen müssen Sie N Bits jeden Filterpol hinzufügen, wenn Sie nicht möchten, dass Rauschen aufgrund der numerischen Darstellung hinzufügen. Im obigen Beispiel müsste der zweite Filter von zwei 1044 18 Bits haben, um keine Informationen zu verlieren. In der Praxis auf einer 8-Bit-Maschine, die bedeutet, dass Sie 24-Bit-Werte verwenden. Technisch würde nur der zweite Pol von zwei den größeren Wert benötigen, aber für die Firmware-Einfachheit verwende ich gewöhnlich dieselbe Darstellung und damit denselben Code für alle Pole eines Filters. Normalerweise schreibe ich eine Unterroutine oder ein Makro, um einen Filterpolbetrieb durchzuführen, dann das auf jeden Pol anwenden. Ob eine Subroutine oder ein Makro davon abhängt, ob Zyklen oder Programmspeicher in diesem Projekt wichtiger sind. So oder so, ich benutze einen Scratch-Zustand, um NEU in den Subroutinemacro zu übergeben, der FILT aktualisiert, aber auch Lasten, die in den gleichen Kratzer Zustand NEU war in. Dies macht es einfach, mehrere Pole anzuwenden, da die aktualisierte FILT von einem Pole die NEU ist Der nächsten. Wenn eine Subroutine, ist es nützlich, einen Zeiger auf FILT auf dem Weg in, die aktualisiert wird, um nur nach FILT auf dem Ausweg. Auf diese Weise arbeitet die Subroutine automatisch auf aufeinanderfolgenden Filtern im Speicher, wenn sie mehrmals aufgerufen wird. Mit einem Makro braucht man keinen Zeiger, da du die Adresse passierst, um bei jeder Iteration zu operieren. Code Beispiele Hier ist ein Beispiel für ein Makro wie oben für ein PIC 18 beschrieben: Und hier ist ein ähnliches Makro für ein PIC 24 oder dsPIC 30 oder 33: Beide Beispiele werden als Makros mit meinem PIC Assembler Preprocessor implementiert. Die mehr fähig ist als die eingebauten Makroanlagen. Clabacchio: Ein anderes Problem, das ich erwähnt habe, ist die Firmware-Implementierung. Sie können einmal ein einzelnes Pole-Tiefpassfilter-Subroutine schreiben, dann mehrmals anwenden. In der Tat schreibe ich normalerweise eine solche Unterroutine, um einen Zeiger in den Speicher auf den Filterzustand zu bringen, dann schalte ihn der Zeiger vor, damit er nacheinander einfach aufgerufen werden kann, um mehrpolige Filter zu realisieren. Ndash Olin Lathrop 20. April um 15:03 1. Vielen Dank für eure Antworten - alle von ihnen. Ich habe mich entschlossen, diesen IIR Filter zu verwenden, aber dieser Filter wird nicht als Standard LowPass Filter verwendet, da ich die Zählerwerte durchschnittlich vergleichen und sie vergleichen muss, um Änderungen in einem bestimmten Bereich zu erkennen. Da diese Werte von sehr unterschiedlichen Dimensionen je nach Hardware abhängen, wollte ich einen Durchschnitt nehmen, um auf diese Hardware-spezifischen Änderungen automatisch reagieren zu können. Ndash sensslen Wenn Sie mit der Beschränkung einer Macht von zwei Anzahl von Gegenständen zu durchschnittlich (dh 2,4,8,16,32 usw.) leben können, dann kann die Kluft einfach und effizient auf einem getan werden Low-Performance-Mikro mit keine dedizierten Divide, weil es als Bit-Shift durchgeführt werden kann. Jede Schicht rechts ist eine Potenz von zwei zB: Das OP dachte, er habe zwei Probleme, die sich in einem PIC16 und Speicher für seinen Ringpuffer teilen. Diese Antwort zeigt, dass die Teilung nicht schwierig ist. Zugegeben, es adressiert nicht das Speicherproblem, aber das SE-System erlaubt teilweise Antworten, und Benutzer können etwas von jeder Antwort für sich selbst nehmen oder sogar bearbeiten und kombinieren other39s Antworten. Da einige der anderen Antworten eine Aufteilungsoperation erfordern, sind sie ähnlich unvollständig, da sie nicht zeigen, wie man dies effizient auf einem PIC16 erreichen kann. Ndash Martin Apr 20 12 at 13:01 Es gibt eine Antwort für eine echte gleitende durchschnittliche Filter (aka boxcar Filter) mit weniger Speicherbedarf, wenn Sie nicht Bedenken Downsampling. Es heißt ein kaskadierter Integrator-Kamm-Filter (CIC). Die Idee ist, dass Sie einen Integrator haben, den Sie Unterschiede über einen Zeitraum nehmen, und das Schlüssel speichersparendes Gerät ist, dass durch Downsampling, müssen Sie nicht jeden Wert des Integrators zu speichern. Es kann mit dem folgenden Pseudocode implementiert werden: Ihre effektive gleitende durchschnittliche Länge ist decimationFactorstatesize, aber Sie müssen nur umzustandsmuster zu halten. Offensichtlich können Sie eine bessere Leistung erzielen, wenn Ihr stateize und decimationFactor Potenzen von 2 sind, so dass die Division und Restbetreiber durch Verschiebungen und Masken ersetzt werden. Postscript: Ich bin einverstanden mit Olin, dass Sie immer einfache IIR-Filter vor einem gleitenden durchschnittlichen Filter beachten sollten. Wenn Sie nicht die Frequenznulls eines Boxcar Filters benötigen, wird ein 1-poliger oder 2-poliger Tiefpassfilter wahrscheinlich gut funktionieren. Auf der anderen Seite, wenn Sie für die Zwecke der Dezimierung filtern (wobei ein High-Sample-Rate-Input und Mittelwertbildung für die Verwendung durch einen Low-Rate-Prozess) dann ein CIC-Filter kann genau das, was Sie suchen. (Vor allem, wenn Sie stateize1 verwenden und den Ringpuffer insgesamt mit nur einem vorherigen Integrator-Wert vermeiden können). Hierbei handelt es sich um eine eingehende Analyse der Mathematik hinter dem ersten Auftrags-IIR-Filter, den Olin Lathrop bereits auf der Digital Signal Processing Stack Exchange beschrieben hat (Enthält viele schöne Bilder.) Die Gleichung für diesen IIR-Filter ist: Dies kann mit nur Integern und keine Teilung mit dem folgenden Code implementiert werden (könnte einige Debugging, wie ich aus dem Speicher war.) Dieser Filter nähert sich einem gleitenden Durchschnitt von Die letzten K-Samples durch Setzen des Wertes von alpha auf 1K. Führen Sie dies im vorherigen Code durch, indem Sie BITS auf LOG2 (K) definieren, dh für K 16 gesetzt BITS bis 4, für K 4 gesetzt BITS bis 2, etc. (Ill überprüfen Sie den hier aufgeführten Code, sobald ich eine Änderung bekomme und Beantworten Sie diese Antwort, wenn nötig.) Beantwortet Jun 23 12 um 4:04 Heres ein einpoliger Tiefpassfilter (gleitender Durchschnitt mit Cutoff-Frequenz CutoffFrequenz). Sehr einfach, sehr schnell, funktioniert super und fast kein Speicher oben. Hinweis: Alle Variablen haben Umfang über die Filterfunktion hinaus, mit Ausnahme der übergebenen newInput Hinweis: Dies ist ein einstufiger Filter. Mehrere Stufen können zusammenkaskadiert werden, um die Schärfe des Filters zu erhöhen. Wenn Sie mehr als eine Stufe verwenden, müssen Sie den DecayFactor (bezogen auf die Cutoff-Frequency) anpassen, um zu kompensieren. Und offensichtlich alles, was Sie brauchen, ist die beiden Linien irgendwo platziert, sie brauchen nicht ihre eigene Funktion. Dieser Filter hat eine Rampenzeit, bevor der gleitende Mittelwert des Eingangssignals entspricht. Wenn Sie diese Rampenzeit umgehen müssen, können Sie MovingAverage einfach auf den ersten Wert von newInput anstelle von 0 initialisieren und hoffen, dass der erste newInput kein Ausreißer ist. (CutoffFrequencySampleRate) hat einen Bereich zwischen 0 und 0,5. DecayFactor ist ein Wert zwischen 0 und 1, in der Regel in der Nähe von 1. Single-Präzision Schwimmer sind gut genug für die meisten Dinge, ich bevorzuge einfach Doppelzimmer. Wenn du mit Ganzzahlen haften musst, kannst du DecayFactor und Amplitude Factor in gebrochene Ganzzahlen umwandeln, in denen der Zähler als Integer gespeichert ist und der Nenner eine ganzzahlige Potenz von 2 ist (also kannst du dich nach rechts verschieben Nenner anstatt sich während der Filterschleife zu teilen). Zum Beispiel, wenn DecayFactor 0,99, und du willst ganze Zahlen verwenden, kannst du DecayFactor 0,99 65536 64881 einstellen. Und dann, wenn du dich von DecayFactor in deiner Filterschleife vermehrst, verschiebst du einfach das Ergebnis 16. Für weitere Informationen dazu ein exzellentes Buch thats Online, Kapitel 19 auf rekursive Filter: dspguidech19.htm PS Für das Moving Average-Paradigma, ein anderer Ansatz zur Einstellung DecayFactor und AmplitudeFactor, die möglicherweise mehr relevant für Ihre Bedürfnisse, sagen wir, dass Sie wollen die vorherigen, etwa 6 Punkte gemittelt zusammen, tun es diskret, youd fügen Sie 6 Elemente und teilen durch 6, so Sie können den AmplitudeFactor auf 16 und DecayFactor auf (1.0 - AmplitudeFactor) einstellen. Antwortete am 14. Mai 12 um 22:55 Alle anderen haben sich gründlich über den Nutzen von IIR vs. FIR und auf Power-of-Two Division kommentiert. Id nur gerne einige Implementierungsdetails zu geben. Die unten funktioniert gut auf kleinen Mikrocontrollern ohne FPU. Theres keine Multiplikation, und wenn Sie N eine Macht von zwei halten, ist die ganze Teilung Single-Cycle-Bit-Shifting. Grundlegende FIR-Ringpuffer: Halten Sie einen laufenden Puffer der letzten N-Werte und eine laufende SUM aller Werte im Puffer. Jedes Mal, wenn ein neues Sample hereinkommt, subtrahieren Sie den ältesten Wert im Puffer von SUM, ersetzen ihn mit dem neuen Sample, fügen Sie das neue Sample zu SUM hinzu und geben Sie SUMN aus. Modifizierter IIR-Ringpuffer: Halten Sie einen laufenden SUM der letzten N-Werte. Jedes Mal, wenn ein neues Sample kommt, SUM - SUMN, fügen Sie das neue Sample hinzu und geben Sie SUMN aus. Antwortete am 28. August 13 um 13:45 Wenn ich dich gerade richtig lese, beschreibst du einen ersten IIR-Filter, der den Wert, den du subtrahierst, nicht auf den ältesten Wert, der herausfällt, sondern stattdessen der Durchschnitt der vorherigen Werte ist. Erstklassige IIR-Filter können sicherlich nützlich sein, aber ich bin mir nicht sicher, was du meinst, wenn du vorschreibst, dass die Ausgabe für alle periodischen Signale gleich ist. Bei einer Abtastrate von 10 kHz liefert die Zuführung einer 100-Hz-Rechteckwelle in einen 20-stufigen Kastenfilter ein Signal, das für 20 Proben gleichmäßig ansteigt, für 30 sitzt, für 20 Proben gleichmäßig sinkt und für 30 niedrig sitzt. Eine erste Ordnung IIR-Filter Ndash supercat 28. August 13 um 15:31 wird eine Welle, die scharf beginnt zu steigen und allmählich aus der Nähe (aber nicht auf) der Eingabe Maximum, dann scharf beginnt zu fallen und allmählich aus der Nähe (aber nicht auf) die Eingabe Minimum. Sehr unterschiedliches Verhalten Ndash supercat Eine Frage ist, dass ein einfacher gleitender Durchschnitt kann oder nicht nützlich sein. Mit einem IIR-Filter kannst du einen schönen Filter mit relativ wenigen Berechnungen bekommen. Die FIR, die Sie beschreiben, kann Ihnen nur ein Rechteck in der Zeit geben - ein sinc in freq - und Sie können die Seitenkeulen verwalten. Es lohnt sich, ein paar ganzzahlige Multiplikatoren zu werfen, um es zu einem schönen symmetrischen, abstimmbaren FIR zu machen, wenn man die Uhrzeiger ersparen kann. Ndash Scott Seidman Aug 29 13 bei 13:50 ScottSeidman: Keine Notwendigkeit für Multiplikationen, wenn man einfach jede Stufe der FIR entweder den Mittelwert der Eingabe auf diese Stufe und ihren vorherigen gespeicherten Wert ausgibt und dann die Eingabe speichern (falls man hat Der numerische Bereich, man könnte die Summe eher als Durchschnitt verwenden). Ob das besser als ein Kastenfilter ist, hängt von der Anwendung ab (die Sprungantwort eines Kastenfilters mit einer Gesamtverzögerung von 1ms, zum Beispiel, wird eine böse d2dt Spitze haben, wenn die Eingangsänderung und wieder 1ms später, aber das Minimum haben wird Möglich ddt für einen Filter mit insgesamt 1ms Verzögerung). Ndash supercat Als mikeselectricstuff sagte, wenn Sie wirklich brauchen, um Ihren Speicherbedarf zu reduzieren, und Sie dont mind Ihre Impulsantwort ist ein exponentielles (anstelle eines rechteckigen Pulses), würde ich für einen exponentiellen gleitenden durchschnittlichen Filter gehen . Ich benutze sie ausgiebig. Bei dieser Art von Filter brauchst du keinen Puffer. Sie müssen nicht n hintere Proben speichern. Nur einer. Also, Ihre Speicheranforderungen werden durch einen Faktor von N reduziert. Auch brauchst du keine Teilung dafür. Nur Multiplikationen Wenn Sie Zugriff auf Gleitkomma-Arithmetik haben, verwenden Sie Gleitkomma-Multiplikationen. Andernfalls machen ganzzahlige Multiplikationen und verschieben nach rechts. Allerdings sind wir im Jahr 2012, und ich würde Ihnen empfehlen, Compiler (und MCUs) zu verwenden, mit denen Sie mit Gleitkommazahlen arbeiten können. Abgesehen davon, dass mehr Speicher effizienter und schneller (Sie müssen nicht Elemente in jedem kreisförmigen Puffer zu aktualisieren), würde ich sagen, es ist auch natürlicher. Denn eine exponentielle Impulsantwort passt besser der Art, wie sich die Natur verhält, in den meisten Fällen. Beantwortet Apr 20 12 at 9:59 Ein Problem mit dem IIR-Filter, der fast von Olin und Supercat berührt wird, aber anscheinend von anderen nicht beachtet wird, ist, dass die Abrundung einige Ungenauigkeiten (und potenziell Biastruncation) einführt. Unter der Annahme, dass N eine Potenz von zwei ist und nur ganzzahlige Arithmetik verwendet wird, beseitigt das Verschiebungsrecht systematisch die LSBs der neuen Probe. Das heißt, wie lange die Serie jemals sein könnte, der Durchschnitt wird diese niemals berücksichtigen. Nehmen wir z. B. eine langsam abnehmende Reihe an (8,8,8, 8,7,7,7,7,7,6,6) und nehmen an, daß der Durchschnitt in der Tat 8 am Anfang ist. Die erste 7 Probe wird den Durchschnitt auf 7 bringen, was auch immer die Filterstärke. Nur für eine Probe. Gleiche Geschichte für 6, etc. Jetzt an das Gegenteil denken. Die serie geht nach oben Der Durchschnitt wird auf 7 für immer bleiben, bis die Probe groß genug ist, um es zu ändern. Natürlich können Sie für die Vorspannung korrigieren, indem Sie 12N2 hinzufügen, aber das wird nicht wirklich das Präzisionsproblem lösen. In diesem Fall bleibt die abnehmende Reihe für immer bei 8, bis die Probe 8-12 (N2) ist. Für N4 zum Beispiel wird jede Probe über Null den Durchschnitt unverändert halten. Ich glaube, eine Lösung dafür würde bedeuten, einen Akkumulator der verlorenen LSBs zu halten. Aber ich habe es nicht weit genug gemacht, um Code bereit zu haben, und ich bin nicht sicher, dass es nicht schaden würde die IIR Macht in einigen anderen Fällen von Serien (zum Beispiel, ob 7,9,7,9 würde durchschnittlich 8 dann). Olin, deine zweistufige Kaskade braucht auch eine Erklärung. Meinst du mit zwei durchschnittlichen Werten, mit dem Ergebnis der ersten in die Sekunde in jeder Iteration eingegeben. Was ist der Vorteil dieses Moving Average Filter Sie können das Moving Average Filter Modul verwenden, um eine Reihe von einseitigen oder zweiseitigen Durchschnitten über einen Dataset zu berechnen, wobei eine Fensterlänge verwendet wird, die Sie angeben. Nachdem Sie einen Filter definiert haben, der Ihren Anforderungen entspricht, können Sie ihn auf ausgewählte Spalten in einem Dataset anwenden, indem er ihn mit dem Apply Filter-Modul verbindet. Das Modul führt alle Berechnungen durch und ersetzt die Werte in numerischen Spalten mit entsprechenden gleitenden Durchschnitten. Sie können den daraus resultierenden gleitenden Durchschnitt für Plotten und Visualisierung verwenden, als eine neue glatte Grundlinie für die Modellierung, für die Berechnung von Abweichungen gegen Berechnungen für ähnliche Perioden und so weiter. Diese Art von Durchschnitt hilft Ihnen, nützliche zeitliche Muster in retrospektive und Echtzeit-Daten zu verraten und zu prognostizieren. Die einfachste Art des gleitenden Durchschnitts beginnt bei irgendeinem Sample der Serie und verwendet den Mittelwert dieser Position plus die vorherigen n Positionen anstelle des tatsächlichen Wertes. (Sie können n definieren, wie Sie möchten.) Je länger die Periode n ist, über die der Durchschnitt berechnet wird, desto weniger Varianz haben Sie unter den Werten. Auch, wie Sie die Anzahl der verwendeten Werte erhöhen, desto weniger Wirkung hat jeder einzelne Wert auf den daraus resultierenden Durchschnitt. Ein gleitender Durchschnitt kann einseitig oder zweiseitig sein. In einem einseitigen Durchschnitt werden nur Werte verwendet, die dem Indexwert vorangehen. In einem zweiseitigen Durchschnitt werden vergangene und zukünftige Werte verwendet. Für Szenarien, in denen Sie Streaming-Daten lesen, sind kumulative und gewichtete Bewegungsdurchschnitte besonders nützlich. Ein kumulativer gleitender Durchschnitt berücksichtigt die Punkte, die der aktuellen Periode vorausgehen. Sie können alle Datenpunkte bei der Berechnung des Durchschnitts gleichermaßen abgeben, oder Sie können sicherstellen, dass Werte, die dem aktuellen Datenpunkt näher sind, stärker gewichtet werden. In einem gewichteten gleitenden Durchschnitt. Alle Gewichte müssen auf 1 liegen. In einem exponentiellen gleitenden Durchschnitt. Die Mittelwerte bestehen aus Kopf und Schwanz. Die gewichtet werden können Ein leicht gewichteter Schwanz bedeutet, dass der Schwanz dem Kopf ganz genau folgt, so dass sich der Durchschnitt wie ein gleitender Durchschnitt auf einer kurzen Gewichtungsperiode verhält. Wenn Schwanzgewichte schwerer sind, verhält sich der Durchschnitt eher wie ein längerer gleitender Durchschnitt. Füge das Moving Average Filter Modul deinem Experiment hinzu. Für Länge. Geben Sie einen positiven Ganzzahlwert ein, der die Gesamtgröße des Fensters definiert, über das der Filter angewendet wird. Dies wird auch als Filtermaske bezeichnet. Für einen gleitenden Durchschnitt bestimmt die Länge des Filters, wie viele Werte im Schiebefenster gemittelt werden. Längere Filter werden auch Filter höherer Ordnung genannt und bieten ein größeres Berechnungsfenster und eine nähere Annäherung der Trendlinie. Kürzere oder niedrigere Filter verwenden ein kleineres Fenster der Berechnung und ähneln eher den ursprünglichen Daten. Für Typ. Wählen Sie die Art der gleitenden Durchschnitt zu bewerben. Azure Machine Learning Studio unterstützt die folgenden gleitenden Durchschnittsberechnungen: Ein einfacher gleitender Durchschnitt (SMA) wird als ungewichtetes Rollmittel berechnet. Dreieckige Bewegungsdurchschnitte (TMA) werden zweimal für eine glattere Trendlinie gemittelt. Das Wort Dreieck wird aus der Form der Gewichte abgeleitet, die auf die Daten angewendet werden, die zentrale Werte hervorheben. Ein exponentieller gleitender Durchschnitt (EMA) gibt den letzten Daten mehr Gewicht. Die Gewichtung fällt exponentiell ab. Ein modifizierter exponentieller gleitender Durchschnitt berechnet einen laufenden gleitenden Durchschnitt, wobei das Berechnen des gleitenden Durchschnitts an einem beliebigen Punkt den vorher berechneten gleitenden Durchschnitt an allen vorhergehenden Punkten berücksichtigt. Diese Methode ergibt eine glattere Trendlinie. Bei einem einzigen Punkt und einem aktuellen gleitenden Durchschnitt berechnet der kumulative gleitende Durchschnitt (CMA) den gleitenden Durchschnitt am aktuellen Punkt. Fügen Sie den Dataset hinzu, der die Werte enthält, für die Sie einen gleitenden Durchschnitt berechnen möchten, und fügen Sie das Modul Filter hinzufügen hinzu. Verbinde den Moving Average Filter mit der linken Eingabe von Apply Filter. Und verbinden Sie den Datensatz mit dem rechten Eingang. Verwenden Sie im Filter "Filter anwenden" die Spaltenauswahl, um festzulegen, auf welche Spalten der Filter angewendet werden soll. Standardmäßig wird der Filter, den Sie erstellen, auf alle numerischen Spalten angewendet, also sollten Sie alle Spalten ausschließen, die keine entsprechenden Daten haben. Führen Sie das Experiment aus. An diesem Punkt wird für jeden Satz von Werten, der durch den Filterlängenparameter definiert ist, der aktuelle (oder Index-) Wert durch den gleitenden Mittelwert ersetzt. Der bewegliche Durchschnitt als Filter Der gleitende Durchschnitt wird oft zum Glätten von Daten in Gegenwart von verwendet Lärm. Der einfache gleitende Durchschnitt wird nicht immer als der Finite Impulse Response (FIR) Filter erkannt, der es ist, während er tatsächlich einer der häufigsten Filter in der Signalverarbeitung ist. Wenn man sie als Filter behandelt, kann man sie beispielsweise mit Fenster-Sinc-Filtern vergleichen (siehe die Artikel über Tiefpass-Hochpass - und Bandpass - und Bandsperrfilter für Beispiele dafür). Der Hauptunterschied zu diesen Filtern besteht darin, dass der gleitende Durchschnitt für Signale geeignet ist, für die die nützlichen Informationen im Zeitbereich enthalten sind. Von denen Glättungsmessungen durch Mittelung ein Beispiel sind. Window-Sinc-Filter sind dagegen starke Darsteller im Frequenzbereich. Mit Ausgleich in der Audioverarbeitung als typisches Beispiel. Es gibt einen detaillierteren Vergleich der beiden Arten von Filtern in Time Domain vs. Frequency Domain Performance von Filtern. Wenn Sie Daten haben, für die sowohl die Zeit als auch der Frequenzbereich wichtig sind, dann möchten Sie vielleicht einen Blick auf Variationen über den Moving Average haben. Die eine Anzahl von gewichteten Versionen des gleitenden Durchschnittes darstellt, die besser sind. Der gleitende Durchschnitt der Länge (N) kann so geschrieben werden, wie es typischerweise implementiert ist, wobei die aktuelle Ausgabeprobe als der Durchschnitt der vorherigen (N) Abtastwerte vorliegt. Als Filter erscheint der gleitende Durchschnitt eine Faltung der Eingangsfolge (xn) mit einem rechteckigen Puls der Länge (N) und der Höhe (1N) (um den Bereich des Pulses und damit die Verstärkung des Filters zu bilden , eins ). In der Praxis ist es am besten, (N) ungerade zu nehmen. Obwohl ein gleitender Durchschnitt auch unter Verwendung einer geraden Anzahl von Abtastwerten berechnet werden kann, hat die Verwendung eines ungeraden Wertes für (N) den Vorteil, daß die Verzögerung des Filters eine ganzzahlige Anzahl von Abtastwerten ist, da die Verzögerung eines Filters mit (N) Proben sind genau ((N-1) 2). Der gleitende Durchschnitt kann dann exakt mit den Originaldaten ausgerichtet werden, indem er durch eine ganzzahlige Anzahl von Samples verschoben wird. Zeitdomäne Da der gleitende Durchschnitt eine Faltung mit einem rechteckigen Puls ist, ist sein Frequenzgang eine Sinc-Funktion. Das macht es so etwas wie das Dual des Fenster-Sinc-Filters, denn das ist eine Faltung mit einem Sinc-Puls, der zu einem rechtwinkligen Frequenzgang führt. Es ist dieser Sinc-Frequenzgang, der den gleitenden Durchschnitt zu einem schlechten Performer im Frequenzbereich macht. Allerdings führt es im Zeitbereich sehr gut aus. Daher ist es perfekt, um Daten zu sperren, um Rauschen zu entfernen, während gleichzeitig noch eine schnelle Schrittantwort beibehalten wird (Abbildung 1). Für die typische additive White Gaussian Noise (AWGN), die oft angenommen wird, hat die Mittelung (N) Samples die Wirkung, das SNR um einen Faktor (sqrt N) zu erhöhen. Da das Rauschen für die einzelnen Proben unkorreliert ist, gibt es keinen Grund, jede Probe anders zu behandeln. Daher wird der gleitende Durchschnitt, der jeder Probe das gleiche Gewicht gibt, die maximale Menge an Rauschen für eine gegebene Schrittantwortschärfe loswerden. Implementierung Da es sich um einen FIR-Filter handelt, kann der gleitende Durchschnitt durch Faltung umgesetzt werden. Es wird dann die gleiche Effizienz (oder das Fehlen davon) wie jeder andere FIR-Filter haben. Allerdings kann es auch rekursiv realisiert werden. Es folgt unmittelbar aus der Definition, dass diese Formel das Ergebnis der Ausdrücke für (yn) und (yn1) ist, dh wo wir bemerken, dass die Änderung zwischen (yn1) und (yn) ist, dass ein zusätzlicher Term (xn1N) erscheint Das Ende, während der Begriff (xn-N1N) von Anfang an entfernt wird. In praktischen Anwendungen ist es oft möglich, die Division durch (N) für jeden Term zu verlassen, indem die resultierende Verstärkung von (N) an einer anderen Stelle kompensiert wird. Diese rekursive Umsetzung wird viel schneller als die Faltung sein. Jeder neue Wert von (y) kann mit nur zwei Additionen berechnet werden, anstelle der (N) Additionen, die für eine einfache Implementierung der Definition notwendig wären. Eine Sache, mit einer rekursiven Umsetzung zu suchen, ist, dass Rundungsfehler sich ansammeln werden. Dies kann oder auch kein Problem für Ihre Anwendung sein, aber es bedeutet auch, dass diese rekursive Implementierung tatsächlich besser funktionieren wird mit einer Integer-Implementierung als mit Gleitkommazahlen. Das ist ganz ungewöhnlich, da eine Gleitkomma-Implementierung in der Regel einfacher ist. Die Schlussfolgerung von all dem muss sein, dass Sie nie unterschätzen die Nützlichkeit der einfachen gleitenden durchschnittlichen Filter in Signalverarbeitung Anwendungen. Filter Design Tool Dieser Artikel wird mit einem Filter Design Tool ergänzt. Experimentiere mit verschiedenen Werten für (N) und visualisiere die resultierenden Filter. Probieren Sie es jetzt
No comments:
Post a Comment