def zplane(self, a, b): # Fix axes ax = plt.gca() ax.spines['left'].set_position('zero') ax.spines['bottom'].set_position('zero') ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) # Draw circle circle = patches.Circle((0, 0), radius=1, color='black', ls='dashed', fill=False) ax.add_patch(circle) # Make a and b of equal length a = numpy.append(a, numpy.repeat(0, max(len(a), len(b)) - len(a))) b = numpy.append(b, numpy.repeat(0, max(len(a), len(b)) - len(b))) # Plot poles p = numpy.roots(a) plt.plot(p.real, p.imag, 'kx', ms=7) # Plot zeros z = numpy.roots(b) plt.plot(z.real, z.imag, 'ko', ms=7) plt.axis('scaled') plt.show()
def stepz(self, signal_in, a, b): step = numpy.repeat(0., len(signal_in)) step[numpy.where(signal_in >= 0)] = 1. response = signal.lfilter(b, a, step) return response
def impz(self, signal_in, a, b): impulse = numpy.repeat(0., len(signal_in)) impulse[numpy.where(signal_in == 1)] = 1. response = signal.lfilter(b, a, impulse) return response