projekte:rtty-demodulator:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
projekte:rtty-demodulator:start [2014/02/18 09:28] – thasti | projekte:rtty-demodulator:start [2014/03/30 18:43] – [Zielstellung] thasti | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== RTTY-Demodulator ====== | ====== RTTY-Demodulator ====== | ||
===== 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 53: | Zeile 53: | ||
< | < | ||
- | Die implementierte Demodulation und Dekodierung funktioniert im Modell (auch bei schlechtem SNR, getestet z.B. 10dB) ohne Fehler. Die Regelung ist in ihren Parametern noch optimierbar. Als Parameter dafür sind in der Rückführung der I-Anteil, der P-Anteil und die Zeitkonstante des I-Anteils | + | Die implementierte Demodulation und Dekodierung funktioniert im Modell (auch bei schlechtem SNR, getestet z.B. 10dB) ohne Fehler. Die Regelung ist in ihren Parametern noch optimierbar. Als Parameter dafür sind in der Rückführung der Anteil |
Das Modell wurde außerdem (sowohl mit FIR als auch IIR-Filter bei der IQ-Mischung) mit real vom Funkgerät aufgenommener NF ausprobiert. Es wurde dafür das DWD RTTY-Wettersignal auf 10.100,8kHz genutzt. Die Erkennung war mit der Referenzimplementierung in MixW gleichgut. {{: | Das Modell wurde außerdem (sowohl mit FIR als auch IIR-Filter bei der IQ-Mischung) mit real vom Funkgerät aufgenommener NF ausprobiert. Es wurde dafür das DWD RTTY-Wettersignal auf 10.100,8kHz genutzt. Die Erkennung war mit der Referenzimplementierung in MixW gleichgut. {{: | ||
Zeile 71: | Zeile 71: | ||
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 94: | ||
===== 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 | ||
* 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 150: | Zeile 151: | ||
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: | ||
+ | * Sin/ | ||
+ | * 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.txt · Zuletzt geändert: 2015/11/17 09:26 von thasti