掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
モールス信号を解読するには? (ID:84243)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>これは信号の打ち方に癖があったり >信号が弱くなったり、速度もばらつきがあったりします。 そこが一番悩ましいところですよね。 境界値をいくつに設定するかは試行錯誤でしかできないと思います。 >こう言うサンプル・データが必要でしょうか? あれば、より手助けできるでしょう。 ただ、Wavファイル扱ったことないので、 正直Txt形式か、 BufferをそのままPutしたような8bitバイナリの形式がいいです。 ざっくり。 Dim Souwa As Long '2乗総和 Dim Flag10 As Boolean 'True = 1 False = 0 Dim ZeroCount As Long '0の連続標本数 Dim OneCount As Long '1の連続標本数 Dim TonTuCount As Long '1文字のトンツー個数 Dim TonTuData() As Boolean '1文字のトンツー Dim GoFlag As Boolean '語の終わりフラグ Dim OutString As String '出力文字 Const Kyoukai As Long = 500 '信号/無信号の境界値 '仮想受信イベント Private Sub Command1_Click() 'WaveBufferSize = 128の場合 'リアルタイム用 '二乗総和を求める Souwa = 0 For i = 0 To 127 Step 8 Souwa = Souwa + (buffer(i) - 1998) ^ 2 Next i '信号部か無信号部かの判断部分 If Souwa > Kyoukai Then '1とみなす '直前の128点が0の場合 If Flag10 = False Then Call TanTyou End If Flag10 = True OneCount = OneCount + 1 Else '0とみなす If Flag10 Then Call TanTyou End If Flag10 = False ZeroCount = ZeroCount + 1 End If End Sub '短点(短ブランク)か長点(長ブランク)か Private Sub TanTyou() 'Flag10の意味が逆になる事に注意!! '分かりずらければ、直前データのフラグを別に用意する事 If Flag10 = False Then ZeroCount = 0 TonTuCount = TonTuCount + 1 ReDim Preserve TonTuData(TonTuCount - 1) As Boolean Select Case OneCount Case Is < 100 'ノイズ ZeroCount = OneCount Flag10 = False Case 101 To 6000 '短点 TonTuData(TonTuCount - 1) = True Case Is > 6001 '長点 TonTuData(TonTuCount - 1) = False End Select OneCount = 0 Else OneCount = 0 Select Case ZeroCount Case Is < 10 'ノイズ? '文字と文字の間隔は3点分 '語と語の間隔は、5点(7点)分 'これ以外の間隔って決まってないの? OneCount = ZeroCount Flag10 = True Case 11 To 6000 '短点1つ分のブランク '何もしない Case 6001 To 18000 '短点3つ分のブランク Call MojiHandan Case Is > 18001 '短点5つ分のブランク( GoFlag = True Call MojiHandan End Select ZeroCount = 0 GoFlag = False End If End Sub '文字を判断する Private Sub MojiHandan() Select Case TonTuCount Case 1 Call Moji1 Case 2 Call Moji2 '以下同じように Case 6 Call Moji6 End Select '語の区切りではスペースを挿入ひとつ開ける If GoFlag Then OutString = OutString & " " End If TonTuCount = 0 Erase TonTuData End Sub '1つのトンツー信号で構成される文字 Private Sub Moji1() If TonTuData(0) Then OutString = "E" '・ Else OutString = "T" '− End If End Sub '2つのトンツー信号で構成される文字 Private Sub Moji2() If TonTuData(0) Then If TonTuData(1) Then OutString = "I" '・・ Else OutString = "A" '・− End If Else If TonTuData(1) Then OutString = "N" '−・ Else OutString = "M" '−− End If End If End Sub
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.