mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
adjusted morse module
This commit is contained in:
parent
b2a068dbfe
commit
4a47c3f58c
3 changed files with 26 additions and 37 deletions
42
modem/cw.py
42
modem/cw.py
|
@ -6,8 +6,10 @@ import numpy as np
|
|||
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class MorseCodePlayer:
|
||||
def __init__(self, wpm=150, f=1500, fs=48000):
|
||||
def __init__(self, wpm=25, f=1500, fs=48000):
|
||||
self.wpm = wpm
|
||||
self.f0 = f
|
||||
self.fs = fs
|
||||
|
@ -39,28 +41,26 @@ class MorseCodePlayer:
|
|||
signal = np.array([], dtype=np.int16)
|
||||
for char in morse:
|
||||
if char == '.':
|
||||
duration = int(self.dot_duration * self.fs)
|
||||
s = np.sin(2 * np.pi * self.f0 * np.arange(duration) / self.fs)
|
||||
signal = np.concatenate((signal, s * 32767))
|
||||
pause_duration = int(self.pause_duration * self.fs)
|
||||
signal = np.concatenate((signal, np.zeros(pause_duration, dtype=np.int16)))
|
||||
duration = self.dot_duration # Using class-defined duration
|
||||
t = np.linspace(0, duration, int(self.fs * duration), endpoint=False)
|
||||
s = 0.5 * np.sin(2 * np.pi * self.f0 * t)
|
||||
signal = np.concatenate((signal, np.int16(s * 32767)))
|
||||
pause_samples = int(self.pause_duration * self.fs)
|
||||
signal = np.concatenate((signal, np.zeros(pause_samples, dtype=np.int16)))
|
||||
|
||||
elif char == '-':
|
||||
duration = int(self.dash_duration * self.fs)
|
||||
s = np.sin(2 * np.pi * self.f0 * np.arange(duration) / self.fs)
|
||||
signal = np.concatenate((signal, s * 32767))
|
||||
pause_duration = int(self.pause_duration * self.fs)
|
||||
signal = np.concatenate((signal, np.zeros(pause_duration, dtype=np.int16)))
|
||||
duration = self.dash_duration # Using class-defined duration
|
||||
t = np.linspace(0, duration, int(self.fs * duration), endpoint=False)
|
||||
s = 0.5 * np.sin(2 * np.pi * self.f0 * t)
|
||||
signal = np.concatenate((signal, np.int16(s * 32767)))
|
||||
pause_samples = int(self.pause_duration * self.fs)
|
||||
signal = np.concatenate((signal, np.zeros(pause_samples, dtype=np.int16)))
|
||||
|
||||
elif char == ' ':
|
||||
pause_duration = int(self.word_pause_duration * self.fs)
|
||||
signal = np.concatenate((signal, np.zeros(pause_duration, dtype=np.int16)))
|
||||
pause_duration = int(self.pause_duration * self.fs)
|
||||
signal = np.concatenate((signal, np.zeros(pause_duration, dtype=np.int16)))
|
||||
|
||||
pause_duration = int(self.word_pause_duration * self.fs)
|
||||
#signal = np.concatenate((signal, np.zeros(pause_duration, dtype=np.int16)))
|
||||
|
||||
# Convert the signal to mono (single-channel)
|
||||
#signal = signal.reshape(-1, 1)
|
||||
pause_samples = int(self.word_pause_duration * self.fs)
|
||||
signal = np.concatenate((signal, np.zeros(pause_samples, dtype=np.int16)))
|
||||
pause_samples = int(self.pause_duration * self.fs)
|
||||
signal = np.concatenate((signal, np.zeros(pause_samples, dtype=np.int16)))
|
||||
|
||||
return signal
|
||||
|
||||
|
|
|
@ -2856,9 +2856,7 @@ class DATA:
|
|||
self.enqueue_frame_for_tx([cq_frame], c2_mode=FREEDV_MODE.fsk_ldpc_0.value)
|
||||
else:
|
||||
self.enqueue_frame_for_tx([cq_frame], c2_mode=FREEDV_MODE.sig0.value, copies=1, repeat_delay=0)
|
||||
# FIXME Remove or change this in later versions for full CW support
|
||||
# Modem.transmitting = True
|
||||
# modem.MODEM_TRANSMIT_QUEUE.put(["morse", 1, 0, "123"])
|
||||
#modem.MODEM_TRANSMIT_QUEUE.put(["morse", 1, 0, self.mycallsign])
|
||||
|
||||
def received_cq(self, data_in: bytes) -> None:
|
||||
"""
|
||||
|
|
|
@ -29,7 +29,7 @@ import structlog
|
|||
import ujson as json
|
||||
import tci
|
||||
# FIXME used for def transmit_morse
|
||||
# import cw
|
||||
import cw
|
||||
from queues import DATA_QUEUE_RECEIVED, MODEM_RECEIVED_QUEUE, MODEM_TRANSMIT_QUEUE, RIGCTLD_COMMAND_QUEUE, \
|
||||
AUDIO_RECEIVED_QUEUE, AUDIO_TRANSMIT_QUEUE, MESH_RECEIVED_QUEUE
|
||||
|
||||
|
@ -745,18 +745,7 @@ class RF:
|
|||
)
|
||||
start_of_transmission = time.time()
|
||||
|
||||
txbuffer = cw.MorseCodePlayer().text_to_signal("DJ2LS-1")
|
||||
print(txbuffer)
|
||||
print(type(txbuffer))
|
||||
x = np.frombuffer(txbuffer, dtype=np.int16)
|
||||
print(type(x))
|
||||
txbuffer_out = x
|
||||
print(txbuffer_out)
|
||||
|
||||
#if not HamlibParam.hamlib_radiocontrol in ["tci"]:
|
||||
# txbuffer_out = self.resampler.resample8_to_48(x)
|
||||
#else:
|
||||
# txbuffer_out = x
|
||||
txbuffer_out = cw.MorseCodePlayer().text_to_signal("DJ2LS-1")
|
||||
|
||||
self.mod_out_locked = True
|
||||
self.enqueue_modulation(txbuffer_out)
|
||||
|
@ -808,6 +797,8 @@ class RF:
|
|||
self.log.debug("[MDM] ON AIR TIME", time=transmission_time)
|
||||
|
||||
def enqueue_modulation(self, txbuffer_out):
|
||||
|
||||
|
||||
chunk_length = self.AUDIO_FRAMES_PER_BUFFER_TX # 4800
|
||||
chunk = [
|
||||
txbuffer_out[i: i + chunk_length]
|
||||
|
|
Loading…
Reference in a new issue