Forum: Mikrocontroller und Digitale Elektronik NRZI Decoder Code gesucht


von Markus B. (dalotel)


Lesenswert?

Hallo,
ich habe mir ein APRS Empfänger mit TCM3105 und Atmega 328 gebaut.
Dafür suche ich jetzt eine NRZI Routine für das Biteinlesen.
Ja ich kenne MicroAPRS, aber trotzdem soll der TCM3105 NICHT durch 
Software ersetzt werden! Das funktioniert einfach zu lausig.
Das ist zwar keine unlösbare Aufgabe, aber vielleicht hat das ja schon 
mal jemand gebraucht und entwickelt, und ich kann mir den Aufwand 
sparen.

Gruß
Markus

: Verschoben durch Moderator
von Achim M. (minifloat)


Lesenswert?

Hi,

hab' im eevblog-Forum den Faden hier gefunden ...

https://www.eevblog.com/forum/beginners/can-i-demodulate-bell-202-fsk-using-a-microcontroller/

... der dorthin ...

https://github.com/jarodgers/bell202_decoder

... verlinkt.

bell202.c kurz überflogen: Scheint, als würde da das Audiosignal direkt 
dekodiert (ohne TCM3105).
Also musst du den Zerocrossing-Zähler/Detektor raus operieren.
Der Dateneingangs-Pin kann der Pin-Change-Interrupt bleiben: einfach 
immer als "// tone has changed" und entsprechendem Pegel Mark/Space an 
der Stelle in die Kette einspeisen. Bit stuffing wird danach bereits 
berücksichtigt.

Aus dem Datenblatt des TCM3105 habe ich entnommen, dass der ein 
carrier-detect-Ausgang hat. Mit dem ließe sich der Pinchange-Interrupt 
ein- und ausschalten. Vielleicht tut es aber auch ein AND-Gatter, das 
den RXD nur durchlässt, wenn auch ein Träger vorhanden ist.

Prosit.
mfg mf

: Bearbeitet durch User
von Hadmut F. (hadmut)


Lesenswert?

// Grok, die X-ai, kann sowas wunderbar.
// "write me a nrzi decoder in C pls"

#include <stdio.h>
#include <stdint.h>

// Decode NRZI signal
// Input: nrzi_data (array of signal levels, 0 or 1)
//        length (number of samples)
// Output: decoded_data (array to store decoded bits)
// Returns number of decoded bits
int nrzi_decode(const uint8_t *nrzi_data, int length, uint8_t 
*decoded_data) {
    if (length <= 0 || !nrzi_data || !decoded_data) return 0;

    uint8_t last_level = nrzi_data[0]; // Initial signal level
    int decoded_index = 0;

    for (int i = 1; i < length; i++) {
        // Transition (0->1 or 1->0) means 1, no transition means 0
        if (nrzi_data[i] != last_level) {
            decoded_data[decoded_index++] = 1;
            last_level = nrzi_data[i];
        } else {
            decoded_data[decoded_index++] = 0;
        }
    }

    return decoded_index;
}

// Example usage
int main() {
    // Example NRZI signal: 1 0 0 1 1 (transitions at 1st, 4th, 5th 
positions)
    uint8_t nrzi_signal[] = {1, 0, 0, 0, 1, 1};
    int length = sizeof(nrzi_signal) / sizeof(nrzi_signal[0]);
    uint8_t decoded_bits[32]; // Buffer for decoded data

    int decoded_length = nrzi_decode(nrzi_signal, length, decoded_bits);

    printf("NRZI Input: ");
    for (int i = 0; i < length; i++) {
        printf("%d ", nrzi_signal[i]);
    }
    printf("\nDecoded Output: ");
    for (int i = 0; i < decoded_length; i++) {
        printf("%d ", decoded_bits[i]);
    }
    printf("\n");

    return 0;
}

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Hadmut F. schrieb:
> // Grok, die X-ai, kann sowas wunderbar.

Nur die Code-Tags hättest du selber hinzufügen oder der KI sagen müssen, 
dass es ein Beitrag für mikrocontroller.net werden soll 😄

von Harald K. (kirnbichler)


Lesenswert?

Hadmut F. schrieb:
> // Grok, die X-ai, kann sowas wunderbar.

Großartig, noch mehr KI-Slop. Die komplette Verblödung schreitet mit 
großen Schritten voran.

von Rahul D. (rahul)


Lesenswert?

Hadmut F. schrieb:
> // Grok, die X-ai, kann sowas wunderbar.

Warum der TO nur nicht auf die Idee gekommen ist?

Harald K. schrieb:
> Großartig, noch mehr KI-Slop. Die komplette Verblödung schreitet mit
> großen Schritten voran.

Man kann die KI in diesem Fall doch auch als Nachschlagewerkk 
betrachten.

von Norbert (der_norbert)


Angehängte Dateien:

Lesenswert?

Harald K. schrieb:
> Die komplette Verblödung schreitet mit
> großen Schritten voran.

Manche sagen wir hätten das Ziel fast erreicht.

von Norbert (der_norbert)


Lesenswert?

Rahul D. schrieb:
> Man kann die KI in diesem Fall doch auch als Nachschlagewerkk
> betrachten.

Das bringt man dann allerdings nicht mit ›I‹ in Zusammenhang.
Es sollte besser halluzinierendes Sammelsurium Ideen anderer, dessen 
Antworten nicht im Geringsten vertraut werden darf, heißen.

Den Machern muss man allerdings eine gewisse Cleverness zusprechen.
Sie habe einen nahezu perfekten Weg gefunden, einer riesigen Anzahl von 
Idio^H^H^Hnvestoren das Geld aus der Tasche zu ziehen.

von Rahul D. (rahul)


Lesenswert?

Norbert schrieb:
> Das bringt man dann allerdings nicht mit ›I‹ in Zusammenhang.
> Es sollte besser halluzinierendes Sammelsurium Ideen anderer, dessen
> Antworten nicht im Geringsten vertraut werden darf, heißen.

Man sollte schon beurteilen können, was die KI oder irgendwelche 
NI-Tippgeber empfehlen, oder die Vorschläge entsprechend durch andere 
Quellen verfizieren können.

von Norbert (der_norbert)


Lesenswert?

Rahul D. schrieb:
> Man sollte schon beurteilen können, was die KI oder irgendwelche
> NI-Tippgeber empfehlen, oder die Vorschläge entsprechend durch andere
> Quellen verfizieren können.

Frage möglichst Aussagekräftig formulieren.
Ergebnis auf groben Schwachsinn überprüfen.
Frage weiter verfeinern.
Ergebnis auf groben Schwachsinn überprüfen.
Beliebig iterieren, dann.
Ergebnis auf ›halbwegs akzeptabel‹ prüfen.
Syntaxfehler entfernen.
Testdaten erstellen.
Testroutinen schreiben.
Ergebnis endgültig verifizieren.

In Summe:
Immer schön langsam, immer schön gemächlich.

Oder halt der religiöse Ansatz:
Immer schön Glauben, immer schön Hoffen.

Oder – in leichter Abwandlung – der Descartes Ansatz:
Ich sollte zwar denken, aber ich will nich'

von Rahul D. (rahul)


Lesenswert?

Norbert schrieb:
> Oder – in leichter Abwandlung – der Descartes Ansatz:
> Ich sollte zwar denken, aber ich will nich'

Gilt im Umkehrschluss dann auch der abgewandelte Satz von Descartes:
"Ich denke nicht, also bin ich auch nicht." ???

von Markus B. (dalotel)


Lesenswert?

Danke für die vielen Beiträge.
KI ist nicht so meins, da bin ich etwas altmodisch.
Aber mit dem Link mit dem Bell 202 (Danke Achim) kann ich schon mal was 
anfangen. Denke da kann ich was draus machen.
Vielen Dank.

Gruß
Markus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.