私はモールスコードのオーディオデコーダを作成し、マイクを通してモールスコードのオーディオ入力を受け、それを英語にデコードして、Pythonを使用します。今私の優先事項は、ディットとダーを認識できることです。の振幅を取得する0.01秒間隔 Pythonを使用したモールスのオーディオデコード
- :コード/ターゲットの
import pyaudio import struct import math from datetime import datetime thresh = 0.002 sample_period = 0.01 RATE = 44100 sample_cycles = int(RATE*sample_period) SHORT_NORMALIZE = (1.0/32768.0) CHANNELS = 2 FORMAT=pyaudio.paInt16 def rms(sample): count = len(sample)/2 format = "%dh"%(count) shorts = struct.unpack(format, sample) sum_squares = 0.0 for i in shorts: n = i * SHORT_NORMALIZE sum_squares += n*n return math.sqrt(sum_squares/count) pa=pyaudio.PyAudio() stream = pa.open(format = FORMAT, channels = CHANNELS, rate = RATE, input = True, frames_per_buffer = sample_cycles) thresh_final=thresh list1="" counter=0 for i in range(1000): try: sample=stream.read(sample_cycles) except IOError: print("Error Recording") amp=rms(sample) if amp>thresh: list1+="1" else: list1+="0" list1=list1.split("0") print(list1) for i in range(len(list1)): if len(list1[i])==45: print ("Dah") elif len(list1[i])==15: print("Dit")
クイック概要:私はデコーダのこの部分にアプローチしようとした方法は以下の通りですサンプルをRMS
- 0.01sサンプルの振幅がビープ音またはノーならば認識できるように設定されている場合、文字列に '1'を追加します。その他 '0'
- 文字列を0からリストに追加します(ビープ音の間のギャップになります)
- サブリストの長さが15の場合は15(15 * 0.01s = 0.15s、これは私が使用している時間ですdahs)プリント「DIT」、そしてあなたが言うことができるように、これは効率的であったので、私はモールス符号オーディオに取り組むことができる方法のように何か提案していないサブリストの長さは= 45印刷「ダー」
場合デコード?別のポストに影響を受け