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?

10 Answers 10


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.

  • 2
    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. Jun 19, 2017 at 16:50

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:

alt text

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

alt text

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.


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


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). alt text


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.");
    #cast numBands as an integer if it isn't one already
      numBands = cast(numBands, "int32");
    ##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)));
  • Thanks for sharing, but it doesn't seem to answer the question specifically. Would log_eq_bands(20, 20000, 31) return frequencies that resemble the OP's example of nominal frequencies? I +1'd though because it's a nice example of EQ band calculation code.
    – n00dles
    Mar 7, 2016 at 20:46
  • Ok I get it. I only just saw the edit, by chance.
    – n00dles
    Apr 21, 2016 at 16:40

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.

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 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? 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
    Feb 23, 2016 at 21:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.