Matt Owen

source code for "files/strings/110_hz/Computer Power Spectrum and Output Data.py"

return to portfolio
  1.  from pylab import *
  2.  import scikits.audiolab as al
  3.  #import csv
  4.  
  5.  # save_file_as_graph
  6.  def plot_from_file(file_no, clear_plot=True, color='k'):
  7.   #
  8.   channel_1 = time_array = None
  9.   snd, samp_freq, nbits = al.wavread(file_no+'.wav')
  10.  
  11.   #
  12.   channel_1 = snd[:,0]
  13.  
  14.   #
  15.   n, p = len(channel_1), fft(channel_1)
  16.   n_unique_pts = ceil((n+1)/2.)
  17.  
  18.   #
  19.   p = abs(p[0:n_unique_pts])
  20.   p = p/float(n)
  21.   p = p**2
  22.  
  23.   #
  24.   if n % 2 > 0: p[1:len(p)] = p[1:len(p)] * 2
  25.   else: p[1:len(p)-1] = p[1:len(p)-1] * 2
  26.  
  27.   #
  28.   scale = float(samp_freq)/n
  29.   freq_array = arange(0, n_unique_pts, 1.0) * scale/110
  30.  
  31.   #
  32.   if clear_plot: clf()
  33.   x_axis = freq_array[100/scale:1100/scale]
  34.   y_axis = 10*log10(p[100/scale:1100/scale]/10**-12)
  35.   plot(x_axis, y_axis, color=color)
  36.  
  37.   #
  38.   xlabel('n-th Harmonic (frequency/110)')
  39.   ylabel('POWER (dB)')
  40.  
  41.   return x_axis, y_axis
  42.  
  43.  # actual program start!!
  44.  file_nos = raw_input("list of files to write = ").split(' ')
  45.  
  46.  lis = []
  47.  x_axis = []
  48.  csv = open('all_data.csv', 'w')
  49.  
  50.  print >> csv, 'harmonic,power'
  51.  # writer = csv.writer(open('all_data.csv', 'w'), delimiter=',', lineterminator='\n')
  52.  # writer.writerow(["harmonic", "power"])
  53.  
  54.  
  55.  # create individual files
  56.  for file_no in file_nos:
  57.   # get processed data
  58.   x_axis, y_axis = plot_from_file(file_no, clear_plot=True)
  59.  
  60.   # image plotter
  61.   if len(lis) == 0: lis = y_axis
  62.   else:
  63.   for i in range(len(y_axis)): lis[i] += y_axis[i]
  64.  
  65.   savefig(file_no+'.png')
  66.  
  67.   # csv file writer
  68.   for n in range(len(x_axis)):
  69.   fl = floor(2*x_axis[n])/2.
  70.   if x_axis[n] - fl < 0.03:
  71.   #print "%s,%s" % (fl, y_axis[n])
  72.   print >> csv, "%s,%s" % (fl, y_axis[n])
  73.  
  74.  
  75.  
  76.  lis = lis/len(file_nos)
  77.  clf()
  78.  
  79.  
  80.  csv.close()
  81.  
  82.  # create complete
  83.  for file_no in file_nos: plot_from_file(file_no, clear_plot=False, color='#59aa9a')
  84.  plot(x_axis, lis, color='k', lw=2.5)
  85.  savefig('complete.png')