Hallo miteinander Ich habe bis jetzt schon mit diversen Filtern gearbeitet, wobei leider alle ihre Vor- und Nachteile haben. 1) Oversampling und Mittelwert Zum Beispiel 16 Messungen machen und die Werte aufsummieren und am Schluss wieder mit 16 dividieren. 2) "Gleitender Mittelwert" In einem FIFO-Array werden z. B. 16 Werte gespeichert. Hierbei wird immer der älteste Wert mit einem aktuellen ersetzt. Die Summe von allen und dann durch 16 geteilt ergibt den "gefilterten" Wert. 3) Gewichtigkeit ändern Aller bisherigen Werte werden stärker gewichtet als der neue Wert. Die schnellste Variante ist die letzte, da hier nur eine Summenbildung von 2 Werten und 2 Divisionen abgearbeitet werden müssen. Gibt es noch andere Alternativen? Und ist es möglich ein Filter zu bauen, dass auch mit dem DMA funktioniert (Wie Variante 2, nur wird das Array vom DMA gefüllt)? Besten Dank Gruss Patrick
> Gibt es noch andere Alternativen? Klar, du koenntest echte Filter im Sinne von FIR/IIR verwenden. > Und ist es möglich ein Filter zu bauen, dass auch mit dem DMA > funktioniert (Wie Variante 2, nur wird das Array vom DMA gefüllt)? Ein DMA ist eine abgemagerte Hardware die darauf optimiert ist einen Speicher mit Daten zu fuellen. Bei guten Controllern klappt das ueber Dualportram sogar ohne das der Controller dadurch beeinflusst/gebremst wird. Oder aber man koennte die CPU sogar schlafen legen und erst aufwecken wenn wieder genug Daten fuer eine Aufgabe vorhanden sind. Ein Filter ist ein Algorythmus dessen markante Eigenschaft darin besteht mit jedem Wert etwas Mathe zu treiben. Also wofuer du mal mindestens addieren und multiplizieren musst. Beantwortet das deine Frage negativ genug? :-) Denkbar waere aber das ueber einen DMA ein Buffer gefuellt wird, ist der voll so wird auf einen anderen Buffer umgeschaltet. Es wird also immer zwischen zwei Buffern umgeschaltet. Jedesmal wenn das geschieht koenntest du dann mit der CPU deinen Filter ueber den gerade gefuellten Buffer laufen lassen. ODer noch besser du hast drei Buffer, einer wird immer per DMA mit Daten gefuellt, auf einem rechnet deine CPU und ein dritter wird gerade ausgegeben. Denkbar waere es natuerlich auch das es Signalprozessoren gibt die noch einmal eine spezielle Hardware fuer FIR Filter intergriert haben und das dann im Hintergrund abarbeiten koennen. Weiss ich jetzt aber nicht. Auf jedenfall koenntest du dir aber einen FPGA nehmen und genau dein Wunschsystem da reinprogramieren. Olaf
Olaf schrieb: >> Gibt es noch andere Alternativen? > Klar, du koenntest echte Filter im Sinne von FIR/IIR verwenden. Der Grund, wieso ich bis jetzt nicht mit diesen Filtern gearbeitet habe, ist der Aufwand der betrieben werden muss. (Multiplikation, Array kopieren, Array löschen, Array schieben...). Ich habe ganz vergessen zu sagen, dass momentan eine "Echtzeitanforderung" besteht. Spricht alle 1ms sollten die neuen gefilterten Daten für das Bussystem bereitstehen. In dieser Milisekunde sollen auf einem Kanal 512 Pixel eingelesen werden (läuft über Timer und DMA), auf einem anderen eine Analogspannung und auf einem 3. Kanal noch ein Temperatursensor. Und es muss noch Zeit für die Kommunikation übrig bleiben und noch Reserve für einen weiteren Sensor.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.