title: How to implement a FIR high pass filter in Python?
body: <p>First of all I asked this question in Stack Exchange and I am getting only concept related answers and not implementation oriented. So, my problem is I am trying to create high pass filter and I implemented using Python.</p>
  
  <pre><code>from numpy import cos, sin, pi, absolute, arange
  from scipy.signal import kaiserord, lfilter, firwin, freqz, firwin2
  from pylab import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show
  
  # Nyquist rate.
  nyq_rate = 48000 / 2
  # Width of the roll-off region.
  width = 500 / nyq_rate
  # Attenuation in the stop band.
  ripple_db = 12.0
  num_of_taps, beta = kaiserord(ripple_db, width)
  # Cut-off frequency.
  cutoff_hz = 5000.0
  # Estimate the filter coefficients.
  if num_of_taps % 2 == 0:
      num_of_taps = num_of_taps + 1
  taps = firwin(num_of_taps, cutoff_hz/nyq_rate, window=('kaiser', beta), pass_zero='highpass')
  w, h = freqz(taps, worN=1024)
  plot((w/pi)*nyq_rate, absolute(h), linewidth=2)
  xlabel('Frequency (Hz)')
  ylabel('Gain')
  title('Frequency Response')
  ylim(-0.05, 1.05)
  grid(True)
  show()
  </code></pre>
  
  <p>By looking at the frequency response I am not getting the stop band attenuation as expected. I want 12dB attenuation and I am not getting that. What am I doing wrong?</p>