Source code for torchsig.signals.builders.constellation_maps

"""Constellation Maps"""

import numpy as np


[docs] def remove_corners(const): """Removes corners from 'cross' modulations. The function is applied during the formation of the 32-QAM, 128-QAM and 512-QAM constellations in order to remove the corners to produce a cross or plus shape constellation. Returns: list[float]: A symbol map (list of symbols) without corners """ spacing = 2.0 / (np.sqrt(len(const)) - 1) cutoff = spacing * (np.sqrt(len(const)) / 6 - 0.5) return [ p for p in const if np.abs(np.real(p)) < 1.0 - cutoff or np.abs(np.imag(p)) < 1.0 - cutoff ]
# retains all of the symbol maps for QAM/PSK/ASK/OOK modulations all_symbol_maps = { "ook": np.add(*map(np.ravel, np.meshgrid(np.linspace(0, 1, 2), 0j))), "bpsk": np.add(*map(np.ravel, np.meshgrid(np.linspace(-1, 1, 2), 0j))), "qpsk": np.add( *map(np.ravel, np.meshgrid(np.linspace(-1, 1, 2), 1j * np.linspace(-1, 1, 2))) ), "8psk": np.exp(2j * np.pi * np.linspace(0, 7, 8) / 8.0), "16psk": np.exp(2j * np.pi * np.linspace(0, 15, 16) / 16.0), "32psk": np.exp(2j * np.pi * np.linspace(0, 31, 32) / 32.0), "64psk": np.exp(2j * np.pi * np.linspace(0, 63, 64) / 64.0), "4ask": np.add(*map(np.ravel, np.meshgrid(np.linspace(-1, 1, 4), 0j))), "8ask": np.add(*map(np.ravel, np.meshgrid(np.linspace(-1, 1, 8), 0j))), "16ask": np.add(*map(np.ravel, np.meshgrid(np.linspace(-1, 1, 16), 0j))), "32ask": np.add(*map(np.ravel, np.meshgrid(np.linspace(-1, 1, 32), 0j))), "64ask": np.add(*map(np.ravel, np.meshgrid(np.linspace(-1, 1, 64), 0j))), "16qam": np.add( *map(np.ravel, np.meshgrid(np.linspace(-1, 1, 4), 1j * np.linspace(-1, 1, 4))) ), "32qam": np.add( *map(np.ravel, np.meshgrid(np.linspace(-1, 1, 4), 1j * np.linspace(-1, 1, 8))) ), "64qam": np.add( *map(np.ravel, np.meshgrid(np.linspace(-1, 1, 8), 1j * np.linspace(-1, 1, 8))) ), "256qam": np.add( *map( np.ravel, np.meshgrid(np.linspace(-1, 1, 16), 1j * np.linspace(-1, 1, 16)), ) ), "1024qam": np.add( *map( np.ravel, np.meshgrid(np.linspace(-1, 1, 32), 1j * np.linspace(-1, 1, 32)), ) ), "32qam_cross": remove_corners( np.add( *map( np.ravel, np.meshgrid(np.linspace(-1, 1, 6), 1j * np.linspace(-1, 1, 6)), ) ) ), "128qam_cross": remove_corners( np.add( *map( np.ravel, np.meshgrid(np.linspace(-1, 1, 12), 1j * np.linspace(-1, 1, 12)), ) ) ), "512qam_cross": remove_corners( np.add( *map( np.ravel, np.meshgrid(np.linspace(-1, 1, 24), 1j * np.linspace(-1, 1, 24)), ) ) ), }