# What is the frequency step formula for 10 and 31 band EQs?

What is the formula to calculate the bands ranges of a graphical EQ on a mixer?

``````20, 25, 31.5, 40, 50, 63, 80, 100, 125, 160, 200, 250, 315, 400Hz ... etc
``````

It seems some of them are doubles. When does it change from double ranges to decade ranges?

Alternatively could some kind should give me a list of frequency ranges on a 10 band equalizer and then a 31 band equalizer and I can work it out?

The standard ISO for a 31 band Eq is as follows HZ:20/25/31.5/40/50/63/80/100/125/160/200/250/315/400/500/630/800/1K/1.25K/1.6K/ 2K/ 2.5K/3.15K/4K/5K/6.3K/8K/10K/12.5K/16K/20K.

But I think that this wasn’t the question, the question was how to calculate it, right?

First, every octave doubles or divides per two a chosen frequency.

Let’s take as a reference 400 Hz, the upper octave of this frequency is 800, and the lower 200. Let’s assume that you want a 1/3 octave Eq: 800Hz-400Hz=400Hz;

Then 400Hz/3 = 133.33^Hz This means that the frequencies would be: 400/ 533.33^ (400+133.33^)/ 666.66^ (400+133.33^x2)/ 799.99^ (400+133.33^x3)

And for the lower octave 400-200=200; 200/3=66.66^; So: 200/ 266.66/333.3266/399.99

Notice that standard ISO has rounded those numbers 200/250/315/400

If you want an 1/12 octave for the frequencies among 400 and 800, then 400/12=33.33^ Then: 400/433.33^/466.66^/etc. and then rounded.

Notice also that the upper octave of 16K is 32K, so out of human range. I hope it helps. Regards.

• This won't give you evenly spaced bands; the ratio between 400 Hz and 533 Hz is bigger than the ratio between 667 Hz and 800 Hz. ISO certainly didn't get the number 315 by rounding 333. Commented Jun 19, 2017 at 16:50
• Not sure why this answer has been so well received. The method shown is doing linear interpolation on a geometric scale. It also doesn't explain how to get from the (incorrect) theoretical values to the ISO values. Commented Jun 16 at 6:04

Yes, they double in frequency for each step. Seems like 10band eq's tend to start at 32hz and double through to 16k

Like this:

It's also nice to have a chart like this to put it in perspective:

If you can't make that out here is the link . So actually those frequencies are between B and C for most octaves.

If you do an image search for 31 band eq you will find a load of pictures of hardware eq's with the frequency bands marked on them.

A 31-band EQ uses bands that are 1/3 of an octave apart.

A 10-band EQ uses bands (frequencies) an octave apart.

An octave is a 2:1 ratio between frequencies (doubling).

This is a standardized form that was specified by ISO (International Standards Organisation).

for 1/3 octave steps, multiply the previous band by 2^(1/3) (that's 2 to the power of 1/3 = 1.259921049895). Starting with 20Hz, you'll get 20,25.198,31.748,40,50.397,etc, up to 20480. The 'standard' frequency bands for a 1/3 octave (20,25,31.5,40,50,63,etc) are essentially just for labelling - any practical application would use the calculated frequencies to ensure each band is spaced exactly 1/3 octave apart.

This is some code that I wrote for GNU Octave that calculates the lower cutoff, center frequency, and upper cutoff. From what I understand it should be close or identical to code that would run in MATLAB. Basically a notes perceived pitch is directly proportional to the logarithm of it's frequency. The idea is to pick frequencies so that the difference of the logarithms of two adjacent frequencies are constant throughout the spectrum you want to equalize. It's pretty well commented so even if you don't know Octave you should be able to pick it up.

Edit: I went ahead and made an account but can't comment in reply to n00dles because some kind of reputation thing.

Anyway you're close, n00dles. The difference is my code wants the entire frequency range you want to equalize while the nominal frequency of 20Hz and 20kHz are the center frequencies of the lowest band and the highest band. So since each band is 1/3 of an octave wide, that means the -3dB cutoff of each band is 1/6 of an octave from the center frequency. So the low frequency cutoff for the 20Hz band is 2^(-1/6) * 20Hz = 17.818Hz and the upper cutoff frequency is 2^(1/6)*20kHz = 22.449kHz. So in order to reproduce the ISO 31 band frequencies, you should use log_eq_bands(17.818, 22449, 31).

Yes this means a 31 band equalizer is equalizing sounds you can't hear. Putting the center frequencies at the edges of the audible range allows you to have a flat response over the audible range. A filter has -3db at the cutoff frequency so if that cutoff frequency was at 20Hz, you would have that much attenuation by the time you reached the bottom of the audible spectrum.

I'll go ahead and list the frequencies. Note There seems to be some floating point round off error occurring after the 4th significant figure, so I'll give 5. That's still more than what they put on equalizers. 19.999, 25.170, 31.687, 39.893, 50.224, 63.229, 79.603, 100.22, 126.17 158.84, 1.9997, 251.76, 316.95, 399.03, 502.36, 632.46, 796.23, 1002.4, 1262.0, 1588.8, 2000.3, 2518.2, 3170.4, 3991.3, 5024.9, 6326.2, 7964.4, 10027, 12623, 15892, 20008.

As you can see these numbers match up really well when you round them. There's a .04% error at both the 20Hz, and 20kHz bands which I assume we know with absolute precision. So I would feel safe trusting these figures to be accurate within 0.1%. That's 0.1442% of an octave or 1.73% of a half step on the chromatic scale.

I release this code under the WTFPL License. If you want to credit someone call me bollocks.

``````##This function is used to design an audio equalizer. The user determines the
##frequency range they want the equalizer to handle and how many bands they want
##the equalizer to have.  The function then calculates the upper and lower cut-off
##frequency for each band as well as the middle, a.k.a. nominal frequency.

##The lower bound of the frequencies the user wants the equalizer to handle is
##given in the parameter lowerFreq and the upper bound is similarly given in the
##upperFreq parameter.  The number of bands desired is given in the parameter
##numBands.  These must all be real positive scalars.  numBands will be cast as a 32-
##bit integer if it is not already an integer because fractional bands don't make sense

##The output is a matrix with three rows and a number of columns equal to numBands
##bands(1,:) is the list of lower cut off frequencies.
##bands(2,:) is the list of nominal(center) frequencies
##bands(3,:) is the list of upper cut off frequencies
##This function is intended to be used to design equalizers for audio use so the
##equalizer bands are chosen so the center frequencies sound like the difference
##in pitch is constant.  This means
##diff(log(bands(1,:))) == diff(log(bands(2,:))) == diff(log(bands(3,:))) == K
##where K is a constant the upper cut-off frequency of one band will equal the
##lower cut-off frequency of the band above it. ex: bands(1,n+1) == bands(3,n)
##as long as n is an integer such that numBands > n > 0
##the cut off frequencies are designed to sound like they have a pitch in the middle
##of the pitches of the nominal frequencies adjacent to them
##ex: (log(bands(2,n)) + log(bands(2, n+1))) / 2 == log(bands(3,n)) == log(bands(1,n))

function bands = log_eq_bands(lowerFreq, upperFreq, numBands)
bands = 0;
##check for valid inputs
if(nargin() != 3)
print_usage ("get_equalizer_bands(start_freq, end_freq, numBands)");
elseif(!(isreal(lowerFreq) && isscalar(lowerFreq)))
print_usage("lowerFreq must be a real positive scalar numeric.");
elseif(!(isreal(upperFreq) && isscalar(upperFreq)))
print_usage("upperFreq must be a real positive scalar numeric.");
elseif(!(isscalar(numBands) && isreal(numBands) && numBands > 0))
print_usage("numBands must be a real positive scalar numeric.");
elseif(lowerFreq >= upperFreq)
usage("upperFreq must be greater than lowerFreq.");
elseif(lowerFreq <= 0)
usage("lowerFreq must be a positive scalar numeric.");
else
#cast numBands as an integer if it isn't one already
if(!isinteger(numBands))
numBands = cast(numBands, "int32");
endif
##cast frequencies as doubles so we know what precision the following calculations
##are going to be
lowerFreq = cast(lowerFreq, "double");
upperFreq = cast(upperFreq, "double");
##create a bunch of frequencies that are spaced logarithmically
##since every band has a lower, center,and upper frequency and shares the upper
##and lower with the adjacent band, then we need 3 frequencies for the first band
##and 2 for each additional band
frequencies = logspace(log10(lowerFreq), log10(upperFreq), (numBands*2 + 1));
##assign every other frequency to a lower cut-off frequency output
bands(1, 1:numBands) = frequencies(1:2:(columns(frequencies) - 2));
##assign every other freuquency to a nominal frequency output after skipping the first
bands(2, 1:numBands) = frequencies(2:2:(columns(frequencies) - 1));
##assign every other frequency to a upper cut-off frequency output after
##skipping the first two
bands(3, 1:numBands) = frequencies(3:2:(columns(frequencies)));
endif
endfunction
``````

For a 31-band equalizer, the formula for the nth band appears to be 10^((n+12)/10) Hz. If you take these numbers, and round the 3rd digit from the left to 0 or 5, the first few frequencies you get are:

• 1 - 20 Hz
• 2 - 25 Hz
• 3 - 31.5 Hz
• 4 - 40 Hz
• 5 - 50 Hz
• 6 - 63 Hz
• 7 - 79.5 Hz
• 8 - 100 Hz
• 9 - 125 Hz
• 10 - 160 Hz
• 11 - 200 Hz
• 12 - 250 Hz

These frequencies exactly match the ones in your question, except that the standard apparently uses 80 Hz instead of 79.5 Hz. The leading digits repeat every 10 steps, so band 13 is 315 Hz, and band 23 is 3,150 Hz.

It seems some of them are doubles. When does it change from double ranges to decade ranges?

There is no change-over point. The scale is 10-based, not 2-based, throughout the entire range. Each step is one decibel of frequency (so 10 steps make a factor of 10).

It just so happens, though, that one decibel of frequency is 0.3322 octaves, or almost exactly one third of an octave. This is why the scale approximately doubles every 3 steps.

I know it's an older question, but this site provides a guaranteed answer for those sorts of questions:

http://www.sengpielaudio.com/calculator-octave.htm

As its index is rather chaotic, the best I found way to actually find the information you're looking for is to google for the term you want to know more about, and add "sengpiel" to the search terms. So in this case, I googled for "sengpiel third octave" (without the quotes).

``````hi_freq = 20000
low_freq = 20

-- number of octaves between hi freq and low freq
octaves = log(hi_freq/low_freq)/log(2)

-- number of cursors in a graphic equalizer
n_band = 10

-- frequencies of a 10 band equalizer
freq_1 = low_freq * (2^(octaves/n_band))^1
freq_2 = low_freq * (2^(octaves/n_band))^2
freq_3 = low_freq * (2^(octaves/n_band))^3
freq_4 = low_freq * (2^(octaves/n_band))^4
freq_5 = low_freq * (2^(octaves/n_band))^5
freq_6 = low_freq * (2^(octaves/n_band))^6
freq_7 = low_freq * (2^(octaves/n_band))^7
freq_8 = low_freq * (2^(octaves/n_band))^8
freq_9 = low_freq * (2^(octaves/n_band))^9
freq_10 = hi_freq = low_freq * (2^(octaves/10))^10
``````

The origins of the standard frequency-band labels on a graphic EQ are a bit complex, dating back to a military balloon engineer named Col. Charles Renard in the 1870s.

But it's ultimately based on dividing the audio spectrum into 1/3-octave bands, starting at 1 kHz and working upward and downward from there. So each center frequency differs from its neighbors by a factor of 2^(1/3).

If you happen to speak Python, the expression below will give you the actual (mathematical) center frequencies from ~20Hz (which is 17 bands below the starting point of 1kHz) to ~20kHz (which is 14 bands above):

`[round(1000 * 2 ** (k / 3), 1) for k in range(-17, 14)]`

This gives:

[19.7, 24.8, 31.2, 39.4, 49.6, 62.5, 78.7, 99.2, 125.0, 157.5, 198.4, 250.0, 315.0, 396.9, 500.0, 630.0, 793.7, 1000.0, 1259.9, 1587.4, 2000.0, 2519.8, 3174.8, 4000.0, 5039.7, 6349.6, 8000.0, 10079.4, 12699.2, 16000.0, 20158.7]

...which is pretty close to the labels on the equipment. The integer octaves in particular are spot-on (except for those below 100Hz, which run into precision issues). Again, these are mathematically correct values, and are, I believe, what the audio engineers strive to implement when designing a graphic EQ.

So where do the label values come from? This brings us back to Renard the balloon guy. While standardizing balloon-rope lengths, he came up with a method for generating sequences of "preferred numbers", which came to be known as "Renard series", and which were eventually standardized by the ISO. In a similar manner to the division of octaves above, each Renard series divides a decade into a fixed number of steps, each step related to its neighbors by a constant factor. That factor is the nth root of 10, where n is the number of steps in the series. Commonly used Renard series include R5 (based on the 5th root of 10), R10 (10th root of 10), R20 (20th root), and R40 (40th).

The R5 series consists of the powers of the 5th root of 10. For the first decade these are (rounded) `[1.0, 1.6, 2.5, 4.0, 6.3]` (these may already be starting to look familiar). The series continues into higher decades by multiplying the initial series by the appropriate power of 10. The R10 series is derived similarly: `[1, 1.25, 1.6, 2.0, 2.5, 3.15, 4.0, 5.0, 6.3, 8.0]`.

The R10 series is the best match for our purpose, being the smallest set with sufficiently fine divisions. Taking the first few decades of that series, and rounding each computed center frequency to the nearest member of that series yields the set of values that appear on the face of an EQ. QED I guess.

A bit of trivia tangentially related to this: the reason why audio engineers "strive" to hit certain center frequencies is that they are limited in their selection of values for the capacitors and resistors needed to tune the circuits. These values are based on similar geometric series called E series, E3, E6, E12, etc., the number indicating the number of steps in a decade. Capacitor voltage ratings use the R series we've been discussing here.

There's an interesting article on preferred numbers in general here. The relevant ISO standard can be found here.

TL;DR The band centers are calculated, then each is rounded to the closest member of a set of standard values.

The Serge modular has a 10 band EQ which has an irregular spacing between the bands. The idea is that it won't emphasize a particular note or key in the same way an octave or 1/3 octave eq would (although I suspect it may have also been to do with using easily available component values).

f=previous_freq * 2^(1/3) for 1/3 octaves

• This could stand a lot of elaboration. Does that calculate 10 bands or 31 or something else? How does one to the other (asker asked about both 10 and 31 band EQs)? Where does this formula come from? Commented Feb 23, 2016 at 19:00
• I think this is wrong as a simple equation. As a more explanative answer, It has already been given.
– n00dles
Commented Feb 23, 2016 at 21:40