mirror of
https://github.com/romanz/amodem.git
synced 2026-03-31 08:06:50 +08:00
refactor QAM object into MODEM
This commit is contained in:
@@ -5,6 +5,9 @@ from amodem import dsp
|
||||
from amodem import config
|
||||
from amodem import sampling
|
||||
|
||||
import random
|
||||
import itertools
|
||||
|
||||
|
||||
def test_linreg():
|
||||
x = np.array([1, 3, 2, 8, 4, 6, 9, 7, 0, 5])
|
||||
@@ -63,3 +66,35 @@ def test_demux():
|
||||
res = dsp.Demux(sampling.Sampler(sig.real), freqs)
|
||||
res = np.array(list(res))
|
||||
assert np.max(np.abs(res - syms)) < 1e-12
|
||||
|
||||
|
||||
def test_qam():
|
||||
q = dsp.MODEM(config.symbols)
|
||||
r = random.Random(0)
|
||||
m = q.bits_per_symbol
|
||||
bits = [tuple(r.randint(0, 1) for j in range(m)) for i in range(1024)]
|
||||
stream = itertools.chain(*bits)
|
||||
S = list(q.encode(list(stream)))
|
||||
decoded = list(q.decode(S))
|
||||
assert decoded == bits
|
||||
|
||||
noise = lambda A: A*(r.uniform(-1, 1) + 1j*r.uniform(-1, 1))
|
||||
noised_symbols = [(s + noise(1e-3)) for s in S]
|
||||
decoded = list(q.decode(noised_symbols))
|
||||
assert decoded == bits
|
||||
|
||||
|
||||
def quantize(q, s):
|
||||
bits, = list(q.decode([s]))
|
||||
r, = q.encode(bits)
|
||||
index = np.argmin(np.abs(s - q.symbols))
|
||||
expected = q.symbols[index]
|
||||
assert r == expected
|
||||
|
||||
|
||||
def test_overflow():
|
||||
q = dsp.MODEM(config.symbols)
|
||||
r = np.random.RandomState(seed=0)
|
||||
for i in range(10000):
|
||||
s = 10*(r.normal() + 1j * r.normal())
|
||||
quantize(q, s)
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
import random
|
||||
import itertools
|
||||
|
||||
import numpy as np
|
||||
|
||||
from amodem import qam
|
||||
from amodem import config
|
||||
|
||||
|
||||
def test_qam():
|
||||
q = qam.QAM(config.symbols)
|
||||
r = random.Random(0)
|
||||
m = q.bits_per_symbol
|
||||
bits = [tuple(r.randint(0, 1) for j in range(m)) for i in range(1024)]
|
||||
stream = itertools.chain(*bits)
|
||||
S = list(q.encode(list(stream)))
|
||||
decoded = list(q.decode(S))
|
||||
assert decoded == bits
|
||||
|
||||
noise = lambda A: A*(r.uniform(-1, 1) + 1j*r.uniform(-1, 1))
|
||||
noised_symbols = [(s + noise(1e-3)) for s in S]
|
||||
decoded = list(q.decode(noised_symbols))
|
||||
assert decoded == bits
|
||||
|
||||
|
||||
def quantize(q, s):
|
||||
bits, = list(q.decode([s]))
|
||||
r, = q.encode(bits)
|
||||
index = np.argmin(np.abs(s - q.symbols))
|
||||
expected = q.symbols[index]
|
||||
assert r == expected
|
||||
|
||||
|
||||
def test_overflow():
|
||||
q = qam.QAM(config.symbols)
|
||||
r = np.random.RandomState(seed=0)
|
||||
for i in range(10000):
|
||||
s = 10*(r.normal() + 1j * r.normal())
|
||||
quantize(q, s)
|
||||
Reference in New Issue
Block a user