Forum: Mikrocontroller und Digitale Elektronik ADC digitales Filter


von Patrick B. (p51d)


Lesenswert?

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

von Olaf (Gast)


Lesenswert?

> 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

von Patrick B. (p51d)


Lesenswert?

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
Noch kein Account? Hier anmelden.