PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : FMS Einstellungen in monitord.xml



Pilzi
17.04.2009, 20:30
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

Pilzi
23.04.2009, 16:27
Keiner eine Idee? Irgendwo muss es doch eine Doku dazu geben.... Grübel

Shinzon
23.04.2009, 16:35
Gibt es auf der Monitor-Webseite ..

Gruss,
Tim

Pilzi
23.04.2009, 16:50
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.

Shinzon
23.04.2009, 17:06
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



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



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

Pilzi
23.04.2009, 17:51
Ouh danke. So ausgeprägt sind meine Kenntnisse leider nicht ;-)

Ist die neue Methode auch gleichzeitig die Bessere?

Gruss

Stephan

Buebchen
02.05.2009, 16:02
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.

Pilzi
02.05.2009, 16:15
;-) 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

Buebchen
03.05.2009, 02:47
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.