Pointer
-
Guten Morgen Zusammen,
ich komme leider nicht weiter und hoffe auf eure Hilfe
ich möchte einen Trigger auf steigende Flanken. Meine daten sind in einem Puffer abgelegt und nur die den Triggerlevel überschreitten sollen gespeichert werden
ich habe es folgendermassen versucht:for ( i = 1; i < 500; i++, ptx++ ) { if (*ptx >= Schwelle && *(ptx-1) < Schwelle) { *pt1 = *ptx - (UINT16) Mittelwert; pt1++; } }
das Problem die Bedingung *ptx >= Schwelle && *(ptx-1) < Schwelle ist erfüllt
nur wenn eine steigende Flanke kommt das heisst nur eine Punkt wird gespeichert und die folgenden nicht weil der Zeiger erhöht wirdwie könnte man das Problem lösen, so dass alles Punkte nach der Bedingung gespeichert werden.
vielen dank Youness
-
Deine Ausführungen sind für Dritte leider nicht kommentarlos verständlich. Darf ich dich reformulieren?
Du sagst, deine "Daten" (Ein analoges Signal?) sind in einem Buffer gespeichert. Aus deinem Code schließe ich, dass ptx auf den Anfang dieses Speicherbereichs zeigt, und vom richtigen Typ ist? Weiters Schließe ich, dass du 499 Messwerte hast? pt1 scheint auf den Zielspeicher zu zeigen. Du ziehst zudem einen ominösen "Mittelwert" ab.
Eine mögliche Lösung (unter der Annahme, es handle sich um positive integer) wäre:
const unsigned int triggerlevel = 10; /* Hausnummer */ const unsigned int average = 5; /* Hausnummer */ unsigned int signal[ 499 ]; unsigned int above_triggerlevel[ 499 ]; size_t input_pos = 1; size_t output_pos = 0; for( ; input_pos < 500; ++input_pos ) { if( ( signal[ input_pos ] > triggerlevel ) && ( signal[ input_pos - 1 ] < triggerlevel ) ) { // Ansteigende Flanke gefunden! for( ; ( signal[ input_pos ] >= triggerlevel ) && ( input_pos < 500 ); input_pos++, output_pos++ ) { above_triggerlevel[ output_pos ] = signal[ input_pos ] - average; } } }
greetz, Swordfish
-
hi Swordfish,
danke für deine gute Ergänzung
ich galube habe das problem etwas falsch geschildert. nach der Flanke kommt ein Impuls so dass nicht alles Werte gespeichert werden müssen, sondern ledeglich die Abtastwerte ( über den Triggerlevel) des Impulses . ausserdem es könnten mehrere Impluse.
-
myouness27 schrieb:
[...] . ausserdem es könnten mehrere Impluse.
Was? könnten mehrerer Impulse?
Dein Signal sieht (Hausnummer) so aus?
^ high | wird gespeichert wird gespeichert | / \ / \ | | | | | | | | | | | | | | /¯¯¯¯¯¯¯\ | | |__/¯¯¯¯¯¯¯\| |/ ¯¯¯\| triggerlevel |=======/===========\===============/==============\======= |____/¯¯ \_/¯¯¯¯¯\ / ¯¯\ | \___/ \ | \ low +------------------------------------------------------------->
greetz, Swordfish
-
ja so ungefähr das könnte man als Beispiel nehmen.
ich tue immer die Signalenergie berechnen nur impulse überm Trigger.
es hat gut geklappt so lange man die Berchnung linear( in Watt) macht.
das problem meine Leistung ist in dBm und muss deswegen eine Umrechnung vornehmen das dauert aber ziemlich lang so dass die Berechnung nicht stimmt
wenn man deine Zeichnug nimmt wird die Energie des ersten Ipulses richtig ermittelt wobei die des 2 Impulses falsch wenn nur Werte über Schwelle gespeichert werden
aus diesem Grund will ich nur die Werte nach einer ekannten Flanke.LG Youness
-
ist mir gerade eingefallen die werte werden immer überschrieben ( Zyklischen Puffer)
-
myouness27 schrieb:
ist mir gerade eingefallen die werte werden immer überschrieben ( Zyklischen Puffer)
mach's doch direkt beim einlesen, nicht hinterher oder asynchron...
sobald ein wert ankommt, prüftst du als erstes, ob über dem trigger level liegt. liegt er darüber, dann speicherst du ihn und alle folgewerte ab. ist einer wieder kleiner, dann wird der vorgang abgeschlossen. sobald ein wert wieder über dem trigger level liegt, beginnt ein neuer speichervorgang.
werte unterhalb des trigger levels werden einfach weggeworfen...
void ein_wert_kommt_an (int wert) { static int flag = 0; if (wert > triggerlevel) { if (flag == 0) { starte_neuen_speichervorgang(); flag = 1; } speichere (wert); } else { if (flag == 1) { beende_speichervorgang(); flag = 0; } } }
-
ok 1000 mal Dank ich werde es ausprobieren
MFG