Source code for tftb.generators.tests.test_analytic_signals
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2015 jaidev <jaidev@newton>
#
# Distributed under terms of the MIT license.
"""Tests for the analytic_signals module."""
import unittest
import numpy as np
from scipy import angle, unwrap
from scipy.stats import mode
from tftb.tests.test_base import TestBase
from tftb.generators import analytic_signals as ana
[docs]class TestAnalyticSignals(TestBase):
[docs] def test_anaask(self):
"""Test analytic ASK signal."""
signal, amlaw = ana.anaask(512, 64, 0.05)
self.assert_is_analytic(signal, amlaw)
np.testing.assert_allclose(np.abs(signal), amlaw)
[docs] def test_anabpsk(self):
"""Test analytic BPSK signal."""
signal, amlaw = ana.anabpsk(300, 30, 0.1)
self.assertCountEqual(np.unique(amlaw), [-1, 1])
self.assert_is_analytic(signal)
[docs] def test_anafsk(self):
"""Test analytic phase shift keying."""
signal, iflaw = ana.anafsk(512, 64, 3)
self.assert_is_analytic(signal)
[docs] def test_anapulse(self):
"""Test analytic unit impulse."""
signal = ana.anapulse(512, 301)
recons = np.zeros((512,))
recons[301] = 1
np.testing.assert_allclose(recons, np.real(signal), rtol=1e-5,
atol=1e-5)
[docs] def test_anaqpsk(self):
"""Test quaternary PSK signal."""
signal, phases = ana.anaqpsk(512, 64, 0.25)
self.assert_is_analytic(signal)
# Count discontinuities in the signal and the phases and assert that
# they appear in the same locations
uphase = unwrap(angle(signal))
dphase = np.diff(uphase)
base_value = mode(dphase)[0][0]
signal_phase_change = np.abs(dphase - base_value) > 0.0001
ideal_phase_change = np.diff(phases) != 0
np.testing.assert_allclose(signal_phase_change, ideal_phase_change)
[docs] def test_anastep(self):
"""Test analytic unit step signal."""
signal = ana.anastep(256, 128)
recons = np.zeros((256,), dtype=float)
recons[129:] = 1.0
np.testing.assert_allclose(recons, np.real(signal), rtol=1e-5,
atol=1e-5)
[docs] def test_anasing(self):
"""Test the analytic singularity signal."""
signal = ana.anasing(128)
self.assert_is_analytic(signal, amlaw=np.abs(signal))
if __name__ == '__main__':
unittest.main()