Module rpps.viz.plots.eye

Functions

def I(ax, eye_list)
Expand source code
def I(ax, eye_list):
    if ax is None:
        fig, ax = plt.subplots()
    x_len = eye_list.shape[1]
    x = np.arange(0, x_len)/(x_len-1) - 0.5
    if isinstance(ax, list):
        for idx, syms in enumerate(eye_list):
            ax[idx].set_data(x, syms.real)
        lines = ax
    else:
        lines = []
        for syms in eye_list:
            line, = ax.plot(x, syms.real, "-", c="r", alpha=0.2)
            lines.append(line)
        ax.grid(True)
        ax.set_xlabel("Time [Fm]")
        ax.set_ylabel("Amplitude")
        ax.set_xlim(-0.5, 0.5)
        ax.set_ylim(1.2, -1.2)
    return lines
def IQ(ax, syms, sps)
Expand source code
def IQ(ax, syms, sps):
    if ax is None:
        fig, ax = plt.subplots(2,1)

    eye_list = get_eye(syms, sps)

    I(ax[0], eye_list)
    Q(ax[1], eye_list)

    ax[0].set_title(f"Eye Diagram")
    ax[0].set_title("Time Domain", loc="left")
    ax[0].set_title(f"{len(syms)/sps} symbols", loc="right")
    return
def Q(ax, eye_list)
Expand source code
def Q(ax, eye_list):
    if ax is None:
        fig, ax = plt.subplots()
    x_len = eye_list.shape[1]
    x = np.arange(0, x_len)/(x_len-1) - 0.5
    if isinstance(ax, list):
        for idx, syms in enumerate(eye_list):
            ax[idx].set_data(x, syms.real)
        lines = ax
    else:
        lines = []
        for syms in eye_list:
            line, = ax.plot(x, syms.imag, "-", c="b", alpha=0.2)
            lines.append(line)
        ax.grid(True)
        ax.set_xlabel("Time [Fm]")
        ax.set_ylabel("Amplitude")
        ax.set_xlim(-0.5, 0.5)
        ax.set_ylim(1.2, -1.2)
    return lines
def get_eye(syms, sps)
Expand source code
def get_eye(syms, sps):
    num_snip = len(syms)//(sps)
    x_len = sps+1
    snip = syms / np.real(np.max(syms))
    mesh = np.zeros((num_snip, x_len), dtype=syms.dtype)
    for i in range(sps, len(snip), sps):
        sym_snip = snip[i-(sps//2):i+(sps//2)+1]
        mesh[i//sps] = sym_snip
    return mesh