MorseCode einlesen und in Text umwandeln



  • Hallo,

    ich möchte, wie es oben steht, eine Folge von Morsezeichen mit Hilfe des Mikrofons einlesen, übersetzen lassen und als Text ausgeben. Das Problem, ich weiß nicht so recht ob und vor Allem WIE ich das machen soll. Aus den anderen Beiträgen, die sich mit dem Mikro beschäftigen hab ich nicht so wirklich verstanden. Kann jemand von euch weiterhelfen?
    Vielen Dank schon mal



  • Auf welcher Ebene? Willst du direkt das Mikrofon ansprechen? Oder eine Datei analysieren?
    Edit:
    Vielleicht hilft: http://www.c-plusplus.net/forum/276585



  • Ebi, wenn mir jemand sagt, er hätte irgendwas nicht verstanden, dann möchte man auch wissen, was derjenige verstanden oder nicht verstanden hat. Es wäre sehr hilfreich, wenn du uns über deinen Kenntnisstand der C++-Programmierspache informieren und deine Ansätze (oder zumindest erste Überlegungen) zur Umsetzung zeigen würdest.



  • Was mir einfällt:

    1. Trägerlevel in Anbetracht der Taktfrequenz rechteckig machen, eine kleine Phasenverschiebung kann man in Kauf nehmen. Zum Beispiel gleitenden Durchschnitt nehmen und bei 75% und 25% triggernd entprellen. Hab's leider noch nicht selber ausprobiert.
    2. Taktflanken beobachten und rückkopplen zu 1)
    3. Binärstring 101010111011101110101010 draus machen.
    4. Parsen zu 10 10 10 00 1110 1110 1110 00 10 10 10 also Ditditdit Dahdahdah Ditditdit
    5. Übersetzen nach SOS


  • Hallo,

    danke schon mal für die Rückmeldungen.
    @Rewind: Ich bin, was die "normale" (standard) Programmierung anbelang schon recht fit. Allerdings hab ich sehr wenig Erfhrung mit der WINAPI. Deshalb tue ich mich auch mit den Parametern recht schwer.
    Ein anderes Problem ist, dass ich den Ansatz von Volkhard zwar lese und auch begreife was er meint, aber keine Ahnung habe was

    Taktfrequenz rechteckig machen, eine kleine Phasenverschiebung kann man in Kauf nehmen. Zum Beispiel gleitenden Durchschnitt nehmen und bei 75% und 25% triggernd entprellen

    bedeuten soll, bzw. was das mit der Programmierung zu tun hat. Mir fehlt zu diesem Thema einfach der grundlegende Zugang.
    @Volkard: Wie macht man so etwas technisch?
    Ebi



  • Ebi01 schrieb:

    Hallo,

    danke schon mal für die Rückmeldungen.
    @Rewind: Ich bin, was die "normale" (standard) Programmierung anbelang schon recht fit. Allerdings hab ich sehr wenig Erfhrung mit der WINAPI. Deshalb tue ich mich auch mit den Parametern recht schwer.
    Ein anderes Problem ist, dass ich den Ansatz von Volkhard zwar lese und auch begreife was er meint, aber keine Ahnung habe was

    Taktfrequenz rechteckig machen, eine kleine Phasenverschiebung kann man in Kauf nehmen. Zum Beispiel gleitenden Durchschnitt nehmen und bei 75% und 25% triggernd entprellen

    bedeuten soll, bzw. was das mit der Programmierung zu tun hat. Mir fehlt zu diesem Thema einfach der grundlegende Zugang.
    @Volkard: Wie macht man so etwas technisch?
    Ebi

    gleitender Durchschnitt:

    double gd(double x){
       alt=alt*0.99+x*0.01;//oder andere Gewichte
       return alt;
    }
    

    Das Ding verzögert und glättet.

    triggern:

    double trig(double x){
       if(x>0.65)//oder andere Grenze
          return 1;
       else
          return 0;
    }
    

    Das Ding macht ein Rechtecksignal daraus. Aber leider pendelt vielleicht das Signal, wenn der Morser die Taste losgelassen hat, vielleicht Millisekunen lang so um 0.65, was wir als superschnelles Rumgedrücke lesen würden. Kann ich in der Nachverarbeitung nicht gebrauchen.

    entprellen dazu:

    double trig(double x){
       if(x>0.75)
          return alt=1;
       if(x<0.25)
          return alt=0;
       return alt;
    }
    

    Die Begriffe habe ich aus der Wirtschaft und Elektronik entlehnt. Keine Ahnung, wie sie in der Signalverarbeitung oder der Programmierung heißen.



  • Hallo Volkard,

    danke für die schnelle Antwort. Das kann ich jetzt ziemlich gut nachvollziehen. Was ich mir nochmal zu Gemüte führen muss ist der Umgang mit dem Mikrofon. Das wird glaub ich, nochmal ein ordentliches Stück Arbeit....

    Ebi



  • Gibt es einen bestimmten Grund, warum du das mit einem Mikrofon machen möchtest? Mit Tastatur wären ja sowohl die Eingabe als auch die Verarbeitung viel einfacher und genauer... Was du vielleicht noch beachten solltest, ist die mögliche Variationen der Signallänge (kann von Benutzer zu Benutzer unterschiedlich sein), es sei denn du machst das Programm für dich, dann weißt du auch wie lang oder wie kurz das Signal sein muss, um es als 0 bzw. 1 zu kodieren.



  • Hallo rewind,

    ich bin Lehrer und hatte mir überlegt, meine Schüler ein "Morseprojekt" programmieren zu lassen. Deren Programm müsste lediglich einen Text umsetzen und per lautsprecher ausgeben. Dieses gepiepse soll dann mein Programm einlesen und in Klartext zurückverwandeln. Ich glaube, das wäre eine tolle Motivation, wenn ich denSchülern die .exe zur Verfügung stellen könnte. 🙂
    Nur: Hinbekommen muss ichs noch. Ich tu mich mit dem blöden Mikrofon unednlich schwer...

    Ebi



  • Vielleicht solltest du es dir (und deinen Schülern, die mit den Lautsprechern genauso viele Probleme bekommen könnten :D) etwas leichter machen und die Morsefolgen in Textform ausgeben lassen (z.B. als Folge von '.', '-' und ' ').



  • CStoll schrieb:

    Vielleicht solltest du es dir (und deinen Schülern, die mit den Lautsprechern genauso viele Probleme bekommen könnten :D) etwas leichter machen und die Morsefolgen in Textform ausgeben lassen (z.B. als Folge von '.', '-' und ' ').

    Ja.

    Aber es wäre unendlich geil, wenn der Schülerrechner die Schülerausgabe auf seinem Lautsprecher in den Klassenraum herauspiepsen würde und per Schall und Luftdruckänderungen das weitergeleitet werden würde zum Lehrerrechner, der dann auf dem Beamer den rückübersetzten Klartext anzeigt. Das wäre echt der Hammer!



  • Wo du's erwähnst, versuche ich mir das auch vorzustellen 😃 Noch dazu wenn alle Schüler gleichzeitig versuchen zu morsen. Da fühlt man sich doch glatt in seine eigene Schulzeit zurückversetzt.



  • CStoll schrieb:

    Vielleicht solltest du es dir (und deinen Schülern, die mit den Lautsprechern genauso viele Probleme bekommen könnten :D) etwas leichter machen und die Morsefolgen in Textform ausgeben lassen (z.B. als Folge von '.', '-' und ' ').

    Das Senden sollte ja eigentlich überhaupt kein Problem sein

    '-' =

    Beep(10000, 3000);
    

    '.' =

    Beep(10000, 1000);
    

    ' '=

    Sleep(3000);
    


  • Hallo,
    als ich den Beitrag gelesen habe, dachte ich mir, die Idee ist doch wirklich super, mein Informatiklehrer wäre vor ein paar Jahren niemals auf eine Solche gekommen (naja, er hatte aber auch schon mit den Grundlagen von Pascal zu kampfen 😃 )

    Ich habe mir einmal dieses Projekt von Steven de Toni näher angeschaut und es dahingehend erweitert, dass nun ein Decoder einige Daten erhält:

    bool Process(const float* pMagArray, unsigned int maxFreq, unsigned int ampleft, unsigned int ampright);
    

    Ich habe mir jetzt die Sache zunächst denkbar einfach gemacht: Es werden eben nur die Amplituden ge- und die Zeiträume zwischen zwei "Frames" überprüft, in denen der Schwellenwert nicht überschritten wird.
    Normalerweise müsste man natürlich die Frequenzen mit einbeziehen, ich bin echt gespannt, ob sich ein erfahrener User hier meldet und schildert, wie er die Sache angehen würde. Ich habe mit so etwas noch leider keine Erfahrung, werde mich aber noch in dieses interessante Gebiet einarbeiten.
    In Aktion sieht es dann so so aus.
    Mit den Einstellungen muss natürlich jeweils herumgespielt werden, machmal waren die Ergebnisse brauchbar, mit anderen Einstellungen jedoch desaströs.

    Die Sourcen des Generators und des Oszis sind hier zu finden. Den Code von Codeproject habe ich an einigen Stellen geändert (bspw. einige nackte Zeiger durch vectoren ersetzt, ich denke aber nicht, da der Name des Autors noch im Dialogtitel steht und ich auf dessen Artikel verwiesen habe, dass ich irgendwelche rechtlichen Grauzonen betreten habe.

    Ach ja, kompiliert wurde der Code mit VS 2008, getestet auf XP und Win7.

    Edit: Ich veröffentliche eher selten Code, über Kritik würde ich mich freuen 🙂 .


Anmelden zum Antworten