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