Skip to content

GraphicEQBand

Overview

Single band of a cascade graphic equalizer

Discussion

This module implements a single stage of a graphic equalizer. The stage provides boost or cut over a specified frequency range. A multistage graphic EQ subsystem is constructed as a series cascade of these modules. The multistage graphic EQ is contained within graphic_eq_fract32_subsystem.m. This module is typically not used directly; use the graphic_eq_fract32_subsystem.m instead.

The variables .lowerEdge and .upperEdge specify the range of frequencies, in Hz, over which the filter is effective. The variable .gain specifies the boost or cut in dB.

The design of the module is based upon the paper "Graphic Equalizer Design User Higher-Order Recursive Filters" by Holters and Zoelzer. The order of the filter of either 4, 8, or 12 is specified upon instantiation. Higher order filters provide sharper cutoffs at the expense of additional computation. As a rule of thumb, you can use 4th order filters until you have approximately 5 filter bands, 8th order filters until you have 15 filter bands, and 12th order filters for up to 31 bands. The order of the filter can only be set at instantiation time.

Internally, the filter is implemented as a cascade of second order biquad sections.

Module Pack

Standard

ClassID

classID = 16

Type Definition

typedef struct _ModuleGraphicEQBand
{
ModuleInstanceDescriptor instance;            // Common Audio Weaver module instance structure
FLOAT32 gain;                                 // Gain in the center of the band, in dB.
FLOAT32 lowerEdge;                            // Lower frequency edge of the band, in Hz.
FLOAT32 upperEdge;                            // Upper frequency edge of the band, in Hz.
FLOAT32 smoothingTime;                        // Time constant of the smoothing process.
INT32 numStages;                              // Number of 2nd order stages in the filter.
FLOAT32 smoothingCoeff;                       // Smoothing coefficient.
FLOAT32* targetCoeffs;                        // Target coefficient array.
FLOAT32* currentCoeffs;                       // Current coefficient array after smoothing.
FLOAT32* state;                               // State variable array with 4 values per stage per channel.
void * hardware_specific_struct_pointer;      // Usually NULL, but for optimizations that use 3rd party optimizations (like ne10), this may point to the required instance structure
} ModuleGraphicEQBandClass;

Variables

Properties

Name Type Usage isHidden Default Value Range Units
gain float parameter 0 0 -12:0.1:12 dB
lowerEdge float parameter 0 100 20:20000 Hz
upperEdge float parameter 0 500 20:20000 Hz
smoothingTime float parameter 0 20 0:1000 msec
numStages int const 0 4 Unrestricted
smoothingCoeff float derived 1 0.03278 Unrestricted
targetCoeffs float* parameter 1 [5 x 4] Unrestricted
currentCoeffs float* parameter 1 [5 x 4] Unrestricted
state float* state 1 [8 x 1] Unrestricted
hardware_specific_struct_pointer void * state 1 Unrestricted

Pins

Input Pins

Name in
Description audio input
Data type float
Channel range Unrestricted
Block size range Unrestricted
Sample rate range Unrestricted
Complex support Real

Output Pins

Name out
Description audio output
Data Type float

Matlab Usage

File Name: graphic_eq_band_module.m 
 M=graphic_eq_band_module(NAME, ORDER) 
 Implements a single band of a cascade graphic equalizer. This module 
 forms part of the overall graphic_eq_subsystem. 

 Arguments: 
    NAME - name of the module. 
    ORDER - filter order of the stage. This must be either 4, 8, or 12. 
         By default, ORDER=8. 

Copyright (c) 2026 DSP Concepts, Inc.