From: Paul Brossier Date: Sun, 4 Nov 2018 20:00:31 +0000 (+0100) Subject: [py] improve style for demo_filterbank.py X-Git-Tag: 0.4.8~76 X-Git-Url: https://git.aubio.org/?a=commitdiff_plain;h=eff63abd5449fe93479fffaa883003c4882cf893;p=aubio.git [py] improve style for demo_filterbank.py --- diff --git a/python/demos/demo_filterbank.py b/python/demos/demo_filterbank.py index 54aff573..ec29d114 100755 --- a/python/demos/demo_filterbank.py +++ b/python/demos/demo_filterbank.py @@ -1,30 +1,44 @@ #! /usr/bin/env python -from aubio import filterbank, fvec -from pylab import loglog, show, xlim, ylim, xlabel, ylabel, title -from numpy import vstack, arange +"""Create a filterbank from a list of frequencies. -win_s = 2048 +This demo uses `aubio.filterbank.set_triangle_bands` to build a set of +triangular filters from a list of frequencies. + +The filterbank coefficients are then modified before being displayed.""" + +import aubio +import numpy as np +import matplotlib.pyplot as plt + +# sampling rate and size of the fft samplerate = 48000 +win_s = 2048 +# define a list of custom frequency freq_list = [60, 80, 200, 400, 800, 1600, 3200, 6400, 12800, 24000] +# number of filters to create n_filters = len(freq_list) - 2 -f = filterbank(n_filters, win_s) -freqs = fvec(freq_list) +# create a new filterbank +f = aubio.filterbank(n_filters, win_s) +freqs = aubio.fvec(freq_list) f.set_triangle_bands(freqs, samplerate) +# get the coefficients from the filterbank coeffs = f.get_coeffs() -coeffs[4] *= 5. - +# apply a gain to fifth band +coeffs[4] *= 6. +# load the modified coeffs into the filterbank f.set_coeffs(coeffs) -times = vstack([arange(win_s // 2 + 1) * samplerate / win_s] * n_filters) -title('Bank of filters built using a simple list of boundaries\nThe middle band has been amplified by 2.') -loglog(times.T, f.get_coeffs().T, '.-') -xlim([50, samplerate/2]) -ylim([1.0e-6, 2.0e-2]) -xlabel('log frequency (Hz)') -ylabel('log amplitude') - -show() +# display the band gains in a loglog plot +freqs = np.vstack([np.arange(win_s // 2 + 1) * samplerate / win_s] * n_filters) +plt.title('filterbank built from a list of frequencies\n' + 'The 5th band has been amplified by a factor 6.') +plt.loglog(freqs.T, f.get_coeffs().T, '.-') +plt.xlim([50, samplerate/2]) +plt.ylim([1.0e-6, 2.0e-2]) +plt.xlabel('log frequency (Hz)') +plt.ylabel('log amplitude') +plt.show()