48Bit "Telegram" über Audio Ausgeben

  • C#
  • .NET 6

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    48Bit "Telegram" über Audio Ausgeben

    Hallo liebe Gemeinde,

    Ich zerbreche mir den Kopf seit Tagen!

    Ich möchte ein 48Bit Telegramm erzeugen und via Audio ausgeben lassen.

    Ich habe diverse lösungsansätze gehabt doch leider komme ich nicht zum Ziel.

    IWaveProvider Spuckt nichts aus
    SineWaveOscillator macht zwar Tönes, aber ich bekomm es nicht hin, dass er das "Telegram" zerpflückt und abspielt. Denke das ding ist dazu unbrauchbar.

    Wie würdet Ihr an die Sache gehen?

    Oder habt ihr den ein oder anderen "Google-Tipp", kann mir auch vorstellen, dass ich derzeit nicht weiß nach welchen begriff ich noch googlen soll.

    Danke =)

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Moinsen @PhilippHH

    Gruß aus HH. Wie ein Rapper mal in seinem Text sagte: "Ich bin jetzt auch in Hambuarch...".

    Frage: Was ist ein, 48Bit Telegram?

    Ist die Hardware, die du nutzt auch 48Bit-tig?

    Soll das Text-To-Speach sein?

    Jetzt habe ich mehr Fragen als Antworten... Hmm. Erstmal Kaffee... Meeting und dann Wochenende...

    c.u. Joshi auch aus HaHa... hihi :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Joshi“ ()

    PhilippHH schrieb:

    Wie würdet Ihr an die Sache gehen?



    Als erstes Informationen besorgen! Ich habe einfach nach 48 Bit Telegram gesucht und bin bei Wikipedia darauf aufmerksam geworden:
    de.wikipedia.org/wiki/Funkmeldesystem

    PhilippHH schrieb:

    SineWaveOscillator macht zwar Tönes, aber ich bekomm es nicht hin, dass er das "Telegram" zerpflückt und abspielt.



    Also 48 Bit sind nur 6 Bytes, kannst ja mal ausrechnen wie lange es dauern würde das abzuspielen bei 44100 KHz abtastrate und nur 32Kbps. Kommt was nahezu = 0 raus.

    PS.
    Wenn du nun so ein Telegram hast, kannst du mit Bitwise-Operations einzelne Bits lesen wie auch setzen(zum senden)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BitBrösel“ ()

    Moin zusammen,

    sorry... da war ich gestern wohl schon gedanklich nicht mehr ganz anwesend!

    Ja genau @BitBrösel genau darum geht wie im Wiki Artikel.

    Das da nahe zu Null kommt ist auch gut, es ist i.d.r. auch nur als kurzes Knacken zu hören.

    Das Poblem bim SineWaveOsc. ist, dass es eher einen statischen Ton spiel.

    Beispiel:

    C#-Quellcode

    1. WaveOut waveOut = new WaveOut();
    2. SineWaveOscillator osc = new SineWaveOscillator(491100);
    3. osc.Amplitude = 5192;
    4. waveOut.Init(osc);
    5. osc.Frequency = Ton1;
    6. waveOut.Play();
    7. Thread.Sleep(1000);
    8. waveOut.Stop();
    9. if (txtempfänger.Text == "1") { osc.Frequency = Ton1; waveOut.Play(); Thread.Sleep(70); waveOut.Stop(); }


    Alternativ habe ich sowas versucht:

    C#-Quellcode

    1. WaveOut waveOut = new WaveOut();
    2. byte[] bytes = new byte[1024];
    3. IWaveProvider provider = new RawSourceWaveStream(new MemoryStream(bytes), new WaveFormat(48000, 16, 1));
    4. waveOut.Init(provider);
    5. waveOut.Volume = 1;
    6. waveOut.Play();
    7. txtrecieved.Text = "OK";


    .. Ja, es ist noch nicht das 48Bit Telegram drin!
    Ich wollte mich erstmal um die das "Gerüst" kümmern.
    Hi

    Wozu soll das gut sein so ein 48bit Telegramm per Audio abspielen zu wollen? In den 6 Bytes sind doch gar keine Audiodaten enthalten nachdem ich das kurz recherchiert habe. Eher sowas wie ein Startbit, sonstige Daten von wem, an wen, Art der Message und sowas wie ein Prüfbit.
    Mfg -Franky-
    Hallo @-Franky-,

    hier der Aufbau der Nachricht:

    Bit
    Bedeutung
    Vorlauf
    12x"1" Bit und Blocksynco. "00011010
    1-4
    Dienstkennung (4Bit)
    5-8
    Länderkennung (4Bit)
    9-16
    Ortkennung (8Bit)
    17-32
    Fahrzeug (16Bit)
    33-36
    Status (1Bit)
    37
    Baustufenkennung (1Bit)
    28
    Richtung (1Bit)
    39-40
    Kurzinfo (2Bit)
    41-47
    Rendundanz
    48
    Schlussbit
    Wie soll das denn genau abgespielt werden? Einfach nur so die 6 Bytes? Das ergibt mir keinen Sinn. Weil diese 6 Bytes sind kein Ton, sondern das Resultat einer Datenübertragung die auch eine ganz andere Abtastrate(Frequenz) hat als Soundkarten.

    Ich glaube man würde nichts wahrnehmen.

    Nachträglich korrigiert, falsch gerechnet, wichtigen Faktor vergessen
    Rechnen wir das mal aus: 44100 Hz, Mono, 16Kbp/s
    ->1 Abtastung dauert 0,000000226757369614512471655329 Sekunden
    ->es werde 16000 Bits pro Sekunde gebraucht also pro Abtastung 16000 / 44100 = 0.3628117913832199546485260771 Bits
    48 Bits reichen also für 132,3 Abtastungen, was für ein 0,0000299999999999999999999962 Sekunden langes Signal bedeutet.


    PS. @PhilippHH
    Ich habe irgendwo noch ein Tongenerator, ich such das Projekt morgen mal raus. Damit kannst du dann mal deinen Puffer abspielen.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „BitBrösel“ ()

    Moinsen.

    Ok. Telegram wird verflucht, als böse und dann, noch unhörbar... Ist das die End-to-End-Verschlüsselung? Hmm ;)

    Ich würde bei der Signalaufbereitung eher von Square-Wave (Rechteck) ausgehen.
    Dasselbe, geschieht in deiner LAN-Karte in elektrotechnischer Form. (Ja, es gibt keine WLAN-Kabel...)

    Über eine Sinnhaftigkeit lässt sich streiten, aber sind Telegramme nicht total veraltet?
    Ich bin schon 50, aber ich habe noch nie ein Telegramm gesendet oder empfangen. :)

    Ist das als RRI (Radio Relay International) angedacht?
    Dann macht das auch Sinn, weil Katastrophen, wie Telegram (App) ja das Internet brauchen, und das fällt ja immer aus... ;)
    Radiowellen sind immer da...

    Egal, zurück zum Thema.

    Also vermute ich, dass es Pulse (Rechtecksignale) sein sollen, die als Bit-Kodierung gelten, die wiederum in 48-Bit (48 Pulse als Zeitsequenz) gesendet werden.
    Und wenn ich das richtig verstehe, müssen mehrere gesendet werden, um ein ganzes zu ergeben?

    Weil, wie schon @BitBrösel es ausgerechnet hat, ist das gesamte Daten-Paket nicht hörbar.
    Aber ein Knacken kann durch Trägheit im Lautsprecher entstehen, wenn 0-Signal zu Max-Signal springt, was bei Rechteck-Wellen das Hauptmerkmal ist.

    Kannst du ein Square-Wave erzeugen?
    Dann alles verlangsamen, bis es menschlich hörbar wird.

    Gemessen im Labor (wegen der Fakenews-Liebhaber): Einer der besten Drummer konnte, ein Echoeffekt von 2ms hören.
    Das ist die menschliche Reaktionszeit, und weiter 2ms bis es im Gehirn wahrgenommen wird, und eine (Gegen)-Reaktion auszulösen.
    Also unter 4ms in .NET also eine Dauer von Thread.Sleep(4) mindesten, sonst gilt das nicht als Powernap.

    Ich würde das Telegramm also 48-Bit auf eine Sekunde strecken, und es dann mal anhören.

    Also ist nach BitBrösel ein Telegram 1/3 Millisekunde, also gib mal 4ms x 250 x (3 x Telegram) = 3000ms = 3 Sekunden

    Vielleicht sind dann 3 Sekunden doch besser zum Hören...

    Ich höre mir in 48kHz, ein Chinesischen SciFi an, bei 16-Bit, sonst ist das nix Ganzes und oder halbes... ;)

    c.u. Joshi (.- ..- ... ....... .... .- -- -... ..- .-. --.) ?( :S <X =O :| ;( :D ^^
    Oh, so viele Nachrichten von euch ..

    Ich weiß nicht wie ich dies umsetzten soll, daher ja dieser Forumsbeitrag...

    @-Franky- Ja, dieses Signal soll durch den Lineout an ein 4-Meter Funkgerät übertragen und versendet werden.
    Eine "Auftastung" mittels Relais am Fungerät via Serial-Port ist bereits erfolgt, nun soll das Telegram Erzeugt und Versendet werden.
    Am liebsten wäre mir, wenn dieses Signal direkt über die Serielle Schnittstelle in das Gerät übertragen werden kann. Aber alle anderen Programme die mir vorliegen die das können, machen es über den Lineout.

    Wie @Joshi Geschreiben macht dieses Vorgehen sinn, wenn alle anderen Netze überlastet oder ohne Funktion sind. Daher möchte ich diese "alte" aber immerhin IMMER funktiorende Technik gern in mein Software Projekt integrieren. Gerade vor 12 Monaten haben wir alle erlebt, was passiert, wenn der Mobilfunk oder Digitale Tetra Funk ausfällt #Ahrtal.

    Ich habe mal in VB vor jahren eine integration von 5-Ton Nachrichten über das Selbe Funkgerät geschrieben und umgesetzt. Nur leider scheint dies mir in diesem Fall nicht zuhelfen.

    Hier habe ich euch ein Link angefügt, in dem Ihr so ein Telegram hören könnt.

    Es sind hier 3 Töne zu hören (2x Telegram und 1x die Quittzung am Funkgerät.
    de.phoneky.com/ringtones/?id=m1037409#gsc.tab=0

    Villeicht konnte ich euch nun etwas mehr Übermitteln und euch ein Bild von dem machen was ich damit erreichen möchte


    PS: Habe herausgefunden, das ein Telegram 255,9 ms lang ist

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „PhilippHH“ ()

    Hi

    Dann wird das Telegramm eher als Rechtecksignal übertragen. Also Du müsstest wahrscheinlich jedes Bit in ein entsprechendes Rechtecksignal bringen wobei dann ein Zustand (0/1) eine feste Länge hat. Kann man sich ja ausrechnen wenn Du sagst das ein Telegramm 255,9ms und 48bit lang ist.
    Mfg -Franky-
    Ich glaube ich habe so langsam einen Lösungsansatz:

    C#-Quellcode

    1. public double Ton1 = 1200;
    2. public double To01 = 1800;
    3. WaveOut waveOut = new WaveOut();
    4. SineWaveOscillator osc = new SineWaveOscillator(1200);
    5. osc.Amplitude = 7500;
    6. waveOut.Init(osc);
    7. foreach (char c in tb_RIC.Text)
    8. {
    9. if (c.Equals('0'))
    10. {
    11. osc.Frequency = Ton0;
    12. waveOut.Play();
    13. waveOut.Stop();
    14. }
    15. else if (c.Equals('1'))
    16. {
    17. osc.Frequency = Ton1;
    18. waveOut.Play();
    19. waveOut.Stop();
    20. }
    21. }
    Glaube ich nicht, das dies ein Lösungsansatz ist. Mein Tongenerator Projekt ist tiefer vergraben als ich dachte. Aber ich habe mal mit der Bass.Dll getestet, nichts wahrzunehmen bei nur 6 Bytes, also musst du aus dem Telegram(evtl. auch mit dem Vorlauf) selbst ein Signal erstellen. Wenn du dabei Hilfe brauchst, musst du aber Informationen liefern. Wie soll aus den Nullen und Einsen der Ton generiert werden. Gibt es dazu eine Doku oder vergleichbares?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BitBrösel“ ()

    @PhilippHH Denke uns fehlen ganz wichtige Infos um eine genaue Aussage treffen zu können wie Du Dein Problem lösen kannst.

    Was haben wir an Infos: Ein Telegramm ist 48bit groß und hat eine Länge von 255,9ms (mal aufgerundet: 256ms).

    Was fehlt an Infos: Wie wird das zu sendende Telegramm auf der Empängerseite decodiert bzw. wie muss das vom Sender codiert werden? Durchaus möglich das eine 0 einer x-Frequenz und eine 1 einer x-Frequenz entspricht. Auf der Empfängerseite müssen diese x-Frequenzen (Sinus) aber auch wieder als 0 und 1 interpretiert/decodiert werden können. Ist dem so? Vllt wird das Telegramm aber auch einfach nur Plain, als Rechtecksignal gesendet (hört sich wahrscheinlich so an wie gaaaaaanz früher die Modems bei der Einwahl ;) ). Dabei ist es eigentlich egal ob das Signal mit 44,1kHz, 16bit oder weniger erzeugt wird (wobei glaub mindestens die doppelte Abtastrate, für die höchste Frequenz, für Sinus nötig sein muss). Entscheidend ist die Länge in ms die eine 0 oder 1 representiert. Ob nun in Sinus- oder als Rechtecksignal. Dann welcher Value entspricht eine 0 oder 1? -Short\2 bzw. +Short\2 (PCM Wave) oder -1 /+1 (FLOAT Wave) oder oder? Fragen über Fragen von denen wir keine Ahnung haben.
    Mfg -Franky-

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „-Franky-“ ()

    So,

    Ich habe diese Detailierte Technische Richtlinie zu diesen Protokollen gefunden.
    Denke besonders wichtig ist hier die Seite 17 ab Abs.4

    Hier sollten alle wichtigen Infos geschrieben sein..
    Auszug:
    Die zu Übertragenden Informationsinhalte werden auf der Übertragungstrecke in kohärenter Unterträger FSK (Frequenzumtastung 1200/1800 Hz mit 1200bit/s gemäß CCITT-Empfelung
    V 6 gesenden.
    Die dabei ausgesendenten Signale sind nach CCITT V1 für Log 1 = 1200Hz und für Log 0 = 1800 Hz......

    dhpol.de/microsite/pti/medien/…alarm/FMS_06_1999_002.pdf
    Moin zusammen,

    Ich habe eben noch mal etwas rum gebastelt..
    Aber es scheint mir so, als ob ich immer noch kein Stück weiter bin =(

    C#-Quellcode

    1. private void Versuch3()
    2. {
    3. double Ton0 = 1800;
    4. double Ton1 = 1200;
    5. SignalGenerator GeneratorSignal = new SignalGenerator(2000, 2);
    6. GeneratorSignal.Frequency = Ton0;
    7. GeneratorSignal.Gain = 50;
    8. GeneratorSignal.Type = SignalGeneratorType.Sin;
    9. //GeneratorSignal.Type = SignalGeneratorType.Square;
    10. //GeneratorSignal.Type = SignalGeneratorType.Triangle;
    11. //GeneratorSignal.Type = SignalGeneratorType.SawTooth;
    12. WaveOutEvent WOE = new WaveOutEvent();
    13. WOE.Init(GeneratorSignal);
    14. foreach (char c in txtTest.Text)
    15. {
    16. if (c.Equals('0'))
    17. {
    18. GeneratorSignal.Frequency = Ton0;
    19. WOE.Play();
    20. Thread.Sleep(4);
    21. WOE.Stop();
    22. }
    23. else if (c.Equals('1'))
    24. {
    25. GeneratorSignal.Frequency = Ton1;
    26. WOE.Play();
    27. Thread.Sleep(4);
    28. WOE.Stop();
    29. }
    30. }
    31. }


    Zumindest klingt es schonmal twas anders als bei den Versuchen davor.
    Hier kann man immerhin die Art der "Welle" auswählen!