IIR Filter: Difference between revisions
(Created page with "Category:Block Docs Category:Stub Docs This is the template for the "Page-per-block Docs". This first section should describe what the block...") |
(Add difference equation formula) |
||
| (3 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
[[Category:Block Docs]] | [[Category:Block Docs]] | ||
Construct an IIR that satisfies the following difference equation: | |||
<math> y[n] - \sum_{k=1}^{M} a_k y[n-k] = \sum_{k=0}^{N} b_k x[n-k]</math>, | |||
<p>where <math>a_k</math> are the feedback taps and <math>b_k</math> are the feedforward taps. </p> | |||
<p>The equation above represents the old style. <p> | |||
== Parameters == | == Parameters == | ||
(''R''): <span class="plainlinks">[https://wiki.gnuradio.org/index.php/GNURadioCompanion#Variable_Controls ''Run-time adjustable'']</span> | (''R''): <span class="plainlinks">[https://wiki.gnuradio.org/index.php/GNURadioCompanion#Variable_Controls ''Run-time adjustable'']</span> | ||
; | ; Feed-Forward taps (''R'') | ||
: | : The taps corresponding to the coefficients <math>b_k</math> for the input | ||
; | ; Feedback taps (''R'') | ||
: | : The taps corresponding to the coefficients <math>a_k</math> for the output. Although the first element <math>a_0</math> must be included, it is ignored and assumed to be 1. | ||
; Old style of taps : The old style of the IIR filter uses feedback taps that are negative of what most definitions use (scipy and Matlab among them). This parameter keeps using the old GNU Radio style and is set to TRUE by default. When taps generated from scipy, Matlab, or gr_filter_design, use the new style by setting this to FALSE. | |||
== Example Flowgraph == | == Example Flowgraph == | ||
=== 8-Band IIR Biquad Equalizer === | |||
==== Flow Graph File ==== | |||
Can be found [https://gist.github.com/marcusmueller/dadb6a18cddd3a2df8158f33936a74c2#file-test_iir-grc here], alongside with an example of an [https://gist.github.com/marcusmueller/dadb6a18cddd3a2df8158f33936a74c2/raw/edbf0f1cd3aeaa5ca6e1e453ae348c978e63f562/foxtale1.opus audio file] that can be used (mono, 48 kHz, libsndfile supported coded (Opus), "Fox Tale Waltz Part 1" Kevin MacLeod (incompetech.com) Licensed under [http://creativecommons.org/licenses/by/4.0/ Creative Commons: By Attribution 4.0 License]). | |||
==== Description ==== | |||
In this very complex flowgraph, we use coefficients as calculated in Robert Bristow-Johnson [https://webaudio.github.io/Audio-EQ-Cookbook/Audio-EQ-Cookbook.txt Cookbook formulae for audio EQ biquad filter coefficients] in a "peakingEQ" configuration. | |||
We choose 8 logarithmically distributed frequencies, and make the (linear!) gain for each of these frequencies adjustable. (The frequencies are also adjustable.) | |||
By disabling the [[Wav File Source]] and enabling the Noise source, you can see the frequency response of these filters; you'll want to disable the [[Audio Sink]], to save your speakers from white noise. Enable the [[Audio Source]] instead to get a passthrough equalizer. | |||
==== Flowgraph Picture ==== | |||
[[File:test_iir.png]] | |||
==== Action Screenshots ==== | |||
This is operating on white noise instead of the audio file. | |||
===== Default (flat) Setting ===== | |||
[[File:Eq_flat.png]] | |||
===== Second Bandpass Amplified ===== | |||
[[File:Eq_peak.png]] | |||
== Source Files == | == Source Files == | ||
; C++ files | ; C++ files | ||
: [https://github.com/gnuradio/gnuradio | : [https://github.com/gnuradio/gnuradio/blob/master/gr-filter/lib/iir_filter.cc Main file] | ||
; Public header files | ; Public header files | ||
: [https://github.com/gnuradio/gnuradio | : [https://github.com/gnuradio/gnuradio/blob/master/gr-filter/include/gnuradio/filter/iir_filter.h Main file ] | ||
; Block definition | ; Block definition | ||
: [https://github.com/gnuradio/gnuradio | : [https://github.com/gnuradio/gnuradio/blob/master/gr-filter/grc/filter_iir_filter_xxx.block.yml] | ||
Latest revision as of 22:49, 27 September 2025
Construct an IIR that satisfies the following difference equation:
,
where are the feedback taps and are the feedforward taps.
The equation above represents the old style.
Parameters
(R): Run-time adjustable
- Feed-Forward taps (R)
- The taps corresponding to the coefficients for the input
- Feedback taps (R)
- The taps corresponding to the coefficients for the output. Although the first element must be included, it is ignored and assumed to be 1.
- Old style of taps
- The old style of the IIR filter uses feedback taps that are negative of what most definitions use (scipy and Matlab among them). This parameter keeps using the old GNU Radio style and is set to TRUE by default. When taps generated from scipy, Matlab, or gr_filter_design, use the new style by setting this to FALSE.
Example Flowgraph
8-Band IIR Biquad Equalizer
Flow Graph File
Can be found here, alongside with an example of an audio file that can be used (mono, 48 kHz, libsndfile supported coded (Opus), "Fox Tale Waltz Part 1" Kevin MacLeod (incompetech.com) Licensed under Creative Commons: By Attribution 4.0 License).
Description
In this very complex flowgraph, we use coefficients as calculated in Robert Bristow-Johnson Cookbook formulae for audio EQ biquad filter coefficients in a "peakingEQ" configuration.
We choose 8 logarithmically distributed frequencies, and make the (linear!) gain for each of these frequencies adjustable. (The frequencies are also adjustable.)
By disabling the Wav File Source and enabling the Noise source, you can see the frequency response of these filters; you'll want to disable the Audio Sink, to save your speakers from white noise. Enable the Audio Source instead to get a passthrough equalizer.
Flowgraph Picture
Action Screenshots
This is operating on white noise instead of the audio file.
Default (flat) Setting
Second Bandpass Amplified
Source Files
- C++ files
- Main file
- Public header files
- Main file
- Block definition
- [1]


