Hallo zusammen, ich hoffe, dass ich hier richtig bin und mir eventuell jemand einen Tip geben kann. So, da mir gerade mal wieder langweilig ist, hab ich beschlossen an einem meiner alten Projekte weiter zu basteln. Wie im Betreff angedeutet geht es im weitesten Sinne um die Abtastung eines Signals bei konstanter Abtastfrequenz. (Dass natürlich nicht beliebige Signale, sondern nur Signale in bestimmten Rahmenbedingungen abgetastet werden können ist mir schon klar. Nyquist, einschränkungen durch den DSP, ... ) Es geht um Folgendes: Ich habe ein Programm(C++) geschrieben das alle 4ms (250Hz) einen neuen Signalwert(periodisches Signal) aus einer Datenbank abruft und diesen dann weiter verarbeitet. Die Datenbank benutze ich, damit ich nur einmal Rechenzeit für die Berechnung der Signalwerte aufwenden muss. Die Signalwerte die in der Datenbank stehen, berechne ich Anhand der Funktion eines Signals.(Im einfachsten Fall bspw. Sinusfunktion). Die Frequenz eines Signals kann zwischen 0,1Hz - 30Hz liegen (0,1Hz Schritte). Bisher berechne ich mir das KgV zwischen Abtastzeit(4ms) und Signalfrequenz und kann dann daraus ermitteln wieviele Werte ich in der Datenbank speichern muss, um für jeden Abtastzeitpunkt einen korrekten Signalwert bereitstellen zu können. Die Krugs an der Sache ist nun dass, das u.U sehr viele Signalwerte sein können und je nach verwendetem Datentyp (char, int,float,double) der benötigte Speicherplatz sehr gross werden kann(relativ gesehen). Meine Frage ist nun wie ich die Anzahl der gespeicherten Werte reduzieren kann ohne einen Informationsverlust zu haben. Kann mir hierzu jemand einen Tip, Link, Schlagwort ... geben??? Die Werte die ich in der Datenbank speichere, müssen nich Absolutwerte sein, sondern können auch irgendeine andere Aussage/Funktion besitzten!!!) Ich hoffe ich konnte mein Problemchen einigermassen rüberbringen!!! Vielen Dank im vorraus!!! Ach so... UND FROHE OSTERN!! Mfg ziro
Wie viele Perioden speicherst du? Ich nehme an, dass deine Signale periodisch sind (.1 .. 30 Hz). Du musst zwei Dinge beachten: es reicht ein bisschen schneller, als 60 Hz abzutasten, und eine ganze Periode des langsameren Signal muss gespeichert werden. Also um ein 1/.1 = 10s langes Signal mit 60+ Hz auszulesen brauchst du 10*60+ z.B. 2^10=1024 Abtastwerte. Wenn ein Abtastwert z.B. 16 bit groß ist, dann benötigt man 2 kB Speicher.
Hallo Unit*, zunächst mal vielen Dank für deine Antwort. Deine Antwort ist in sich schlüssig und gibt meinen derzeitigen Kenntnisstand wieder. Ich hatte gehofft, dass ich die Anzahl der zu speichernden Werte irgendwie reduzieren kann. Sieht aber leider so aus als ob das nicht möglich wäre.. Naja schade, dann muss ich halt den Speicherplatz opfern..... Nochmals Danke für deine Mühen... Mfg ziro
Hallo Oli, für Dein Problem gibt es zwei Möglichkeiten, zwischen denen Du Dich entscheiden kannst. Das heißt aber, Du mußt weder die eine noch die andere wählen - es gibt auch Lösungen dazwischen. 1. Variante: Das ist die, die Du gewählt hast. Diese erfordert kaum (eigentlich keine) Rechenleistung zur Laufzeit. 2. Variante: Du legst nur soviele Werte einer Periode ab um dem Abtasttheorem zu entsprechen und berechnest zur Laufzeit die Zwischenwerte über Interpolation und Decimation. Dazu sind FIR-Filter erforderlich und ein erheblicher Rechenaufwand. Der Speicheraufwand für Deine Signalsamples ist minimal. Zwischenweg: Um so mehr Werte Du ablegst, um so geringer wird der Rechenaufwand zur Laufzeit. Wenn Du "Decimation and Interpolation" verstanden hast - dann kannst Du für Dich den günstigsten Kompromiss aus Rechenleistung und Speicher wählen. Eines von beidem mußt Du aber spendieren. (Remember: There is no free Lunch!) Viel Spaß - Frank
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.