Mal kurz eine Frage: Bei digitalen Filter ist es ja in der Regel so, dass man diverse N-vergangene Samples braucht um den Filter sinnvoll zu rechnen. Wenn ich jetzt im Mikrocontroller einen Interrupt auslöse und berechne das filter jedes mal neu wenn ein neuer Wert anliegt, merke ich mir einfach die letzten vergangenen Samples in einem Array. Mordernere Mikrocontroller haben ja aber z.B. DMA wo es sich anbietet Block-Weise die Daten zu verarbeiten z.B. immer 1024 auf einmal. Die C-Code Implementierungen die ich gesehen habe war alle in etwa so function (Pointer* in, Pointer* out, int buffersize) Wenn ich jetzt immer im 1024er Block aber diese Funktion aufrufe heißt das ja dass mit jedem mal wo ich diese Funktion aufrufe die N-letzten Samples zumindest am Anfang immer 0 sind? Inwiefern wirkt sich das denn auf meinen Filter aus? Danke & Gruß Markus
Das kommt auf die Koeffizienten und Auslegung des Filters an. Bei einem symmetrischen Filter mit erwartetem Offset bekommst Du einen Sprung, ansonsten kriecht das Filter auf den Wert.
Stefan schrieb: > Mordernere Mikrocontroller haben ja aber z.B. DMA wo es sich anbietet > Block-Weise die Daten zu verarbeiten z.B. immer 1024 auf einmal. Wenn man Echtzeitverarbeitung macht, dann bekommt man pro Zyklus einen neuen Abtastwert (pro Eingang bzw. pro A/D-Wandler) herein. Also bei Mono einen, bei Stereo zwei, ... > Wenn ich jetzt immer im 1024er Block aber diese Funktion aufrufe Warum sollte das so sein? Die Anzahl der Speicherstellen eines (FIR-)Filters hängt mit der Anzahl der Koeffizienten zusmamen. Es besteht eine Differenz von 1: Anzahl der Speicherstellen = Anzahl der Koeffizienten minus 1 Wieviele Daten der Mikrocontroller DMA-mäßig verarbeiten kann, ist zunächst mal irrelevant. Es müssen pro Zyklus eben so viele Multiplikationen und Additionen durchgeführt werden, wie es dem einzusetzenden Filter entspricht. Von den gespeicherten Werten verwirft man dann pro Zyklus genau einen, und ein neuer kommt hinzu. Der Rest verschiebt sich einfach um eine Stelle. Das erfordert aber keinen extra Speicherzugriff, sondern die entsprechenden Zeiger werden einfach eine Position weiter gesetzt (Prizip des Ringpuffers). > das ja dass mit jedem mal wo ich diese Funktion aufrufe die N-letzten > Samples zumindest am Anfang immer 0 sind? Am Anfang sind die Speicherstellen eines in Software realisierten Filters üblicherweise zu Null initialisiert, ja. > Inwiefern wirkt sich das denn auf meinen Filter aus? Wie Jürgen gesagt hat.
:
Bearbeitet durch User
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.