Algorithmus zur Bestimmung der Hüllkurve eines Arrays

Gast #3179165
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.
Gast
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.
:-)
Gast
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.
Gast
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
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.