Octave and fractional octave band filters are filters used in a huge amount of acoustic calculations. It is something every acoustician has some implementation of lying somewhere. I want to share my implementation with you! So how to calculate octave band filters?
Octave bands and fractional octave bands are special designed filter based on e.g IEC 61260-1:2014. If you do not want to read my explanation of the filters but just want that awesome Python code to design and use octave filters then skip to the bottom!
The 1/1 octave band and 1/3 fractional octave band is the most used octave band filter designs used in many different acoustic applications to study the frequency spectrum of a sound source or sound field. It is especially used when measuring noise and related acoustic ISO standards.
The octave band filters are designed using specified equations in IEC 61260-1:2014. These equation uses a reference frequency (fm) which is nominal 1000 Hz, the start and stop frequencies of the entire filter bank and the number of bands per octave (b) to calculate edge and center frequencies for each filter. An example of normalized frequencies, can be seen in the table below for: fm=1,000 Hz, start=100 Hz, end=10,000 Hz and b=1
|Left [Hz]||Center [Hz]||Right[Hz]|
This example octave band filter has 7 filters which each must adhere to specific requirements for slope to be named a class 1 or class 2 octave band filter. Class 1 is the must demanding class. On the figure below the requirements for 1 octave band filter at 1000 Hz can be seen.
As stated before each filter must live up to the requirements. The table of center and edge frequencies results in the following 7 filters. The filters are 4th order Butterworth filters as second order systems.
When the filters are designed, data is send through them to get filtered data which can be used to calculate averaged noise leves, impulse responses and much more.
The code contains 4 functions and an example of how to use the functions:
getFrequencies: calculate the filter specifications.
designFilters: design octave band filters.
filterData: filters data using octave filters.
analyseData: calculates RMS levels using octave filters.
To download the Python code to design and use the octave band filters, insert your contact information below and you will receive an email with the code.