datenstruktur fuer signalfilter

04/03/2008 - 11:27 von Hans Posch | Report spam
Hallo

Ich sollte einen Datenfilter implementieren und dazu liegen die Signale
als File vor. Abhaengig vom Parameter N, nehme ich nun jeweils N
aufeinanderfolgende Signalwerte und bilde aus diesen den Mittelwert um
den entsprechenden gefilterten Wert zu berechnen. Danach verwerfe ich
das àlteste Datensignal und nehme den naechsten Wert im File und
berechne den Mittelwert erneut usw.

Die einfachste Sache die zu loesen, waere wohl das gesamte File in ein
Array einzulesen, das ich ja dynamisch allokieren kann. Danach kann ich
mit 2 Schleifen jeweils den Mittelwert bilden. Waere es vielleicht
besser nur ein Array der groesse N zu haben und dort dann immer das
erste Element zu loeschen, die restlichen N-1 Elemente um eins nach oben
zu ruecken und dann einen neuen Wert ins Array lesen? Braeuchte wohl
weniger Memory ;)

Danke fuer jede hilfe
 

Lesen sie die antworten

#1 Alexander Bartolich
04/03/2008 - 12:45 | Warnen spam
Hans Posch schrieb:
[...]
Die einfachste Sache die zu loesen, waere wohl das gesamte File in ein
Array einzulesen, das ich ja dynamisch allokieren kann.



Nein, das ist ein sehr komplizierter Ansatz dafür.

Danach kann ich mit 2 Schleifen jeweils den Mittelwert bilden.



Wieso zwei Schleifen?

durchschnitt = summe(von anfang bis ende) / (ende - anfang + 1)

Waere es vielleicht besser nur ein Array der groesse N zu haben



Ja, das ist besser.

und dort dann immer das erste Element zu loeschen, die restlichen N-1
Elemente um eins nach oben zu ruecken



Ja, das làsst sich mit memmove einfach implementieren.

Effizienter wàre es, einen Ringbuffer zu verwenden, und dann nur die
Indizes zum nàchsten Elementen zu verschieben.

und dann einen neuen Wert ins Array lesen? Braeuchte wohl weniger Memory ;)



Außerdem muss die Anzahl der Elemente nicht vorher bekannt sein,
d.h. du kannst dann auch Daten von Pipe, Socket, etc. verarbeiten.

http://news.albasani.net/

Ähnliche fragen