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