コード例 #1
0
def sequence_to_HdW(sequence,
                    return_magnitude=True,
                    return_w=True,
                    plot_magnitude=False):
    """
    Purpose: To find the values of the DTFT on the unit circle
    for a given sequence
    
    """
    if type(sequence) == pu.Polynomial1D or type(sequence) == pu.Polynomial:
        P1 = sequence
    else:
        P1 = pu.Polynomial1D(sequence)

    w = np.linspace(-pi, pi, 10000)
    unit_circle_values = np.array([exp(1j * wi) for wi in w])
    #plt.scatter(np.real(unit_circle_values),np.imag(unit_circle_values))
    Hd_w_values = np.array([P1.evaluate(zi) for zi in unit_circle_values])

    if return_magnitude:
        Hd_w_values = Hdw_to_magnitude(Hd_w_values)

    if plot_magnitude:
        plot_Hdw_magnitude(Hd_w_values, w=w)

    if return_w:
        return Hd_w_values, w
    else:
        return Hd_w_values
コード例 #2
0
def sequence_to_Hdw_at_specific_ws(sequence,
                                   ws,
                                   return_magnitude=True,
                                   verbose=False):
    """
    To turn a radians/sample frequency
    into the DTFT value on the unit circle
    
    """
    if not nu.is_array_like(ws):
        ws = [ws]
        singular_flag = True
    else:
        singular_flag = False

    P1 = pu.Polynomial1D(sequence)
    hdw = [P1.evaluate(exp(1j * w)) for w in ws]

    if return_magnitude:
        hdw = np.abs(hdw)

    if verbose:
        for hd, w in zip(hdw, ws):
            print(f"For {w}: Hd(ejw) = {hd}")

    if singular_flag:
        return hdw[0]
    else:
        return hdw
コード例 #3
0
def sequence_to_plot_roots(sequence,
                           plot_unit_circle=False,
                           set_zoom_to_unit_circle=False):
    """
    Purpose: Will plot the roots of a sequence
    
    """
    sequence = pu.Polynomial1D(sequence)
    mu.plot_real_imaginary(sequence.roots, show_at_end=False)

    ax = plt.gca()
    if plot_unit_circle:
        unit_circle_values = np.array(
            [exp(1j * k) for k in np.linspace(0, 2 * pi, 1000)])
        circle_real = np.real(unit_circle_values)
        circle_imag = np.imag(unit_circle_values)
        ax.plot(circle_real, circle_imag)

    if set_zoom_to_unit_circle:
        delta = 0.2
        ax.set_xlim([-1 - delta, 1 + delta])
        ax.set_ylim([-1 - delta, 1 + delta])

    plt.show()