Ergebnis 1 bis 9 von 9

Thema: FMS Einstellungen in monitord.xml

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  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)

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
  •