def mfreqz(self, b,a=1): ''' plotting freqz of filter , like matlab representation. :param b: nominator :param a: denominator default: a = 1 ''' from matplotlib import pyplot as plt from pylab import unwrap, arctan2, imag, real, log10 w, h = signal.freqz(b,a) h_dB = 20 * log10(abs(h)) plt.subplot(211) plt.plot(w/max(w), h_dB) plt.grid() plt.ylim(-150, 5) plt.ylabel('Magnitude (db)') plt.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') plt.title(r'Frequency response') plt.subplot(212) h_Phase = unwrap(arctan2(imag(h),real(h))) plt.plot(w/max(w),h_Phase) plt.grid() plt.ylabel('Phase (radians)') plt.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') plt.title(r'Phase response') plt.subplots_adjust(hspace=0.5) plt.show(block=False)
def update_design(self): ax = self.ax ax.cla() ax2 = self.ax2 ax2.cla() wp = self.wp ws = self.ws gpass = self.gpass gstop = self.gstop b, a = ss.iirdesign(wp, ws, gpass, gstop, ftype=self.ftype, output='ba') self.a = a self.b = b #b = [1,2]; a = [1,2] #Print this on command line so we can use it in our programs print 'b = ', pylab.array_repr(b) print 'a = ', pylab.array_repr(a) my_w = pylab.logspace(pylab.log10(.1*self.ws[0]), 0.0, num=512) #import pdb;pdb.set_trace() w, h = freqz(b, a, worN=my_w*pylab.pi) gp = 10**(-gpass/20.)#Go from db to regular gs = 10**(-gstop/20.) self.design_line, = ax.plot([.1*self.ws[0], self.ws[0], wp[0], wp[1], ws[1], 1.0], [gs, gs, gp, gp, gs, gs], 'ko:', lw=2, picker=5) ax.semilogx(w/pylab.pi, pylab.absolute(h),lw=2) ax.text(.5,1.0, '{:d}/{:d}'.format(len(b), len(a))) pylab.setp(ax, 'xlim', [.1*self.ws[0], 1.2], 'ylim', [-.1, max(1.1,1.1*pylab.absolute(h).max())], 'xticklabels', []) ax2.semilogx(w/pylab.pi, pylab.unwrap(pylab.angle(h)),lw=2) pylab.setp(ax2, 'xlim', [.1*self.ws[0], 1.2]) ax2.set_xlabel('Normalized frequency') pylab.draw()
def plot_phase_response(b,a=1): w,h = scipy.signal.freqz(b,a) h_Phase = pylab.unwrap(numpy.arctan2(numpy.imag(h),numpy.real(h))) pylab.plot(w/max(w),h_Phase) pylab.ylabel('Phase (radians)') pylab.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') pylab.title(r'Phase response') pylab.subplots_adjust(hspace=0.5)
def plot_phase_response(b, a=1): w, h = scipy.signal.freqz(b, a) h_Phase = pylab.unwrap(numpy.arctan2(numpy.imag(h), numpy.real(h))) pylab.plot(w / max(w), h_Phase) pylab.ylabel('Phase (radians)') pylab.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') pylab.title(r'Phase response') pylab.subplots_adjust(hspace=0.5)
def plot_upd_mfreqz(self, fig, taps, a=1): if not signal: return self.plot_init_mfreqz(fig) ax1, ax2 = fig.get_axes() w, h = signal.freqz(taps, a) if sum(abs(h)) == 0: return h_dB = 20 * pylab.log10(abs(h)) ax1.plot(w / max(w), h_dB) h_Phase = pylab.unwrap(pylab.arctan2(pylab.imag(h), pylab.real(h))) ax2.plot(w / max(w), h_Phase)
def mfreqz(b,a=1): ''' #Plot frequency and phase response from http://mpastell.com/2010/01/18/fir-with-scipy/ ''' w,h = signal.freqz(b,a) h_dB = 20 * log10 (abs(h)) pylab.subplot(211) pylab.plot(w/max(w),h_dB) pylab.ylim(-150, 5) pylab.ylabel('Magnitude (db)') pylab.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') pylab.title(r'Frequency response') pylab.subplot(212) h_Phase = pylab.unwrap(arctan2(imag(h),real(h))) pylab.plot(w/max(w),h_Phase) pylab.ylabel('Phase (radians)') pylab.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') pylab.title(r'Phase response') pylab.subplots_adjust(hspace=0.5)
def mfreqz(b, a=1): ''' #Plot frequency and phase response from http://mpastell.com/2010/01/18/fir-with-scipy/ ''' w, h = signal.freqz(b, a) h_dB = 20 * log10(abs(h)) pylab.subplot(211) pylab.plot(w / max(w), h_dB) pylab.ylim(-150, 5) pylab.ylabel('Magnitude (db)') pylab.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') pylab.title(r'Frequency response') pylab.subplot(212) h_Phase = pylab.unwrap(arctan2(imag(h), real(h))) pylab.plot(w / max(w), h_Phase) pylab.ylabel('Phase (radians)') pylab.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') pylab.title(r'Phase response') pylab.subplots_adjust(hspace=0.5)
def view_filter(h, fp=None, fs=None): '''view filter''' w, H = signal.freqz(h, 1) H_phase = pl.unwrap([pl.degrees(cmath.phase(H[i])) for i in range(len(H))], 180) H = 20 * pl.log10(abs(H[:])) x = range(0, len(h)) step = pl.cumsum(h) pl.figure(figsize=(16, 6.6), dpi=80) pl.subplot(221) pl.stem(x, h) pl.ylabel('Amplitude') pl.xlabel(r'n (samples)') pl.title(r'Impulse response') pl.text(0.2, 0.7, 'N_taps = {0}'.format(len(h))) pl.subplot(222) pl.stem(x, step) pl.ylabel('Amplitude') pl.xlabel(r'n (samples)') pl.title(r'Step response') pl.subplot(223) pl.plot(w / (2.0 * pl.pi), H) pl.ylabel('Magnitude (db)') pl.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') pl.title(r'Frequency response') if fp != None: pl.axvline(fp, linewidth=1, color='k', ls='-') if fs != None: pl.axvline(fs, linewidth=1, color='k', ls='-') pl.subplot(224) pl.plot(w / (2.0 * pl.pi), H_phase) pl.ylabel('Phase (radians)') pl.xlabel(r'Normalized Frequency (Hz)') pl.title(r'Phase response')
def view_filter(h, fp=None, fs=None): '''view filter''' w, H = signal.freqz(h,1) H_phase = pl.unwrap([pl.degrees(cmath.phase(H[i])) for i in range(len(H))], 180) H = 20 * pl.log10 (abs(H[:])) x = range(0,len(h)) step = pl.cumsum(h) pl.figure(figsize=(16, 6.6), dpi=80) pl.subplot(221) pl.stem(x, h) pl.ylabel('Amplitude') pl.xlabel(r'n (samples)') pl.title(r'Impulse response') pl.text(0.2, 0.7, 'N_taps = {0}'.format(len(h))) pl.subplot(222) pl.stem(x, step) pl.ylabel('Amplitude') pl.xlabel(r'n (samples)') pl.title(r'Step response') pl.subplot(223) pl.plot(w/(2.0*pl.pi), H) pl.ylabel('Magnitude (db)') pl.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') pl.title(r'Frequency response') if fp != None: pl.axvline(fp, linewidth=1, color='k', ls='-') if fs != None: pl.axvline(fs, linewidth=1, color='k', ls='-') pl.subplot(224) pl.plot(w/(2.0*pl.pi), H_phase) pl.ylabel('Phase (radians)') pl.xlabel(r'Normalized Frequency (Hz)') pl.title(r'Phase response')
def _calculatefdData(self,tdData): #no need to copy it before (access member variable is ugly but shorter) #calculate the fft of the X channel fd=py.fft(tdData.getEX()) #calculate absolute and phase values fdabs=abs(fd) fdph=abs(py.unwrap(py.angle(fd))) #calculate frequency axis dfreq=py.fftfreq(tdData.num_points,tdData.dt) #extrapolate phase to 0 and 0 frequency fdph=self.removePhaseOffset(dfreq,fdph) #set up the fdData array t=py.column_stack((dfreq,fd.real,fd.imag,fdabs,fdph)) #this is so not nice! self.fdData=t unc=self.calculateFDunc() t=self.getcroppedData(t,0,unc[-1,0]) #interpolate uncertainty intpunc=interp1d(unc[:,0],unc[:,1:],axis=0) unc=intpunc(t[:,0]) return py.column_stack((t,unc))
plt.grid(True) w,h= sg.freqz(nmrz,dmrz,worN=512) plt.plot((w/np.pi)*nyq_rate, np.absolute(h), linewidth=2) plt.xlabel('Frequency (Hz)') plt.ylabel('Gain') plt.title('Frequency Response') plt.ylim(-0.05, 1.05) # Upper inset plot. ax1 = plt.axes([0.44, 0.56, .45, .25]) plt.plot((w/np.pi)*nyq_rate, np.absolute(h), linewidth=2) plt.xlim(4000.0,15000.0) plt.ylim(-0.01, 0.2) plt.grid(True) # Lower inset plot. ax1 = plt.axes([0.44, 0.22, .45, .25]) plt.plot((w/np.pi)*nyq_rate, np.absolute(h), linewidth=2) plt.xlim(4000.0,15000.0) plt.ylim(0.96, 1.05) plt.grid(True) plt.figure(3) plt.grid(True) h_Phase = pl.unwrap(np.arctan2(np.imag(h),np.real(h))) plt.plot(w/max(w),h_Phase) plt.ylabel('Phase (radians)') plt.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') plt.title(r'Phase response') plt.show()
h_fir = h_ideal*h_kaiser #+ term=True print "FIR Filter Coefficients:\n",h_fir #+ term=False #' # Plot the FIR filter coefficients plt.figure(1) plt.grid(True) plt.title('Filter Coefficients (%d taps)' % (2*N+1)) plt.plot(h_fir, 'bs-', linewidth=3) #' # Plot frequency response plt.figure(2) plt.clf() plt.grid(True) w,h= sg.freqz(h_fir) plt.plot((w/np.pi)*f_sampling*0.5, np.absolute(h), linewidth=2) plt.xlabel('Frequency (Hz)') plt.ylabel('Gain') plt.title('Frequency Response') plt.show() #' # Plot phase response plt.figure(3) plt.grid(True) # Take tan inverse to find the phase plot hPhase = pylab.unwrap(np.arctan2(np.imag(h),np.real(h))) plt.plot(w/max(w),hPhase,linewidth=2) plt.ylabel('Phase (radians)') plt.xlabel(r'Normalized Frequency (x$\pi$rad/sample)') plt.title(r'Phase response') #http://www.labbookpages.co.uk/audio/firWindowing.html