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
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
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()