<!--
{
  "documentType" : "article",
  "framework" : "Accelerate",
  "identifier" : "/documentation/Accelerate/multichannel-biquadratic-filters",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Multichannel biquadratic filters"
}
-->

# Multichannel biquadratic filters

Filter a multichannel signal with a cascade of biquadratic sections.

## Discussion

The vDSP library implements biquadratic filtering as a cascade of individual infinite impulse response (IIR) filters called *sections.* Each section has its own set of feedback and feedforward coefficients, and implements a direct-form 2 filter.

When the biquadratic filter function executes, the sections execute in sequence. Each section processes the entire input signal and passes its output to the next section for further processing.

> Note:
> The vDSP biquadratic filters work in place. That is, the source and destination pointers may point to the same memory.

> Note on performance and energy efficiency:
> Although you can use <doc://com.apple.documentation/documentation/kernel/1579994-vdsp_biquadm> to process a single channel of data, it’s optimized for processing multiple channels of data independently. When processing only a single channel, the single-channel API ``doc://com.apple.accelerate/documentation/Accelerate/vDSP_biquad`` may provide better performance and energy efficiency. When processing a single channel in isolation, it’s best practice to use ``doc://com.apple.accelerate/documentation/Accelerate/vDSP_biquad`` whenever possible.

## Topics

### Equalizing audio with biquadratic filters

  <doc://com.apple.accelerate/documentation/Accelerate/equalizing-audio-with-discrete-cosine-transforms-dcts>

### Creating a multichannel biquadratic filter setup

[`extern vDSP_biquadm_SetupvDSP_biquadm_CreateSetup(const double *__coeffs, vDSP_Length __M, vDSP_Length __N);`](/documentation/Accelerate/vDSP_biquadm_CreateSetup)

Builds a data structure that contains precalculated data for use by a single-precision, multichannel cascaded biquadratic filter function.

[`typealias vDSP_biquadm_Setup`](/documentation/Accelerate/vDSP_biquadm_Setup)

A data structure that contains precalculated data for use by a single-precision, multichannel cascaded biquadratic filter function.

[`extern vDSP_biquadm_SetupDvDSP_biquadm_CreateSetupD(const double *__coeffs, vDSP_Length __M, vDSP_Length __N);`](/documentation/Accelerate/vDSP_biquadm_CreateSetupD)

Builds a data structure that contains precalculated data for use by a double-precision, multichannel cascaded biquadratic filter function.

[`typealias vDSP_biquadm_SetupD`](/documentation/Accelerate/vDSP_biquadm_SetupD)

A data structure that contains precalculated data for use by a double-precision, multichannel cascaded biquadratic filter function.

### Copying the filter state of a multichannel biquadratic filter

[`extern void vDSP_biquadm_CopyState(vDSP_biquadm_Setup __dest, const struct vDSP_biquadm_SetupStruct *__src);`](/documentation/Accelerate/vDSP_biquadm_CopyState)

Copies the filter state from one single-precision multichannel biquadratic IIR filter object to another.

[`extern void vDSP_biquadm_CopyStateD(vDSP_biquadm_SetupD __dest, const struct vDSP_biquadm_SetupStructD *__src);`](/documentation/Accelerate/vDSP_biquadm_CopyStateD)

Copies the filter state from one double-precision multichannel biquadratic IIR filter object to another.

### Resetting the filter state of a multichannel biquadratic filter

[`extern void vDSP_biquadm_ResetState(vDSP_biquadm_Setup __setup);`](/documentation/Accelerate/vDSP_biquadm_ResetState)

Resets the filter state of a single-precision multichannel biquadratic IIR filter object.

[`extern void vDSP_biquadm_ResetStateD(vDSP_biquadm_SetupD __setup);`](/documentation/Accelerate/vDSP_biquadm_ResetStateD)

Resets the filter state of a double-precision multichannel biquadratic IIR filter object.

### Setting the filter state of a multichannel biquadratic filter

[`extern void vDSP_biquadm_SetActiveFilters(vDSP_biquadm_Setup __setup, const _Bool *__filter_states);`](/documentation/Accelerate/vDSP_biquadm_SetActiveFilters)

Activates or deactivates individual sections in a single-precision, multichannel biquadratic filter.

[`extern void vDSP_biquadm_SetActiveFiltersD(vDSP_biquadm_SetupD __setup, const _Bool *__filter_states);`](/documentation/Accelerate/vDSP_biquadm_SetActiveFiltersD)

Activates or deactivates individual sections in a double-precision, multichannel biquadratic filter.

### Setting the coefficients of a multichannel biquadratic filter

[`extern void vDSP_biquadm_SetCoefficientsSingle(vDSP_biquadm_Setup __setup, const float *__coeffs, vDSP_Length __start_sec, vDSP_Length __start_chn, vDSP_Length __nsec, vDSP_Length __nchn);`](/documentation/Accelerate/vDSP_biquadm_SetCoefficientsSingle)

Sets the single-precision coefficients of the specified single-precision, multichannel biquadratic filter setup object.

[`extern void vDSP_biquadm_SetCoefficientsDouble(vDSP_biquadm_Setup __setup, const double *__coeffs, vDSP_Length __start_sec, vDSP_Length __start_chn, vDSP_Length __nsec, vDSP_Length __nchn);`](/documentation/Accelerate/vDSP_biquadm_SetCoefficientsDouble)

Sets the double-precision coefficients of the specified single-precision, multichannel biquadratic filter setup object.

[`extern void vDSP_biquadm_SetCoefficientsSingleD(vDSP_biquadm_SetupD __setup, const float *__coeffs, vDSP_Length __start_sec, vDSP_Length __start_chn, vDSP_Length __nsec, vDSP_Length __nchn);`](/documentation/Accelerate/vDSP_biquadm_SetCoefficientsSingleD)

Sets the single-precision coefficients of the specified double-precision, multichannel biquadratic filter setup object.

[`extern void vDSP_biquadm_SetCoefficientsDoubleD(vDSP_biquadm_SetupD __setup, const double *__coeffs, vDSP_Length __start_sec, vDSP_Length __start_chn, vDSP_Length __nsec, vDSP_Length __nchn);`](/documentation/Accelerate/vDSP_biquadm_SetCoefficientsDoubleD)

Sets the double-precision coefficients of the specified double-precision, multichannel biquadratic filter setup object.

### Setting the target values of a multichannel biquadratic filter

[`extern void vDSP_biquadm_SetTargetsSingle(vDSP_biquadm_Setup __setup, const float *__targets, float __interp_rate, float __interp_threshold, vDSP_Length __start_sec, vDSP_Length __start_chn, vDSP_Length __nsec, vDSP_Length __nchn);`](/documentation/Accelerate/vDSP_biquadm_SetTargetsSingle)

Sets the single-precision coefficient target values of the specified single-precision, multichannel biquadratic filter setup object.

[`extern void vDSP_biquadm_SetTargetsDouble(vDSP_biquadm_Setup __setup, const double *__targets, float __interp_rate, float __interp_threshold, vDSP_Length __start_sec, vDSP_Length __start_chn, vDSP_Length __nsec, vDSP_Length __nchn);`](/documentation/Accelerate/vDSP_biquadm_SetTargetsDouble)

Sets the double-precision coefficient target values of the specified single-precision, multichannel biquadratic filter setup object.

[`extern void vDSP_biquadm_SetTargetsSingleD(vDSP_biquadm_SetupD __setup, const float *__targets, double __interp_rate, double __interp_threshold, vDSP_Length __start_sec, vDSP_Length __start_chn, vDSP_Length __nsec, vDSP_Length __nchn);`](/documentation/Accelerate/vDSP_biquadm_SetTargetsSingleD)

Sets the single-precision coefficient target values of the specified double-precision, multichannel biquadratic filter setup object.

[`extern void vDSP_biquadm_SetTargetsDoubleD(vDSP_biquadm_SetupD __setup, const double *__targets, double __interp_rate, double __interp_threshold, vDSP_Length __start_sec, vDSP_Length __start_chn, vDSP_Length __nsec, vDSP_Length __nchn);`](/documentation/Accelerate/vDSP_biquadm_SetTargetsDoubleD)

Sets the double-precision coefficient target values of the specified double-precision, multichannel biquadratic filter setup object.

### Applying a multichannel biquadratic filter

[`extern void vDSP_biquadm(vDSP_biquadm_Setup __Setup, const float **__X, vDSP_Stride __IX, float **__Y, vDSP_Stride __IY, vDSP_Length __N);`](/documentation/Accelerate/vDSP_biquadm)

Applies a single-precision multichannel biquadratic IIR filter.

[`extern void vDSP_biquadmD(vDSP_biquadm_SetupD __Setup, const double **__X, vDSP_Stride __IX, double **__Y, vDSP_Stride __IY, vDSP_Length __N);`](/documentation/Accelerate/vDSP_biquadmD)

Applies a double-precision multichannel biquadratic IIR filter.

### Destroying a multichannel biquadratic filter setup

[`extern void vDSP_biquadm_DestroySetup(vDSP_biquadm_Setup __setup);`](/documentation/Accelerate/vDSP_biquadm_DestroySetup)

Destroys a single-precision multichannel biquadratic filter setup object.

[`extern void vDSP_biquadm_DestroySetupD(vDSP_biquadm_SetupD __setup);`](/documentation/Accelerate/vDSP_biquadm_DestroySetupD)

Destroys a double-precision multichannel biquadratic filter setup object.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)