Ergebnis 1 bis 9 von 9

Thema: FMS Einstellungen in monitord.xml

  1. #1
    Registriert seit
    17.12.2001
    Beiträge
    127

    FMS Einstellungen in monitord.xml

    Hi,

    kann mir jemand sagen, wozu folgende Einstellungen beim monitord in der monitord.xml sind:

    module type="fms"
    syncbits 12
    crc-check 1
    algorithmus 0
    maxerrors 3

    Es geht mir um die letzen beiden (algorithmus und maxerrors)

    In der Doku auf monitord.de ist nichts zu finden.

    Schönen Dank...

    Stephan

  2. #2
    Registriert seit
    17.12.2001
    Beiträge
    127
    Keiner eine Idee? Irgendwo muss es doch eine Doku dazu geben.... Grübel

  3. #3
    Registriert seit
    28.11.2005
    Beiträge
    2.759
    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

  4. #4
    Registriert seit
    17.12.2001
    Beiträge
    127
    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.

  5. #5
    Registriert seit
    28.11.2005
    Beiträge
    2.759
    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

    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)
    	{
    
    #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;
    ausgeführt, oder halt

    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

  6. #6
    Registriert seit
    17.12.2001
    Beiträge
    127
    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)

  7. #7
    Registriert seit
    11.12.2001
    Beiträge
    1.008
    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.

  8. #8
    Registriert seit
    17.12.2001
    Beiträge
    127
    ;-) 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

  9. #9
    Registriert seit
    11.12.2001
    Beiträge
    1.008
    Das begonnen bezieht sich auf die Integration des Algo in monitord. Man muss ja immer im Hinterkopf behalten, daß das Grundkonzept vom Urvater unixmon noch erhalten ist.

    Wenn ich mir den Quelltext nochmal so auf die schnelle ansehe würde ich auch sagen, daß der Algorithmus nahezu identisch ist. Bis auf die Tatsache, daß der neuere weniger Falschauswertungen produziert. Er prüft im Grunde die Signalstärke ab. Ist sie zu gering, bricht er ab.

    Per #define kann man dann noch den mrtty im 2.Algo einschalten. Ich weiss aber gerade nicht, ob das #define gesetzt ist.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •