Theorie

RF … Radio Frequency (Radioband enthält z.B: das Sprachsignal 100MHz … 100.01MHz)

LO … Local Oscillator (Oszillator z.B: 100MHz)

IF … Intermediate Frequency (Zwischenfrequenz)

USB … Upper Sideband (oberes Seitenband)

LSB … Lower Sideband



Mischt (Multipliziert) man RF und LO so ergeben sich die Zwischenfrequenzen

wobei negative Frequenzen an der 0Hz-Achse gespiegelt werden.



fout1 = fRF+fLO=200Mhz..200.01MHz (Oberes Seitenband)

fout2 = fRF-fLO= 0 .. 10kHz (Unteres Seitenband)



Low-Side Injection fLO < fRF

fRF=130MHz … 150MHz

fLO=100MHz

fout1=fRF-fLO =30MHz .. 50Mhz

fout2 = fRF+fLO = 230MHz … 250MHz

fout3 = -fRF+fLO = -30MHz .. -50MHz (wird gespiegelt auf +30MHz bis +50Mhz)

fout4 = -fRF-fLO = -230MHz .. -250MHz

High-Side Injection fLO > fRF

Hierbei wird das untere Seitenband invertiert d.h. die tiefen Töne des RF werden als hohe Töne erzeugt usw.. Dies wird in digitalen System zurückgerechnet oder durch Hardware korrigiert.





Berechnungen für den TEA5767

Je nach Empfangssituation kann High-Side- oder Low-Side-Injection für die Empfangsqualität besser sein; der Baustein unterstützt beide Methoden. Die Software testet beide Varianten und setzt dann die Variable hilo entsprechend auf 1 (HIGH-Side) oder 0.

Setzen der Frequenz durch Programmieren der Register 0 und 1

Laut Datenblatt berechnet sich die Frequenz dann (freq in MHz)

	if ( HILO == 1)
		div = (4 * (freq * 1000 + 225)) / 32.768;
	else
		div = (4 * (freq * 1000 - 225)) / 32.768;
	// Umwandlung in die 14Bit für den TEA5767
	buffer[0] = (div >> 8) & 0x3f;
	buffer[1] = div & 0xff;

Auslesen der Register und Einstellen der Frequenz

//Ergebnis in Hz!
if (HILO == 1)
 	freq_available = (((buf[0] & 0x3F) << 8) + buf[1]) * 32768 / 4 - 225000;
else
    	freq_available = (((buf[0] & 0x3F) << 8) + buf[1]) * 32768 / 4 + 225000;

//Runden auf die erste Nachkommastelle
//z.B: 92.43MHz ==> 92430000 => 924.3+0.5=924.8 => 924 => 92.4 MHz
//     92.46MHz ==> 92460000 => 924.6+0.5=925.1 => 925 => 92.5 MHz
rounded_freq = floor (freq_available / 100000 + .5) / 10;
set_frequency (rounded_freq);

Suche

void TEA5767::search_down (unsigned char *buf)
{
  	unsigned div;
  	double freq_av;
// aktuell eingestellte Frequenz auslesen
  	freq_av = frequency_available (buf);  //liefert die Frequenz in Hz
// die Startfrequ. Wird ein bisschen tiefer gewählt sodass der Empfänger nicht
// wieder die gleiche Frequenz wieder findet
  	div = (4 * (((freq_av - 98304) / 1000000) * 1000000 + 225000)) / 32768;

	buf[0] = (div >> 8) & 0x3f;
  	buf[1] = div & 0xff;