J'ai essayé de créer un décodeur audio Morse Code pour un moment maintenant, qui prendrait une entrée audio Morse Code via un micro et le décoder en anglais, en utilisant python. En ce moment ma priorité est de pouvoir reconnaître les dits et les dahs. La façon dont j'ai essayé d'aborder cette partie du décodeur est la suivante:Morse Audio décodage en utilisant 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")
Résumé rapide du Code/Cible:
- Prélevez un échantillon audio à intervalles 0,01 s
- Obtenez l'amplitude l'échantillon via RMS
- Si l'amplitude des échantillons 0,01s est supérieure à un seuil (définie juste pour reconnaître s'il y a un bip ou non), ajoutez '1' à une chaîne sinon '0'
- Ensuite, divisez le chaîne dans une liste à travers les zéros (car ce seront les intervalles entre les bips)
- Parcourez la liste si la longueur des sous-listes = 15 (15 * 0.01s = 0.15s, qui est le temps que j'utilise pour le dAHS) print « dit », et si la longueur des sous-listes = 45 print « dah »
Comme vous pouvez le dire cela n'a pas été efficace, donc des suggestions quant à la façon dont je pourrais aborder son code Morse décodage?
code Influencé par un autre poste: Detect tap with pyaudio from live mic