IIR Filter: Difference between revisions

From GNU Radio
Jump to navigation Jump to search
No edit summary
(Add difference equation formula)
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
[[Category:Block Docs]]
[[Category:Block Docs]]
Construct an IIR with the given taps.
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 ==
Line 6: Line 10:


; Feed-Forward taps (''R'')
; Feed-Forward taps (''R'')
:  
: The taps corresponding to the coefficients <math>b_k</math> for the input


; Feedback taps (''R'')
; 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.
; 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.
Line 15: Line 19:
== Example Flowgraph ==
== Example Flowgraph ==


Insert description of flowgraph here, then show a screenshot of the flowgraph and the output if there is an interesting GUI.  Currently we have no standard method of uploading the actual flowgraph to the wiki or git repo, unfortunately. The plan is to have an example flowgraph showing how the block might be used, for every block, and the flowgraphs will live in the git repo.
=== 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 ==

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

Test iir.png


Action Screenshots

This is operating on white noise instead of the audio file.

Default (flat) Setting

Eq flat.png


Second Bandpass Amplified

Eq peak.png

Source Files

C++ files
Main file
Public header files
Main file
Block definition
[1]