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;