Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekte:rtty-demodulator:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
projekte:rtty-demodulator:start [2014/02/20 13:53] – [Abstimmanzeige] thastiprojekte:rtty-demodulator:start [2015/11/17 09:26] (aktuell) thasti
Zeile 1: Zeile 1:
 ====== RTTY-Demodulator ====== ====== RTTY-Demodulator ======
 +~~NOTOC~~
 +<WRAP 30% right>
 +^ RTTY-AFSK-Demodulator ^^
 +| Ein AtMega demoduliert RTTY, Verwendbar für den DWD oder die AFu-Bänder. ||
 +| **Mitarbeiter** | Stefan, DK3SB \\ Sebastian, DL3YC |
 +| **Status** | Konzept erstellt, Simulation durchgeführt, Implementierung leider nicht bis zum Schluss durchgezogen |
 +</WRAP>
 +
 ===== Zielstellung ===== ===== Zielstellung =====
-Es soll für das Studienfach Mikroprozessortechnik ein FSK-Demodulator entwickelt werden. Die Umsetzung soll in Assembler auf einem AtMega-Prozessor passieren, die dahinführende Entwicklung wird hier dokumentiert werden.+Es soll ein FSK-Demodulator entwickelt werden. Die Umsetzung soll in Assembler auf einem AtMega-Prozessor passieren, die dahinführende Entwicklung wird hier dokumentiert werden.
  
 Einsatzzweck für das Gerät ist entweder RTTY der Funkamateure bzw des DWD. Als HF-Frontend zum praktischen Einsatz ist die Verwendung eines gewöhnlichen Transceivers geplant, sodass die Demodulation einer AFSK erfolgt, die Demodulation einer evtl. vorhandenen FM, SSB, AM usw wird vom Funkgerät durchgeführt. Einsatzzweck für das Gerät ist entweder RTTY der Funkamateure bzw des DWD. Als HF-Frontend zum praktischen Einsatz ist die Verwendung eines gewöhnlichen Transceivers geplant, sodass die Demodulation einer AFSK erfolgt, die Demodulation einer evtl. vorhandenen FM, SSB, AM usw wird vom Funkgerät durchgeführt.
Zeile 71: Zeile 79:
  
 Im AtMega wird dieser Algorithmus als kleine State Machine umgesetzt. Im AtMega wird dieser Algorithmus als kleine State Machine umgesetzt.
- 
-==== Abstimmanzeige ==== 
- 
-** fällt weg ** 
- 
-Zur Anzeige der (ungefähren) korrekten Abstimmung werden ein/zwei einfache IIR-Resonator-Filter benutzt. Diese werden in Matlab als IIR Biquad Filter realisiert. 
- 
-<code>[b,a] = iirpeak(0.3,0.01)</code> 
- 
-Die Parameter der Funktion sind die Peak-Frequenz und die gewünschte Bandbreite.  
-Der Koeffizient a0 ist immer 1, b1 ist immer 0, und wenn die Mittenfrequenz zu 0.5 (FS/4) gewählt wird, wird a1 zu Null und der Filter kann weiter Optimiert werden. Dies ist leider ungünstig, daher wird auf diese Möglichkeit der Optimierung verzichtet. 
- 
-FIXME Möglichkeit untersuchen, das I oder Q-Filter im Betrag direkt als Indikator zu verwenden.  
- 
-Durch die sehr guten Ergebnisse der Regelung kann die Abstimmanzeige eigentlich wegfallen - das System regelt selbstständig auf das vorhandene Signal irgendwo in der Empfangsbandbreite. 
- 
  
  
Zeile 119: Zeile 111:
   * UART (RxD: PD0, TxD: PD1)   * UART (RxD: PD0, TxD: PD1)
   * 16MHz XTAL (PB6, PB7)   * 16MHz XTAL (PB6, PB7)
-  * ADC (PC0..5), Filterung 2.Ordnung @ 3kHz +  * 2xADC (PC0..5), Filterung 1.Ordnung @ 3kHz 
-  * DAC (PD5, PD6), Filterung 4. Ordnung @ 3kHz+  * 2x DAC (PD5, PD6), Filterung 4. Ordnung @ 3kHz (PWM@61 kHz, DAC@6kHz)
   * LED    * LED 
   * ISP   * ISP
Zeile 126: Zeile 118:
 ===== Arbeitspakete und Milestones ===== ===== Arbeitspakete und Milestones =====
 Es sind folgende, grundlegende Arbeitspakete zu bewältigen Es sind folgende, grundlegende Arbeitspakete zu bewältigen
-  * UART Inbetriebnahme+  * UART Inbetriebnahme - **code ok, testen!**
     * Loopback-Test     * Loopback-Test
     * Einbindung in Matlab     * Einbindung in Matlab
Zeile 133: Zeile 125:
   * ADC Inbetriebnahme - **ok**   * ADC Inbetriebnahme - **ok**
     * Loopback @ 12kHz     * Loopback @ 12kHz
-  * Mathematikoperationen +  * Mathematikoperationen **todo**
     * saturierende Addition     * saturierende Addition
     * saturierende Subtraktion      * saturierende Subtraktion 
Zeile 139: Zeile 131:
     * Fraction Division     * Fraction Division
     * per Matlab testen (Eingabe: 2 Operanden, Ausgabe: 1 Ergebnis)     * per Matlab testen (Eingabe: 2 Operanden, Ausgabe: 1 Ergebnis)
-  * Sinus/Kosinus (LUT mit Interpolation) +  * Sinus/Kosinus (LUT mit Interpolation) **todo**
     * per UART und Matlab testen     * per UART und Matlab testen
     * Eingabe: phi, Ausgabe: sin(phi), cos(phi)     * Eingabe: phi, Ausgabe: sin(phi), cos(phi)
-  * Arkustangens (LUT mit Interpolation)+  * Arkustangens (LUT mit Interpolation) **todo**
     * per UART und Matlab testen     * per UART und Matlab testen
     * Eingabe: x, Ausgabe: atan(x)     * Eingabe: x, Ausgabe: atan(x)
-  * NCO (Oszillator für IQ-Mischung) +  * NCO (Oszillator für IQ-Mischung) **todo**
     * Phasenakkumulator per UART validieren (Eingabe: step, Ausgabe: Wert --> Sinus in Matlab)     * Phasenakkumulator per UART validieren (Eingabe: step, Ausgabe: Wert --> Sinus in Matlab)
     * Phasenakkumulator am DSO validieren (FCW -> Ausgangsfrequenz)     * Phasenakkumulator am DSO validieren (FCW -> Ausgangsfrequenz)
     * Phasenakkumulator mit Sinus und Kosinus am DSO validieren (FCW -> Ausgangsfrequenz)     * Phasenakkumulator mit Sinus und Kosinus am DSO validieren (FCW -> Ausgangsfrequenz)
     * Phasenverschiebung des komplexen NCO bestimmen (frequenzunabhängig 90°)     * Phasenverschiebung des komplexen NCO bestimmen (frequenzunabhängig 90°)
-  * CORDIC (Phasenwinkelbestimmung) / Division+  * CORDIC (Phasenwinkelbestimmung) / Division **redefine**
     * per Matlab testen (Eingabe: I, Q, Ausgabe: phi)     * per Matlab testen (Eingabe: I, Q, Ausgabe: phi)
-  * BiQuad-Filter (für I/Q-Daten) +  * BiQuad-Filter (für I/Q-Daten) **todo**
     * passenden Koeffizientensatz berechnen      * passenden Koeffizientensatz berechnen 
     * per DSO und Sig-Generator testen     * per DSO und Sig-Generator testen
-  * RC-Filter (für Fehlersignal) +  * RC-Filter (für Fehlersignal) **todo**
     * per DSO und Sig-Generator testen     * per DSO und Sig-Generator testen
-  * Baudot-Code Dekodierung (2x LUT) +  * Baudot-Code Dekodierung (2x LUT) **todo**
     * per UART testen (Eingabe: Baudot, Ausgabe: ASCII)     * per UART testen (Eingabe: Baudot, Ausgabe: ASCII)
 ===== Interna ===== ===== Interna =====
 Systemdaten: Systemdaten:
-  * verwendeter MCU: AtMega8+  * verwendeter MCU: AtMega48
   * Systemtakt: 16MHz   * Systemtakt: 16MHz
   * ADC Samplerate (Timer): 12kHz   * ADC Samplerate (Timer): 12kHz
Zeile 167: Zeile 159:
  
 Bitbreite verschiedener Register: Bitbreite verschiedener Register:
-  * ADC-Input: 10bit, unsigned -> zu 16bit, signed konvertieren+  * ADC-Input: 8bit, unsigned -> zu 8 bit signed konvertieren
   * NCO-PAC: 16bit, unsigned   * NCO-PAC: 16bit, unsigned
-  * NCO-sin/cos: 16 bit, signed +  * NCO-sin/cos: bit, signed 
-  * Mischer: Input 16bit signed * 16bit, signed, Output 16bit, signed +  * Mischer: Input 8bit signed * 8bit, signed, Output 16bit, signed 
-  * RC-Filter: Input 16bit, signed, Output 16bit Signed (16*16 und 16 bit abschneiden oder nur 8*8 rechnen?+  * RC-Filter: Input 16bit, signed, Output 16bit Signed (intern 24bit
-  * BiQuad-Filter: Input 16bit, signed, Output 16bit Signed +  * BiQuad-Filter: Input 16bit, signed, Output 16bit Signed (intern 24 bit)
  
 Rechenintensive Operationen: Rechenintensive Operationen:
-  * Sin/Cos/Atan jeweils max. 80 Takte+  * Sin/Cos/Atan jeweils max. 80 Takte (16bit)
   * Division: 255 Takte (16/16 signed), 103 Takte (8/8 signed)   * Division: 255 Takte (16/16 signed), 103 Takte (8/8 signed)
  
projekte/rtty-demodulator/start.1392904382.txt.gz · Zuletzt geändert: 2014/02/20 13:53 von thasti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki