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




Zitieren