Posts

Hoewel het ontwerp van FIR-filters met lineaire fase een eenvoudige opgave is, geldt dit zeker niet voor IIR-filters die meestal een zeer niet-lineaire faserespons hebben, vooral rond de afsnijfrequenties van het filter. Dit artikel bespreekt waarvoor lineairde eigenschappen die nodig zijn om een digitaal filter een lineaire fase te laten hebben en hoe de passband fase van een IIR filter kan worden aangepast om een lineaire fase te bereiken met behulp van all-pass equalisatie filters.

Waarvoor zijn lineaire fase filters bedoeld?

Digitale filters met lineaire fase hebben het voordeel dat ze alle frequentiecomponenten met dezelfde hoeveelheid vertragen, d.w.z. dat ze de faseverhoudingen van het ingangssignaal behouden. Dit behoud van fase betekent dat het gefilterde signaal de vorm van het oorspronkelijke ingangssignaal behoudt. Deze eigenschap is essentieel voor audiotoepassingen, omdat de signaalvorm van het grootste belang is voor het behoud van de high fidelity in het gefilterde geluid. Nog een ander toepassingsgebied waar dit is vereist, is de ECG biomedische golfvormanalyse, omdat eventuele artefacten die door het filter worden geïntroduceerd, verkeerd kunnen worden geïnterpreteerd als hartafwijkingen.

De volgende grafiek toont de filterprestaties van een Chebyshev type I lowpass IIR op ECG-gegevens – invoergolfvorm (weergegeven in blauw) verschoven door 10 samples (\(\small \Delta=10\)) om de groepsvertraging van het filter ongeveer te compenseren. Merk op dat het gefilterde signaal (in rood weergegeven) de oscillaties rond de ECG-piek heeft verzwakt, verbreed en toegevoegd, wat ongewenst is.

Figure 1: IIR lowpass filtering result with phase distortion

Om een digitaal filter een lineaire fase te laten hebben, moet de impulsrespons van een digitaal filter een conjugaat-even of conjugaat-odd-symmetrie hebben rond het midden van het filter. Dit is gemakkelijk te zien voor een FIR-filter,

\(\displaystyle H(z)=\sum\limits_{k=0}^{L-1} b_k z^{-k}\tag{1} \)

Met het volgende constraint op zijn coëfficiënten

\(\displaystyle b_k=\pm\, b^{\ast}_{L-1-k}\tag{2} \)

welke leidt tot

\(\displaystyle z^{L-1}H(z) = \pm\, H^\ast (1/z^\ast)\tag{3} \)

Naar Eqn. 3 kijkend, zien we dat wortels (nullen) van \(\small H(z)\) ook de nullen moeten zijn van  \(\small H^\ast (1/z^\ast)\). Dit betekent dat de wortels van \(\small H(z)\) moet voorkomen in geconjugeerde wederzijdse paren. Bijvoorbeeld wanneer \(\small z_k\) een nul is van \(\small H(z)\), dan moet \(\small H^\ast (1/z^\ast)\) ook een nul zijn.

Waarom hebben IIR filters geen lineaire fase?

Van een digitaal filter wordt gezegd dat het een gebonden ingang, gebonden uitgang stabiel (oftewel: BIBO (Bounded Input, Boundend Output) stabiel), als elke gebonden ingang aanleiding geeft tot een gebonden uitgang. Alle IIR-filters hebben ofwel polen ofwel beide polen en nullen, en moeten BIBO stabiel zijn, d.w.z.

\(\displaystyle \sum_{k=0}^{\infty}\left|h(k)\right|<\infty \tag{4}\)

Hierbij is \(\small h(k)\) de impulsrespons van het filter. Bij het analyseren van Eqn. 4 moet duidelijk zijn dat aan het BIBO-stabiliteitscriterium alleen wordt voldaan als de polen van het systeem binnen de eenheidscirkel liggen, aangezien de eenheidscirkel in het ROC (gebied van convergentie) van het systeem moet worden opgenomen. Het is dus voldoende om te zeggen dat een begrensd ingangssignaal altijd een begrensd uitgangssignaal zal produceren als alle polen binnen de eenheidscirkel liggen.

De nullen daarentegen worden niet beperkt door deze eis en kunnen daardoor overal op het z-vlak liggen, omdat ze niet direct van invloed zijn op de stabiliteit van het systeem. Daarom kan een systeemstabiliteitsanalyse worden uitgevoerd door eerst de wortels van de transferfunctie te berekenen (d.w.z. de wortels van de teller- en noemerpolynomialen) en vervolgens de corresponderende polen en nullen op het z-vlak te plotten.

Door de ontwikkelde logica toe te passen op de polen van een IIR-filter komen we nu tot een zeer belangrijke conclusie waarom IIR-filters geen lineaire fase kunnen hebben..

Een BIBO stabiel filter moet zijn polen binnen de eenheidscirkel hebben, en als zodanig zou een IIR geconjugeerde tegengestelde polen buiten de eenheidscirkel nodig hebben om een lineaire fase te krijgen, waardoor het BIBO onstabiel wordt.

Op basis van deze uitspraak lijkt het niet mogelijk om een IIR te ontwerpen met een lineaire fase. Echter, zoals hieronder besproken, kunnen fase-equalisatiefilters worden gebruikt om de passband-fase respons te lineariseren.

Fase linearisatie met all-pass filters

All-pass fase linearisatiefilters (equalisers) zijn een beproefde methode om de faserespons van een filter te wijzigen zonder de magnitude ervan te beïnvloeden. Een tweede orde (Biquad) all-pass filter wordt gedefinieerd als:

\( A(z)=\Large\frac{r^2-2rcos \left( \frac{2\pi f_c}{fs}\right) z^{-1}+z^{-2}}{1-2rcos \left( \frac{2\pi f_c}{fs}\right)z^{-1}+r^2 z^{-2}}\tag{5} \)

Hierbij is \(\small f_c\) is de centre frequency, \(\small r\) de radius van de polen en \(\small f_s\) de sampling frequency. Merk op hoe de teller- en noemercoëfficiënten als spiegelend aan elkaar zijn gerangschikt. De eigenschap van het spiegelbeeld is wat de all-pass filter zijn gewenste eigenschap geeft, namelijk de ontwerper in staat stellen om de faserespons te veranderen terwijl de magnituderespons constant of vlak blijft over het volledige frequentiespectrum.

Cascadering van een APF (all-pass filter) equalisatie cascade (bestaande uit meerdere APF’s) met een IIR-filter, het basisidee is dat we alleen de fasereactie het passbandgebied moeten lineariseren. De andere gebieden, zoals de overgangsband en de stopband, kunnen worden genegeerd, aangezien eventuele niet-lineairiteiten in deze gebieden van weinig belang zijn voor het totale filterresultaat.

De uitdaging

De APF-cascade klinkt als een ideaal compromis voor deze uitdaging, maar in werkelijkheid is een aanzienlijke hoeveelheid tijd en een zeer zorgvuldige afstemming van de APF-posities nodig om een aanvaardbaar resultaat te bereiken. Elke APF heeft twee variabelen: \(\small f_c\) en \(\small r\) die geoptimaliseerd moeten worden, wat de oplossing bemoeilijkt. Dit wordt verder gecompliceerd door het feit dat hoe meer APF-fasen aan de cascade worden toegevoegd, hoe hoger de totale groepsvertraging (latentie) van het filter wordt. Dit laatste kan problematisch worden voor snelle real-time closed loop controlesystemen die afhankelijk zijn van de lage latency eigenschap van een IIR.

Ondanks deze uitdagingen is de APF-equalizer een goed compromis voor het lineariseren van de kenmerken van een IIR-doorgangsfase.

De APF equaliser

ASN Filter Designer biedt ontwerpers een zeer eenvoudig te gebruiken grafische alle-fase equalizer interface voor het lineariseren van de passband fase van IIR filters. Zoals hieronder te zien is, is de interface zeer intuïtief en stelt het ontwerpers in staat om APF-filters snel te plaatsen en te fine-tunen met de muis. De tool berekent automatisch \(\small f_c\) en \(\small r\), gebaseerd op de markerpositie.

APF equaliser ASN Filter Designer

Door met de rechtermuisknop te klikken op de frequentieresponskaart of op een bestaande all-pass design marker wordt een optiemenu weergegeven, zoals links afgebeeld.

U kunt maximaal 10 biquads toevoegen (alleen professionele versie).

Een IIR met lineaire passband fase

Door een equalizer te ontwerpen die bestaat uit drie APF-paren, en deze te cascaderen met het Chebyshev-filter van figuur 1, verkrijgen we een filtergolfvorm die een veel scherpere piek heeft met minder demping en oscillatie dan het oorspronkelijke IIR – zie hieronder. Deze verbetering gaat echter ten koste van drie extra Biquad-filters (de APF-cascade) en een verhoogde groepsvertraging, die nu is opgelopen tot 24 samples ten opzichte van de oorspronkelijke 10 samples.

IIR lowpass filtering result with three APF phase equalisation filters
(minimal phase distortion)
IIR laagdoorlaatfilterresultaat met drie APF-fase-nivelleringsfilters
(minimale fasevervorming)

De frequentierespons van zowel het oorspronkelijke IIR als het geequaliseerde IIR worden hieronder weergegeven, waarbij de groepsvertraging (weergegeven in paars) de gemiddelde vertraging van het filter is en een eenvoudiger manier is om de lineariteit te beoordelen.

IIR without equalisation cascade
IIR zonder equalisatie cascade

IIR with equalisation cascade
IIR met equalisation cascade

Merk op dat de groepsvertraging van de geëgaliseerde IIR passband (rechts afgebeeld) bijna vlak is, wat bevestigt dat de fase inderdaad lineair is.

Automatische code generatie naar Arm processor cores via CMSIS-DSP

De automatische codegeneratie-engine van de ASN Filter Designer maakt het mogelijk om een ontworpen filter te exporteren naar Cortex-M Arm-gebaseerde processoren via het CMSIS-DSP software raamwerk. De ingebouwde analyse- en helpfuncties van de tool helpen de ontwerper bij het succesvol configureren van het ontwerp voor implementatie.

Voordat de code wordt gegenereerd, moeten de IIR- en equalisatiefilters (d.w.z. H1- en Heq-filters) eerst opnieuw worden geoptimaliseerd (samengevoegd) tot een H1-filter (hoofdfilter) structuur voor implementatie. Het optiemenu is te vinden onder de P-Z tab in de hoofd UI.

Alle ontwerpen van IIR-filters met floating point moeten gebaseerd zijn op Single Precision arithmetic en ofwel een Direct Form I of Direct Form II getransponeerde filterstructuur. De Direct Form II getransponeerde structuur wordt geadviseerd voor floating point implementatie vanwege de hogere numerieke nauwkeurigheid.

De instellingen voor de kwantiteit en de filterstructuur zijn te vinden onder het tabblad Q (zoals links afgebeeld). Door Arithmetic op Single Precision en Structure op Direct Form II Transposed te zetten en vervolgens op Apply te klikken, wordt de IIR voor het CMSIS-DSP software raamwerk geconficureerd.

Selecteer het Arm CMSIS-DSP raamwerk in het selectievakje in het filteroverzichtsvenster:

De automatisch gegenereerde C-code op basis van het CMSIS-DSP framework voor directe implementatie op een Arm-gebaseerde Cortex-M processor is hieronder weergegeven:

The ASN Filter Designer's automatic code generator generates all initialisation code, scaling and data structures needed to implement the linearised filter IIR filter via Arm's CMSIS-DSP library.

De automatische codegenerator van de ASN Filter Designer genereert alle initialisatiecode, schaling en datastructuren die nodig zijn om het gelineariseerde filter IIR-filter te implementeren via de CMSIS-DSP-bibliotheek van Arm.

Wat hebben we geleerd?

De wortels van een lineaire fase digitaal filter moeten in geconjugeerde wederzijdse paren voorkomen. Hoewel dit geen probleem is voor een FIR-filter, wordt het voor een IIR-filter onhaalbaar, omdat de polen zowel binnen als buiten de eenheidscirkel zouden moeten liggen, waardoor het filter BIBO onstabiel wordt.

De passband fase-respons van een IIR-filter kan worden gelineariseerd met behulp van een APF-equalisatiecascade. De ASN Filter Designer biedt ontwerpers alles wat ze nodig hebben via een zeer eenvoudig te gebruiken, grafische all-pass fase equalizer interface, om met behulp van de muis een geschikte APF-cascade te ontwerpen!

Het gelineariseerde IIR-filter kan worden geëxporteerd via de automatische codegenerator met behulp van de geoptimaliseerde CMSIS-DSP-bibliotheekfuncties van Arm voor gebruik op elke Cortex-M-microcontroller.

 

 

Download demo

Prijzen en licenties

Although the design of FIR filters with linear phase is an easy task. This is certainly not true for IIR filters that usually have a highly non-linear phase response, especially around the filter’s cut-off frequencies. This article discusses the characteristics needed for a digital filter to have linear phase, and how an IIR filter’s passband phase can be modified in order to achieve linear phase using all-pass equalisation filters.

Why do we need linear phase filters?

Digital filters with linear phase have the advantage of delaying all frequency components by the same amount, i.e. they preserve the input signal’s phase relationships. This preservation of phase means that the filtered signal retains the shape of the original input signal. This characteristic is essential for audio applications as the signal shape is paramount for maintaining high fidelity in the filtered audio. Yet another application area that requires this, is ECG biomedical waveform analysis, as any artefacts introduced by the filter may be misinterpreted as heart anomalies.

The following plot shows the filtering performance of a Chebyshev type I lowpass IIR on ECG data – input waveform (shown in blue) shifted by 10 samples (\(\small \Delta=10\)) to approximately compensate for the filter’s group delay. Notice that the filtered signal (shown in red) has attenuated, broadened and added oscillations around the ECG peak, which is undesirable.

Figure 1: IIR lowpass filtering result with phase distortion

In order for a digital filter to have linear phase, its impulse response must have conjugate-even or conjugate-odd symmetry about its midpoint. This is readily seen for an FIR filter,

\(\displaystyle H(z)=\sum\limits_{k=0}^{L-1} b_k z^{-k}\tag{1} \)

With the following constraint on its coefficients,

\(\displaystyle b_k=\pm\, b^{\ast}_{L-1-k}\tag{2} \)

which leads to,

\(\displaystyle z^{L-1}H(z) = \pm\, H^\ast (1/z^\ast)\tag{3} \)

Analysing Eqn. 3, we see that roots (zeros) of \(\small H(z)\) must also be the zeros of  \(\small H^\ast (1/z^\ast)\). This means that the roots of \(\small H(z)\) must occur in conjugate reciprocal pairs, i.e.  if \(\small z_k\) is a zero of \(\small H(z)\), then \(\small H^\ast (1/z^\ast)\) must also be a zero.

Why IIR filters do not have linear phase

A digital filter is said to be bounded input, bounded output stable, or BIBO stable, if every bounded input gives rise to a bounded output. All IIR filters have either poles or both poles and zeros, and must be BIBO stable, i.e.

\(\displaystyle \sum_{k=0}^{\infty}\left|h(k)\right|<\infty \tag{4}\)

Where, \(\small h(k)\) is the filter’s impulse response. Analyzing Eqn. 4, it should be clear that the BIBO stability criterion will only be satisfied if the system’s poles lie inside the unit circle, since the system’s ROC (region of convergence) must include the unit circle. Consequently, it is sufficient to say that a bounded input signal will always produce a bounded output signal if all the poles lie inside the unit circle.

The zeros on the other hand, are not constrained by this requirement, and as a consequence may lie anywhere on z-plane, since they do not directly affect system stability. Therefore, a system stability analysis may be undertaken by firstly calculating the roots of the transfer function (i.e., roots of the numerator and denominator polynomials) and then plotting the corresponding poles and zeros upon the z-plane.

Applying the developed logic to the poles of an IIR filter, we now arrive at a very important conclusion on why IIR filters cannot have linear phase.

A BIBO stable filter must have its poles within the unit circle, and as such in order to get linear phase, an IIR would need conjugate reciprocal poles outside of the unit circle, making it BIBO unstable.

Based upon this statement, it would seem that it’s not possible to design an IIR to have linear phase. However, a discussed below, phase equalisation filters can be used to linearise the passband phase response.

Phase linearisation with all-pass filters

All-pass phase linearisation filters (equalisers) are a well-established method of altering a filter’s phase response while not affecting its magnitude response. A second order (Biquad) all-pass filter is defined as:

\( A(z)=\Large\frac{r^2-2rcos \left( \frac{2\pi f_c}{fs}\right) z^{-1}+z^{-2}}{1-2rcos \left( \frac{2\pi f_c}{fs}\right)z^{-1}+r^2 z^{-2}}\tag{5} \)

Where, \(\small f_c\) is the centre frequency, \(\small r\) is radius of the poles and \(\small f_s\) is the sampling frequency. Notice how the numerator and denominator coefficients are arranged as a mirror image pair of one another.  The mirror image property is what gives the all-pass filter its desirable property, namely allowing the designer to alter the phase response while keeping the magnitude response constant or flat over the complete frequency spectrum.

Cascading an APF (all-pass filter) equalisation cascade (comprised of multiple APFs) with an IIR filter, the basic idea is that we only need to linearise the phase response the passband region. The other regions, such as the transition band and stopband may be ignored, as any non-linearities in these regions are of little interest to the overall filtering result.

The challenge

The APF cascade sounds like an ideal compromise for this challenge, but in truth a significant amount of time and very careful fine-tuning of the APF positions is required in order to achieve an acceptable result. Each APF has two variables: \(\small f_c\) and \(\small r\) that need to be optimised, which complicates the solution. This is further complicated by the fact that the more APF stages that are added to the cascade, the higher the overall filter’s group delay (latency) becomes. This latter issue may become problematic for fast real-time closed loop control systems that rely on an IIR’s low latency property.

Nevertheless, despite these challenges, the APF equaliser is a good compromise for linearising an IIRs passband phase characteristics.

The APF equaliser

ASN Filter Designer provides designers with a very simple to use graphical all-phase equaliser interface for linearising the passband phase of IIR filters. As seen below, the interface is very intuitive, and allows designers to quickly place and fine-tune APF filters positions with the mouse. The tool automatically calculates \(\small f_c\) and \(\small r\), based on the marker position.

APF equaliser ASN Filter Designer

Right clicking on the frequency response chart or on an existing all-pass design marker displays an options menu, as shown on the left.

You may add up to 10 biquads (professional version only).

An IIR with linear passband phase

Designing an equaliser composed of three APF pairs, and cascading it with the Chebyshev filter of Figure 1, we obtain a filter waveform that has a much a sharper peak with less attenuation and oscillation than the original IIR – see below. However, this improvement comes at the expense of three extra Biquad filters (the APF cascade) and an increased group delay, which has now risen to 24 samples compared with the original 10 samples.

IIR lowpass filtering result with three APF phase equalisation filters
(minimal phase distortion)
IIR lowpass filtering result with three APF phase equalisation filters
(minimal phase distortion)

The frequency response of both the original IIR and the equalised IIR are shown below, where the group delay (shown in purple) is the average delay of the filter and is a simpler way of assessing linearity.

IIR without equalisation cascade
IIR without equalisation cascade

IIR with equalisation cascade
IIR with equalisation cascade

Notice that the group delay of the equalised IIR passband (shown on the right) is almost flat, confirming that the phase is indeed linear.

Automatic code generation to Arm processor cores via CMSIS-DSP

The ASN Filter Designer’s automatic code generation engine facilitates the export of a designed filter to Cortex-M Arm based processors via the CMSIS-DSP software framework. The tool’s built-in analytics and help functions assist the designer in successfully configuring the design for deployment.

Before generating the code, the IIR and equalisation filters (i.e. H1 and Heq filters) need to be firstly re-optimised (merged) to an H1 filter (main filter) structure for deployment. The options menu can be found under the P-Z tab in the main UI.

All floating point IIR filters designs must be based on Single Precision arithmetic and either a Direct Form I or Direct Form II Transposed filter structure. The Direct Form II Transposed structure is advocated for floating point implementation by virtue of its higher numerically accuracy.

Quantisation and filter structure settings can be found under the Q tab (as shown on the left). Setting Arithmetic to Single Precision and Structure to Direct Form II Transposed and clicking on the Apply button configures the IIR considered herein for the CMSIS-DSP software framework.

Select the Arm CMSIS-DSP framework from the selection box in the filter summary window:

The automatically generated C code based on the CMSIS-DSP framework for direct implementation on an Arm based Cortex-M processor is shown below:

The ASN Filter Designer's automatic code generator generates all initialisation code, scaling and data structures needed to implement the linearised filter IIR filter via Arm's CMSIS-DSP library.

The ASN Filter Designer’s automatic code generator generates all initialisation code, scaling and data structures needed to implement the linearised filter IIR filter via Arm’s CMSIS-DSP library.

What we have learnt

The roots of a linear phase digital filter must occur in conjugate reciprocal pairs. Although this no problem for an FIR filter, it becomes infeasible for an IIR filter, as poles would need to be both inside and outside of the unit circle, making the filter BIBO unstable.

The passband phase response of an IIR filter may be linearised by using an APF equalisation cascade. The ASN Filter Designer provides designers with everything they need via a very simple to use, graphical all-pass phase equaliser interface, in order to design a suitable APF cascade by just using the mouse!

The linearised IIR filter may be exported via the automatic code generator using Arm’s optimised CMSIS-DSP library functions for deployment on any Cortex-M microcontroller.

 

 

Download demo now

Licencing information

A  Peaking or Bell filter is a type of audio equalisation filter that boosts or attenuates the magnitude of a specified set of frequencies around a centre frequency in order to perform magnitude equalisation. As seen in the plot in the below, the filter gets its name from the shape of the its magnitude spectrum (blue line) which resembles a Bell curve.

Peaking filter or Bell filter, a type of audio equalisation filter that boosts or attenuates the magnitude of a specified set of frequencies around a centre frequency in order to perform magnitude equalisation. As seen in the plot in the below, the filter gets its name from the shape of the its magnitude spectrum (blue line) which resembles a Bell curve.

Frequency response (magnitude shown in blue, phase shown in purple) of a 2nd order Bell filter peaking at 125Hz.

All-pass filters

Central to the Bell filter is the so called All-pass filter. All-pass filters provide a simple way of altering/improving the phase response of an IIR without affecting its magnitude response. As such, they are commonly referred to as phase equalisers and have found particular use in digital audio applications.

A second order all-pass filter is defined as:

\( A(z)=\Large\frac{r^2-2rcos \left( \frac{2\pi f_c}{fs}\right) z^{-1}+z^{-2}}{1-2rcos \left( \frac{2\pi f_c}{fs}\right)z^{-1}+r^2 z^{-2}} \)

Notice how the numerator and denominator coefficients are arranged as a mirror image pair of one another.  The mirror image property is what gives the all-pass filter its desirable property, namely allowing the designer to alter the phase response while keeping the magnitude response constant or flat over the complete frequency spectrum.

A Bell filter can be constructed from the \(A(z)\) filter by the following transfer function:

\(H(z)=\Large\frac{(1+K)+A(z)(1-K)}{2}\)

After some algebraic simplication, we obtain the transfer function for the Peaking or Bell filter as:

\(H(z)=\Large{\frac{1}{2}}\left[\normalsize{(1+K)} + \underbrace{\Large\frac{k_2 + k_1(1+k_2)z^{-1}+z^{-2}}{1+k_1(1+k_2)z^{-1}+k_2 z^{-2}}}_{all-pass filter}\normalsize{(1-K)} \right] \)

  • \(K\) is used to set the gain and sign of the peak
  • \(k_1\) sets the peak centre frequency
  • \(k_2\) sets the bandwidth of the peak

Implementation

A Bell filter may easily be implemented in ASN FilterScript as follows:

ClearH1;  // clear primary filter from cascade
interface BW = {0,2,0.1,0.5}; // filter bandwidth
interface fc = {0, fs/2,fs/100,fs/4}; // peak/notch centre frequency
interface K = {0,3,0.1,0.5}; // gain/sign

Main()

k1=-cos(2*pi*fc/fs);
k2=(1-tan(BW/2))/(1+tan(BW/2));

Pz = {1,k1*(1+k2),k2}; // define denominator coefficients
Qz = {k2,k1*(1+k2),1}; // define numerator coefficients
Num = (Pz*(1+K) + Qz*(1-K))/2;
Den = Pz;
Gain = 1;

This code may now be used to design a suitable Bell filter, where the exact values of \(K, f_c\) and \(BW\) may be easily found by tweaking the interface variables and seeing the results in real-time, as described below.

Designing the filter on the fly

Central to the interactivity of the FilterScript IDE (integrated development environment) are the so called interface variables. An interface variable is simply stated: a scalar input variable that can be used modify a symbolic expression without having to re-compile the code – allowing designers to design on the fly and quickly reach an optimal solution.

As seen in the code example above, interface variables must be defined in the initialisation section of the code, and may contain constants (such as, fs and pi) and simple mathematical operators, such as multiply * and / divide. Where, adding functions to an interface variable is not supported.

An interface variable is defined as vector expression:

interface name = {minimum, maximum, step_size, default_value};

Where, all entries must be real scalars values. Vectors and complex values will not compile.

Real-time updates

All interface variables are modified via the interface variable controller GUI. After compiling the code, use the interface variable controller to tweak the interface variables values and see the effects on the transfer function. If testing on live audio, you may stream a loaded audio file and adjust the interface variables in real-time in order to hear the effects of the new settings.