Hallo, mittels ADC sind Daten aufgenommen worden, von denen die Ableitung berechnet werden soll. Sie Sample-Rate ist konstant. Wenn ich den Ansatz über den Differenzenquotienten nehmen wie f'(x) = f(x+h)/2h - f(x-h)/2h, wobei h = 1 ist, ist der Fehler recht groß. Wie man leicht am Beispiel von f(x) = x^3 überprüfen kann. Laut Numerik sollte h deutlich kleiner als 1 gewählt werden um gute Ergebnisse zu erzielen. Leider sind nur die aufgenommenen Werte vorhanden so dass h=1 ist. Man könnte die Messwerte Interpolieren um so ein kleineres h zu erzeugen, was jedoch eine deutliche Erhöhung des Rechenaufwand bedeuten würde. Was gibt es für Möglichkeiten? Über Tipps oder weitere Suchbegriffe wäre ich sehr dankbar. Gruß Mirco
differenz zwischen 2 messwerten ist doch d nach dt, dabei ist der zeitabstand dt konstant, wenn deine samplerate kostant ist ...
Mirco schrieb: > Man könnte die Messwerte Interpolieren um so > ein kleineres h zu erzeugen, Wenn du die Werte linear interpolierst bekommst, du trotz des höheren Aufwands im besten Fall die gleichen Werte. Du berechnest doch dann die Steigung eines kürzeren Stücks derselben Gerade. Bessere Werte kannst du nur bekommen, indem du nicht eine Gerade durch 2 Punkte nimmst, sondern eine Kurve höherer Ordnung durch 3 (Parabel) oder mehr Punkte legst und deren Steigung an der gesuchten Stelle berechnest. Der Aufwand dafür ist dann aber auch nicht kleiner, vor allem wenn man nicht stumpf jeden gemessen Zappler zu einer wilden Kurve aufgebauscht haben will...
Für die aufgenommenen Messwerte spielt es keine Rolle wie die Sample-Rate ist. Man könnte das Problem mit einem Vektor vergleichen, der in Matlab abgeleitet werden soll. Das dt wird doch beim Differenzenqutionen durch lim h->0 erreicht. Da ich jedoch keine Werte zwischne den Messpunken habe kann ich h nicht kleiner werden lassen. Deswegen war die Überlegung, durch Interpolation weitere Messwerte zu erzeugen, so dass h kleiner werden kann.
Klaus Wachtler schrieb: > Bessere Werte kannst du nur bekommen, indem du nicht eine > Gerade durch 2 Punkte nimmst, sondern eine Kurve höherer Ordnung > durch 3 (Parabel) oder mehr Punkte legst und deren Steigung > an der gesuchten Stelle berechnest. > Der Aufwand dafür ist dann aber auch nicht kleiner, vor allem > wenn man nicht stumpf jeden gemessen Zappler zu einer wilden > Kurve aufgebauscht haben will... Richtig, lineare Interpolation bringt nicht. Spline oder höhere Ordnug wäre interessant, aber das Erhöht deutlich den Aufwand. Es muss doch noch was anderes geben.
Mirco schrieb: > Wenn ich den Ansatz über den Differenzenquotienten nehmen wie > f'(x) = f(x+h)/2h - f(x-h)/2h, wobei h = 1 ist, ist der Fehler recht > groß. Wie man leicht am Beispiel von f(x) = x^3 Erstmal ist ein Differenzenquotient allein nicht ausreichend, für die Ableitung. Du brauchst die links- und rechtsseitige Ableitung. Ob die Funktion an sich differenzierbar ist, ist noch eine andere Frage, das lassen wir mal jetzt. Dann vergleichst Du die Werte die sich bei einsetzen in die symbolisch abgeleitete Funktion und bei einsetzen in die numerisch abgeleitete Funktion ergeben. Das kann, wie Du Dich sicherlich erinnern wirst nicht hinhauen, denn die symbolische Ableitung ist ein Grenzwertprozess von dessen delta du mit h = 1 unendlich weit weg bist (na jedenfalls bis zum Epsilon). ;-) Insofern ist Deine Argumentation zwar an sich richtig inspiriert, aber nicht zu Ende geführt. Die Interpolation wiederrum führt Dich wahrscheinlich in eine andere Sackgasse. Interpolierst Du nun linear, oder sonstwie (transzendent, polynom) prägst Du den Werten möglicherweise einen völlig anderen Verlauf auf, als der beschreibenden Gleichung entsprechen würde. Du müsstest also zumindest in genügender Näherung die Entstehung Deiner Werte beschreiben können um eine sinnvolle Interpolation auswählen zu können. An sich wählt man die Abtastrate von vorne herein so, das die Ableitung ausreichend aufgelöst und damit nützlich ist. Erkläre am besten mal wozu das Ganze gut ist.
Mirco schrieb: > Es muss doch > noch was anderes geben. Wie alt bist Du? Was ist das? Dein (verzeih', es ist nicht so hart gemeint wie es klingt) Kinderglauben? Das es für jedes Problem eine Lösung gibt? Das kannst Du Dir abschminken. Höchstens kann man sich unter Inkaufnahme von Kompromissen dem Ideal nähern. Aber auch das ist nicht immer möglich.
Grrrr schrieb: > Wie alt bist Du? Was ist das? Dein (verzeih', es ist nicht so hart > gemeint wie es klingt) Kinderglauben? Das es für jedes Problem eine > Lösung gibt? Da ich sicher nicht der erste bin, der Messwerte ableiten muss, wird es auch sicher mehrere Wege zum Ziel geben! Es sollen Mel-Frequenz-Cepstrum-Koeffizienten (MFCC) berechnet werden. Es handelt sich dabei um Audio-Samples die mit 16kHz abgetastet worden sind. Anschließend folgt ein FIR um höhere Frequenzkomponenten anzuheben, Hamming-Window, FFT, abs^2, Log, Mel-Filterung, DCT und anschließend soll die erste und zweite Ableitung berechent werden. Nach der DCT werden alle Samples bis auf die ersten 13 verworfen um so eine Tiefpass-Filterung zu erzeugen.
Mirco schrieb: > Da ich sicher nicht der erste bin, der Messwerte ableiten muss, wird es > auch sicher mehrere Wege zum Ziel geben! Das hört sich schon vernünftiger an. ;-) > Es sollen Mel-Frequenz-Cepstrum-Koeffizienten (MFCC) berechnet werden. OK. Ich nehme an, Du beziehst Dich auf das folgende Dokument: http://www5.informatik.uni-erlangen.de/fileadmin/Persons/NiemannHeinrich/klassifikation-von-mustern/m00-www.pdf#Page=213 Soweit ich das erkennen kann, werden hier wirklich die Differenzen berechnet und später ausgewertet. Nicht jedoch Zwischenwerte gebildet. Warum meinst Du Zwischenwerte bilden zu müssen?
Ich habe die Implementierung der Ableitung einfach mit bekannten Funktionen getested und mir war der Fehler zu groß. Dann bin ich auf die Suche gegangen... Das Dokument kannte ich noch nicht, aber Formel 3.6.27 und 3.6.28 bestätigen meine Vorgehensweise. Danke
Mirco schrieb: > Das Dokument kannte ich noch nicht, aber Formel 3.6.27 und 3.6.28 > bestätigen meine Vorgehensweise. Gerade das meine ich nicht, wie ich oben geschrieben habe. Da stehen nur Differenzen, keine Differenzenquotienten oder gar Ableitungen.
An anderer Stelle, nämlich S. 213 ist von Ableitungen die Rede und insofern, als die Differenz von Abtastwerten die Information über die Ableitung enthält, ist das irgendwie eine Art Ableitung. Aber im strengen Sinne sehe ich keine und auch keine Zwischenwertbildung.
Wenn du ohnehin eine FFT machen musst, dann kann man die Ableitung (erste ebenso wie analog alle weiteren) auch gleich im Frequenzbereich machen. Da die Ableitung von sin ja der cos ist und die Ableitung vom cos der -sin, kann man einfach anhand der Koeffizienten aus der FFT die Koeffizienten der Ableitung bestimmen durch Tauschen und teilweise Negieren der Koeffizienten. Das a0 wird einfach zu 0 für die Ableitung.
Im Zeitbereich kann man durch Anwendung geeigneter Filter näherungsweise eine Ableitung bilden. Siehe auch http://www.rtm.tu-darmstadt.de/ehemalige_mitarbeiter/~vogt/docs/wolfram_vogt_2002_at.pdf Grüße, Peter
Der englische Wikipediatext zum Thema ist ausführlicher als der deutsche: http://en.wikipedia.org/wiki/Numerical_differentiation
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.