Algorithmus zur Bestimmung der Hüllkurve eines Arrays

Gast #3179165
Lesenswert?

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 #3179200
Lesenswert?

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 #3179646
Lesenswert?

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 #3180064
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren