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
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.