Thema: Delphi Morsecode erkennen

Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Morsecode erkennen

  Alt 1. Jun 2008, 15:53
Moin.

Für die Analyse von Morse-Code würde ich einen "Sound-Parser" mit Zustandsautomaten verwenden. Die Lexeme sind dann Pausen und Töne in den definierten Längen.

Delphi-Quellcode:
const
  WPM = 10; // words per minute
  DIT = 1200 div WPM; // short tone duration
  DAH = 3 * DIT; // long tone duration
  GAP = DIT; // bit gap
  LGAP = DAH; // letter gap
  WGAP = 7 * DIT; // word gap
  TOL = 0.1; // tolerance 10 percent

type
  TMorseCode = (
    mcSOT, // start of transmission
    mcGAP, // bit gap
    mcLGAP, // letter gap
    mcWGAP, // word gap
    mcDIT, // short tone
    mcDAH, // long tone
    mcEOT // end of transmission
  );
  
function ToneExists: Boolean;
begin
  //
end;
  
function MorseCode(isTone: Boolean; ticks: Cardinal): TMorseCode;
begin
  //
end;

procedure ReadMorseCode;
var
  nStart, nStop: Cardinal;
  wasPausing, isPausing: Boolean;
  mc: TMorseCode;
begin
  nStart := GetTickCount - DIT;
  wasPausing := True;
  mc := mcSOT;
  repeat
    isPausing := not ToneExists;
    if wasPausing xor isPausing then
    begin
      nStop := GetTickCount;
      mc := MorseCode(wasPausing, nStop - nStart);
      DoProcess(mc);
    end else
    if isPausing and ((GetTickCount - nStart) > (10 * WGAP)) then
      mc := mcEOT;
  until mc = mcEOT;
end;
Der Code ist nur eine Skizze und funktioniert so nicht, soll mehr als richtungsweisender Anstoß verstanden werden.

Grüße vom marabu
  Mit Zitat antworten Zitat