fix carriers initialization

make sure tested process won't exit before killing it
This commit is contained in:
Roman Zeyde
2014-08-25 17:47:05 +03:00
parent 5bc6a36e12
commit 90fb96daac
4 changed files with 14 additions and 17 deletions

View File

@@ -137,6 +137,10 @@ class MODEM(object):
self.freqs = config.frequencies
self.bits_per_baud = self.qam.bits_per_symbol * len(self.freqs)
self.modem_bps = self.baud * self.bits_per_baud
self.carriers = np.array([
np.exp(2j * np.pi * freq * np.arange(0, Nsym) * Ts)
for freq in self.freqs
])
def power(x):

View File

@@ -1,12 +1,13 @@
import numpy as np
from numpy.linalg import lstsq
from amodem import dsp, config, send
from amodem import dsp, config
import itertools
import random
_constellation = [1, 1j, -1, -1j]
modem = dsp.MODEM(config)
def train_symbols(length, seed=0, Nfreq=config.Nfreq):
@@ -15,7 +16,7 @@ def train_symbols(length, seed=0, Nfreq=config.Nfreq):
return np.array([choose() for i in range(length)])
def modulator(symbols, carriers=send.sym.carrier):
def modulator(symbols, carriers=modem.carriers):
gain = 1.0 / len(carriers)
result = []
for s in symbols:
@@ -34,7 +35,7 @@ def demodulator(signal, size):
def equalize(signal, symbols, order):
Nsym = config.Nsym
Nfreq = config.Nfreq
carriers = send.sym.carrier
carriers = modem.carriers
assert symbols.shape[1] == Nfreq
length = symbols.shape[0]

View File

@@ -17,14 +17,6 @@ from . import ecc
modem = dsp.MODEM(config)
class Symbol(object):
def __init__(self):
t = np.arange(0, config.Nsym) * config.Ts
self.carrier = [np.exp(2j * np.pi * F * t) for F in modem.freqs]
sym = Symbol()
class Writer(object):
def __init__(self):
self.last = time.time()
@@ -55,9 +47,9 @@ def training(fd, c):
def modulate(fd, bits):
symbols_iter = modem.qam.encode(bits)
symbols_iter = itertools.chain(symbols_iter, itertools.repeat(0))
carriers = np.array(sym.carrier) / len(sym.carrier)
carriers = modem.carriers / config.Nfreq
while True:
symbols = itertools.islice(symbols_iter, len(sym.carrier))
symbols = itertools.islice(symbols_iter, config.Nfreq)
symbols = np.array(list(symbols))
writer.write(fd, np.dot(symbols, carriers))
if all(symbols == 0): # EOF marker
@@ -70,8 +62,8 @@ def main(args):
# padding audio with silence
writer.write(args.output, np.zeros(int(config.Fs * args.silence_start)))
start(args.output, sym.carrier[config.carrier_index])
for c in sym.carrier:
start(args.output, modem.carriers[config.carrier_index])
for c in modem.carriers:
training(args.output, c)
training_size = writer.offset
log.info('%.3f seconds of training audio',

View File

@@ -1,7 +1,7 @@
from numpy.linalg import norm
import numpy as np
from amodem import train, dsp, config, send
from amodem import train, dsp, config
from amodem import equalizer
@@ -57,7 +57,7 @@ def test_commutation():
def test_modem():
L = 1000
sent = equalizer.train_symbols(L)
gain = len(send.sym.carrier)
gain = config.Nfreq
x = equalizer.modulator(sent) * gain
received = equalizer.demodulator(x, L)
assert_approx(sent, received)