Keiner eine Idee? Irgendwo muss es doch eine Doku dazu geben.... Grübel
Keiner eine Idee? Irgendwo muss es doch eine Doku dazu geben.... Grübel
Gibt es auf der Monitor-Webseite ..
Gruss,
Tim
--
In a world without walls and fences, who needs Windows and Gates ??
Meine private Webseite: http://www.db1jat.org
Auf der seite monitord.de unter "anwendung" finde ich zu den punkten algorithmus und maxerror nichts. Maxerror kann ich mir ja noch selber zusammenreimen. Aber das andere...puh.
Moin..
Ein schneller Blick in den Quellcode offenbart bei "algorithmus", das je nachdem,
ob der Parameter 0 oder 1 ist, die Methode
MonitorModuleFMS::demod
oder
MonitorModuleFMS::demod_neu
aufgerufen wird.. konkret wird eigentlich immer die erste aufgerufen, aber in den
ersten Zeilen wird dann abgefragt, ob der Parameter 0 ist, wenn er dies ist, wird
die andere Methode aufgerufen.
Das heisst im Klartext, entweder wird bei alg = 0
ausgeführt, oder haltCode:float f, ampl_mark, ampl_space ; if (subsamp) { int numfill = SUBSAMP - subsamp; if (length < numfill) { subsamp += length; return; } buffer += numfill; length -= numfill; subsamp = 0; } for (; length >= max(SUBSAMP, CORRLEN); length -= SUBSAMP, buffer += SUBSAMP) { #ifdef MRTTY // mrtty (2) decoder // sample=(*buffer)*128 ; xs=biq_bp(sample,bp0_c,bp0_b); xm=biq_bp(sample,bp1_c,bp1_b); xs*=xs; // xs RMS xm*=xm; // xm RMS f=biq_lp(biq_lp(xm-xs,lp1_c,lp1_b),lp2_c,lp2_b); #else ampl_mark= fsqr(mac(buffer, corr_mark_i, CORRLEN)) + fsqr(mac(buffer, corr_mark_q, CORRLEN)) ; ampl_space= fsqr(mac(buffer, corr_space_i, CORRLEN)) + fsqr(mac(buffer, corr_space_q, CORRLEN)); f = ampl_mark - ampl_space ; #endif dcd_shreg <<= 1; dcd_shreg |= (f > 0); /* check if transition */ if ((dcd_shreg ^ (dcd_shreg >> 1)) & 1) { if (sphase < (0x8000u - (SPHASEINC / 2))) sphase += SPHASEINC / 8; else sphase -= SPHASEINC / 8; } sphase += SPHASEINC; if (sphase >= 0x10000u) { sphase &= 0xffffu; rxbit(dcd_shreg & 1); } } subsamp = length;
Code:float f, ampl_mark, ampl_space ; if (subsamp) { int numfill = SUBSAMP - subsamp; if (length < numfill) { subsamp += length; return; } buffer += numfill; length -= numfill; subsamp = 0; } for (; length >= max(SUBSAMP, CORRLEN) ; length -= SUBSAMP, buffer += SUBSAMP) { ampl_mark= fsqr(mac(buffer, corr_mark_i, CORRLEN)) + fsqr(mac(buffer, corr_mark_q, CORRLEN)) ; ampl_space= fsqr(mac(buffer, corr_space_i, CORRLEN)) + fsqr(mac(buffer, corr_space_q, CORRLEN)); f = ampl_mark - ampl_space ; dcd_shreg <<= 1; dcd_shreg |= (f > 0); // check if transition // if ((dcd_shreg ^ (dcd_shreg >> 1)) & 1) { if (sphase < (0x8000u - (SPHASEINC / 2))) sphase += SPHASEINC / 8; else sphase -= SPHASEINC / 8; } sphase += SPHASEINC; summe=summe + ( (f > 0) ? 1 : -1) ; if (sphase>=0x10000u) { sphase &= 0xffffu; // curbit = dcd_shreg & 1; if ( (summe >= (int) (m_fSignallevel * ((float) (FREQ_SAMP/SPHASEINC_BASE))) ) || (-summe >= (int) (m_fSignallevel * ((float) (FREQ_SAMP/SPHASEINC_BASE)) ) )) //(f >= m_fSignallevel) || (f <=-m_fSignallevel)) // Es muss schon ein wenig dahinterstehen ;-) { // TRACE1("summe: %d\n",summe) ; int bit=(summe >= 0) ? 1 : 0 ; rxbit(bit); } else { // ggf. laufende Auswertung abbrechen, da Signal zu schwach // //TRACE2("FMS: Low Power Signal %d < %d \n",summe,(int) (m_fSignallevel * ((float)(FREQ_SAMP/SPHASEINC_BASE)) )) ; if (rxstate) rxstate=0 ; } ; summe=0 ; } } subsamp = length;
Gruss,
Tim
--
In a world without walls and fences, who needs Windows and Gates ??
Meine private Webseite: http://www.db1jat.org
Ouh danke. So ausgeprägt sind meine Kenntnisse leider nicht ;-)
Ist die neue Methode auch gleichzeitig die Bessere?
Gruss
Stephan
Geändert von Pilzi (23.04.2009 um 17:04 Uhr)
Das kann man so nicht sagen. Der erste ist der Originale Algo. Das zweite stammt aus dem mrtty Projekt. Das ganze hatte ich mal gemacht um später bei verschiedenen Empfangsbedingungen auszuprobieren, was besser geht.
Gesicherte Erkenntnisse liegen mir da aber nicht vor. Ich hatte das begonnen, weil der Originale Algorithmus sich mit FMS-Text nach meinem Eindruck sehr schwer tut.
;-) begonnen? Bedeutet das, dass der Algo noch nicht fertig ist oder bezog sich das auf dieses mrtty Projekt?
Ich habe hier subjektiv mit der alten Methode die besseren Werte. Aber Beweisen kann man das nicht...spielen zu viele andere Faktoren mit in die Auswertung rein.
Kannst Du mal groß umreißen, was der Unterschied zwischen alt und neu ist?
Gruß
Stephan
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)