Hallo Leuts, wenn ich eine zeitdiskrete Funktion in Form eines Arrays vorliegen habe, gibt es einen Algorithmus, wie ich daraus die Hüllkurve der Funktion bestimmen kann? Ich habe bereits in Google geschaut und bin dabei z.B. auf den Begriff "Einhüllende" gekommen. Hat jemand von Euch vielleicht einen Link z.B. zu einem C-Quellcode, mit dem ich das hinbekommen kann? Über eine Antwort würde ich mich freuen.
Eine Hüllkurve eines Signals ist letztendlich eine AM-Dekodierung, die z.B. mittels Gleichrichtung und Tiefpass erzeugt werden kann. Oder man sucht immer nach lokalen Extrempunkten und verbindet diese. Führt allerdings nicht unbedingt zum selben Ergebnis, daher wäre es angebracht, ein bisschen mehr über das Projekt zu erzählen. :-)
Einfaches Beispiel - ein Wegaufnehmer an einer Feder, die mit Vorspannkraft beaufschlagt (Offset) und durch einen Impuls angeregt wird. Ich taste das Wegsignal z.B. 300mal in der Sekunde ab und bekomme lauter Messdaten. Stelle ich die Daten im Graphen da, sehe ich einen abklingenden harmonischen Oszillator. Von diesem Oszillator, der als Array mit z.B. 15.000 Messwerten vorliegt, möchte ich die Hllkurve herausbekommen.
lokales Maximum mit der Steigung = 0? Damit hätte man die Punkte, die man miteinander zur Hüllkurve verbinden müsste. Kann aber auch sein, dass ich komplett daneben liege...
Was im folgenden Code geklärt werden sollte: soll es max=max*0.99 heissen, d.h. exponentielle "Entladung" des Speicherelementes das sich den Hüllkurvenwert "merkt", oder max=max-0.001 Die Wahl der Parameter hängt davon ab wie oft ich die Kurve sample, 10x oder 100x zwischen Nulldurchgängen, und was letztlich "schöner" im Endergebnis aussieht. Probieren geht über studieren in diesem Fall. double * huellkurve(double * array){ int i,len; double * kurve; double maxx; len=length(array); // length : do it yourself kurve=malloc(sizeof(double)*len)); maxx=array(0); kurve=maxx; // erster punkt der huellkurve= erster punkt der // zu untersuchenden kurve for(i=1;i<len;i++) { if(maxx<array(i)) maxx=array(i); else maxx=maxx*0.99; // alternativ: maxx=maxx-0.0001; kurve(i)=maxx; }// for i return kurve; // hinter freee() nicht vergessen }
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.