mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Ableitung von gesampleten Werten


Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
differenz zwischen 2 messwerten ist doch d nach dt, dabei ist der 
zeitabstand dt konstant, wenn deine samplerate kostant ist ...

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Berichte doch einmal was du erreichen möchtest.

Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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/P...

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?

Autor: Mirco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Zeitbereich kann man durch Anwendung geeigneter Filter näherungsweise 
eine Ableitung bilden.
Siehe auch
http://www.rtm.tu-darmstadt.de/ehemalige_mitarbeit...

Grüße,

Peter

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der englische Wikipediatext zum Thema ist ausführlicher als der 
deutsche:
http://en.wikipedia.org/wiki/Numerical_differentiation

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.