Showing the changes to python (1 of 1 file). Show all
Unified · Split
| @@ -1,30 +1,44 @@ | ||
| 1 | 1 | #! /usr/bin/env python |
| 2 | 2 | |
| 3 | −from aubio import filterbank, fvec | |
| 4 | −from pylab import loglog, show, xlim, ylim, xlabel, ylabel, title | |
| 5 | −from numpy import vstack, arange | |
| 3 | +"""Create a filterbank from a list of frequencies. | |
| 6 | 4 | |
| 7 | −win_s = 2048 | |
| 5 | +This demo uses `aubio.filterbank.set_triangle_bands` to build a set of | |
| 6 | +triangular filters from a list of frequencies. | |
| 7 | + | |
| 8 | +The filterbank coefficients are then modified before being displayed.""" | |
| 9 | + | |
| 10 | +import aubio | |
| 11 | +import numpy as np | |
| 12 | +import matplotlib.pyplot as plt | |
| 13 | + | |
| 14 | +# sampling rate and size of the fft | |
| 8 | 15 | samplerate = 48000 |
| 16 | +win_s = 2048 | |
| 9 | 17 | |
| 18 | +# define a list of custom frequency | |
| 10 | 19 | freq_list = [60, 80, 200, 400, 800, 1600, 3200, 6400, 12800, 24000] |
| 20 | +# number of filters to create | |
| 11 | 21 | n_filters = len(freq_list) - 2 |
| 12 | 22 | |
| 13 | −f = filterbank(n_filters, win_s) | |
| 14 | −freqs = fvec(freq_list) | |
| 23 | +# create a new filterbank | |
| 24 | +f = aubio.filterbank(n_filters, win_s) | |
| 25 | +freqs = aubio.fvec(freq_list) | |
| 15 | 26 | f.set_triangle_bands(freqs, samplerate) |
| 16 | 27 | |
| 28 | +# get the coefficients from the filterbank | |
| 17 | 29 | coeffs = f.get_coeffs() |
| 18 | −coeffs[4] *= 5. | |
| 19 | − | |
| 30 | +# apply a gain to fifth band | |
| 31 | +coeffs[4] *= 6. | |
| 32 | +# load the modified coeffs into the filterbank | |
| 20 | 33 | f.set_coeffs(coeffs) |
| 21 | 34 | |
| 22 | −times = vstack([arange(win_s // 2 + 1) * samplerate / win_s] * n_filters) | |
| 23 | −title('Bank of filters built using a simple list of boundaries\nThe middle band has been amplified by 2.') | |
| 24 | −loglog(times.T, f.get_coeffs().T, '.-') | |
| 25 | −xlim([50, samplerate/2]) | |
| 26 | −ylim([1.0e-6, 2.0e-2]) | |
| 27 | −xlabel('log frequency (Hz)') | |
| 28 | −ylabel('log amplitude') | |
| 29 | − | |
| 30 | −show() | |
| 35 | +# display the band gains in a loglog plot | |
| 36 | +freqs = np.vstack([np.arange(win_s // 2 + 1) * samplerate / win_s] * n_filters) | |
| 37 | +plt.title('filterbank built from a list of frequencies\n' | |
| 38 | + 'The 5th band has been amplified by a factor 6.') | |
| 39 | +plt.loglog(freqs.T, f.get_coeffs().T, '.-') | |
| 40 | +plt.xlim([50, samplerate/2]) | |
| 41 | +plt.ylim([1.0e-6, 2.0e-2]) | |
| 42 | +plt.xlabel('log frequency (Hz)') | |
| 43 | +plt.ylabel('log amplitude') | |
| 44 | +plt.show() | |