ANSI S1.11.2004 Octave-Band Filter implementation I am trying to implement some code to firstly generate an Octave-Band and Fractional-Octave Band filter.  I have used MATLAB's octaveFilter method to generate compliant Class-1 and Class-0, 1/1 and 1/3 Octave band filters, but I want to understand how to design these filters from scratch so I can better understand their construction.  Then I want to go on to implement in code.  So the coding environment doesn't matter, but I want to understand the filter construction from the filter definition/algorithm.
My problem is that the documentation for MATLAB's octaveFilter method doesn't explain the algorithm used to create the filters, nor does it explain how the filter is applied to data programmatically.
Can someone please point me to some material that explains how to create these filters, for any centre frequency I choose, and then implement in code?  Many thanks!
That's actually rather simple.
A little bit of trial and error will do the trick. The standard specifies upper and lower limit for the transfer function of the filter. So you can just try a normal Butterworth bandpass and see what happens.
The picture below shows a 3rd octave design at 1kHz and a sample rate of 48 kHz. A 2nd order bandpass isn't quite a good enough for class 1 limits, but a 3rd order does the job just fine. The 4th (and higher) order works as well.
Once you have a design that works at 1kHz, you can apply the same design to every other center frequency as well. At very high frequencies you will see some bilinear frequency distortion. Depending on your application you want to adjust for this or not.
Things to tweak are filter order, filter type and exact location of the corner frequencies. In the example the &quot;nominal&quot; corner frequencies worked just fine.