Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
  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()
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
Archivo: util.py Proyecto: wyolum/mmM
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)
Ejemplo n.º 7
0
Archivo: util.py Proyecto: wyolum/mmM
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)
Ejemplo n.º 8
0
Archivo: dsp.py Proyecto: mwalde/davepy
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')
Ejemplo n.º 9
0
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')
Ejemplo n.º 10
0
    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))
Ejemplo n.º 11
0
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()
Ejemplo n.º 12
0
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