projekte:rtty-demodulator:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| projekte:rtty-demodulator:start [2014/02/18 13:18] – [Interna] thasti | projekte: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, | ||
| + | </ | ||
| + | |||
| ===== Zielstellung ===== | ===== Zielstellung ===== | ||
| - | Es soll für das Studienfach Mikroprozessortechnik | + | 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 ==== | ||
| - | Zur Anzeige der (ungefähren) korrekten Abstimmung werden ein/zwei einfache IIR-Resonator-Filter benutzt. Diese werden in Matlab als IIR Biquad Filter realisiert. | ||
| - | |||
| - | < | ||
| - | |||
| - | 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, | ||
| - | |||
| - | 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 107: | Zeile 102: | ||
| ===== Entwicklungsumgebung ===== | ===== Entwicklungsumgebung ===== | ||
| - | Es wird mit dem internen ADC des AtMega gearbeitet, welcher als erstes auf eine feste Samplerate eingestellt wird. Zur Kontrolle sollen Signale " | + | Es wird mit dem internen ADC des AtMega gearbeitet, welcher als erstes auf eine feste Samplerate eingestellt wird. Zur Kontrolle sollen Signale " |
| + | Ein Pin wird zum Beginn des Rechenkerns und am Ende umgeschaltet, | ||
| Zur Validierung von Funktionsblöcken ist eine Anbindung an Matlab per UART vorgesehen, durch diese können die eigenen Ergebnisse mit verifizierten Funktionen in Matlab verglichen werden. | Zur Validierung von Funktionsblöcken ist eine Anbindung an Matlab per UART vorgesehen, durch diese können die eigenen Ergebnisse mit verifizierten Funktionen in Matlab verglichen werden. | ||
| + | |||
| + | TODO für die HW: | ||
| + | * AtMega48, TQFP | ||
| + | * UART (RxD: PD0, TxD: PD1) | ||
| + | * 16MHz XTAL (PB6, PB7) | ||
| + | * 2xADC (PC0..5), Filterung 1.Ordnung @ 3kHz | ||
| + | * 2x DAC (PD5, PD6), Filterung 4. Ordnung @ 3kHz (PWM@61 kHz, DAC@6kHz) | ||
| + | * LED | ||
| + | * ISP | ||
| ===== 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 |
| * Loopback-Test | * Loopback-Test | ||
| * Einbindung in Matlab | * Einbindung in Matlab | ||
| - | * Timer Inbetriebnahme | + | * Timer Inbetriebnahme |
| * Pin-Toggle | * Pin-Toggle | ||
| - | * ADC Inbetriebnahme | + | * ADC Inbetriebnahme |
| * Loopback @ 12kHz | * Loopback @ 12kHz | ||
| - | * Mathematikoperationen | + | * Mathematikoperationen |
| - | * saturierende Addition, Subtraktion | + | * saturierende Addition |
| + | * saturierende | ||
| * Fractional Multiplikation | * Fractional Multiplikation | ||
| + | * Fraction Division | ||
| * per Matlab testen (Eingabe: 2 Operanden, Ausgabe: 1 Ergebnis) | * per Matlab testen (Eingabe: 2 Operanden, Ausgabe: 1 Ergebnis) | ||
| - | * Sinus/ | + | * Sinus/ |
| * per UART und Matlab testen | * per UART und Matlab testen | ||
| * Eingabe: phi, Ausgabe: sin(phi), cos(phi) | * Eingabe: phi, Ausgabe: sin(phi), cos(phi) | ||
| - | >> Vielleicht sind folgende [[http:// | + | * Arkustangens (LUT mit Interpolation) **todo** |
| - | + | * per UART und Matlab testen | |
| - | * NCO (Oszillator für IQ-Mischung) | + | * Eingabe: x, Ausgabe: atan(x) |
| + | * NCO (Oszillator für IQ-Mischung) | ||
| * 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) | + | * CORDIC (Phasenwinkelbestimmung) |
| * per Matlab testen (Eingabe: I, Q, Ausgabe: phi) | * per Matlab testen (Eingabe: I, Q, Ausgabe: phi) | ||
| - | * BiQuad-Filter (für I/ | + | * BiQuad-Filter (für I/ |
| * 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) |
| * 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 151: | Zeile 159: | ||
| Bitbreite verschiedener Register: | Bitbreite verschiedener Register: | ||
| - | * ADC-Input: | + | * ADC-Input: |
| * NCO-PAC: 16bit, unsigned | * NCO-PAC: 16bit, unsigned | ||
| - | * NCO-sin/ | + | * NCO-sin/ |
| - | * 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: | + | * BiQuad-Filter: |
| Rechenintensive Operationen: | Rechenintensive Operationen: | ||
| - | * Sin/Cos/Tan jeweils max. 80 Takte | + | * Sin/Cos/Atan jeweils max. 80 Takte (16bit) |
| + | * Division: 255 Takte (16/16 signed), 103 Takte (8/8 signed) | ||
| + | |||
| + | Skalierung: | ||
| + | * Sin(x)/ | ||
| + | * Atan(x) 0x000 .. 0x7fff (für x = 0..20, 0x7fff für >20) | ||
| + | |||
| + | NCO: | ||
| + | * Takt: 12kHz | ||
| + | * PAC: 16 bit | ||
| + | * FCW: 16 bit | ||
| + | * Frequenzauflösung: | ||
| ===== Links ===== | ===== Links ===== | ||
| [[http:// | [[http:// | ||
| - | [[http:// | + | [[http:// |
| + | [[http:// | ||
| + | [[http:// | ||
projekte/rtty-demodulator/start.1392729503.txt.gz · Zuletzt geändert: von thasti
