|
|
@ -1537,9 +1537,8 @@ look ahead delay, as well.</p> |
|
|
|
<script type="text/x-red" data-help-name="AudioFilterBiquad_F32"> |
|
|
|
<script type="text/x-red" data-help-name="AudioFilterBiquad_F32"> |
|
|
|
<h3>Summary</h3> |
|
|
|
<h3>Summary</h3> |
|
|
|
<div class=tooltipinfo> |
|
|
|
<div class=tooltipinfo> |
|
|
|
<p>Biquadratic cascaded filter, useful for all sorts of filtering. |
|
|
|
<p>Biquadratic cascaded IIR filters, useful for all sorts of |
|
|
|
Up to 4 stages may be cascaded. |
|
|
|
frequency filtering. Up to 4 stages may be cascaded. </p> |
|
|
|
</p> |
|
|
|
|
|
|
|
<p align=center><img src="img/biquad.png"></p> |
|
|
|
<p align=center><img src="img/biquad.png"></p> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<h3>Audio Connections</h3> |
|
|
|
<h3>Audio Connections</h3> |
|
|
@ -1549,6 +1548,11 @@ look ahead delay, as well.</p> |
|
|
|
<tr class=odd><td align=center>Out 0</td><td>Filtered Signal Output</td></tr> |
|
|
|
<tr class=odd><td align=center>Out 0</td><td>Filtered Signal Output</td></tr> |
|
|
|
</table> |
|
|
|
</table> |
|
|
|
<h3>Functions</h3> |
|
|
|
<h3>Functions</h3> |
|
|
|
|
|
|
|
<p class=func><span class=keyword>begin</span>();</p> |
|
|
|
|
|
|
|
<p class=desc> This <b>required</b> function initializes |
|
|
|
|
|
|
|
the BiQuad instance using the ARM DSP Math Library. There are no |
|
|
|
|
|
|
|
calling parameters. |
|
|
|
|
|
|
|
</p> |
|
|
|
<p class=func><span class=keyword>setLowpass</span>(stage, frequency, Q);</p> |
|
|
|
<p class=func><span class=keyword>setLowpass</span>(stage, frequency, Q);</p> |
|
|
|
<p class=desc>Configure one stage of the filter (0 to 3) with low pass |
|
|
|
<p class=desc>Configure one stage of the filter (0 to 3) with low pass |
|
|
|
response, with the specified corner frequency and Q shape. If Q is |
|
|
|
response, with the specified corner frequency and Q shape. If Q is |
|
|
@ -1596,9 +1600,7 @@ look ahead delay, as well.</p> |
|
|
|
<p class=desc>Configure one stage of the filter (0 to 3) with an arbitrary |
|
|
|
<p class=desc>Configure one stage of the filter (0 to 3) with an arbitrary |
|
|
|
filter response. The array of coefficients is in order: B0, B1, B2, A1, A2. |
|
|
|
filter response. The array of coefficients is in order: B0, B1, B2, A1, A2. |
|
|
|
Each coefficient must be less than 2.0 and greater than -2.0. The array |
|
|
|
Each coefficient must be less than 2.0 and greater than -2.0. The array |
|
|
|
should be type double. Alternately, it may be type int, where 1.0 is |
|
|
|
should be type double. </p> |
|
|
|
represented with 1073741824 (2<sup>30</sup>). |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
<p class=func><span class=keyword><strong>double* </strong>getCoefficients</span>();</p> |
|
|
|
<p class=func><span class=keyword><strong>double* </strong>getCoefficients</span>();</p> |
|
|
|
<p class=desc>Returns a pointer to the array of double precision coefficients. For |
|
|
|
<p class=desc>Returns a pointer to the array of double precision coefficients. For |
|
|
|
up to four stages, each stage is arranged in order B0, B1, B2, A1, A2. This is a |
|
|
|
up to four stages, each stage is arranged in order B0, B1, B2, A1, A2. This is a |
|
|
@ -1607,17 +1609,25 @@ look ahead delay, as well.</p> |
|
|
|
<p class=exam>File > Examples > Audio > Effects > Filter |
|
|
|
<p class=exam>File > Examples > Audio > Effects > Filter |
|
|
|
</p> |
|
|
|
</p> |
|
|
|
<h3>Notes</h3> |
|
|
|
<h3>Notes</h3> |
|
|
|
<p>Filters can with gain must have their input signals attenuated, so the |
|
|
|
<p>Each instance of the Biquad filter class can have 0 to 4 cascaded biquad filters, |
|
|
|
signal does not exceed 1.0. |
|
|
|
with each independent. These can mix filter types, such as Low Pass and High Pass |
|
|
|
</p> |
|
|
|
or they can be multiples of the same type. Note that, in general, cascading identical |
|
|
|
<p>This object implements up to 4 cascaded stages. Unconfigured stages will |
|
|
|
Biquad IIR filters will not be the most useful. Check the Internet for discussions |
|
|
|
not pass any signal. |
|
|
|
of cascading filters to achieve specific responses, such as Butterworth |
|
|
|
</p> |
|
|
|
or Chebychev. |
|
|
|
<p>Biquad filters with low corner frequency (under about 400 Hz) can run into |
|
|
|
</p> |
|
|
|
trouble with limited numerical precision, causing the filter to perform |
|
|
|
<p>This object implements up to 4 cascaded stages. The four biquads per instance |
|
|
|
poorly. For very low corner frequency, the State Variable (Chamberlin) |
|
|
|
can each be used, or not used, and the unused |
|
|
|
filter should be used. |
|
|
|
ones will be treated as pass throughs. |
|
|
|
</p> |
|
|
|
</p> |
|
|
|
|
|
|
|
<p>These IIR filters do not provide flat time delay with frequency as provided |
|
|
|
|
|
|
|
by symmetrical FIR filters. If this is important, the extra complexity of the FIR |
|
|
|
|
|
|
|
type may be justified.</p> |
|
|
|
|
|
|
|
<p>These IIR filters generally do not have the degrees of freedom that FIR filters easily provide. |
|
|
|
|
|
|
|
That means the response shapes are generally more constrained. This can be overcome |
|
|
|
|
|
|
|
by adding many more biquad sections, with properly chosen frequencies and Qs, but |
|
|
|
|
|
|
|
then it becomes easier to just use the FIR. Thus, most applications where the Biquad IIR |
|
|
|
|
|
|
|
is appropriate will fit into this 4-filter object.</p> |
|
|
|
</script> |
|
|
|
</script> |
|
|
|
<script type="text/x-red" data-template-name="AudioFilterBiquad_F32"> |
|
|
|
<script type="text/x-red" data-template-name="AudioFilterBiquad_F32"> |
|
|
|
<div class="form-row"> |
|
|
|
<div class="form-row"> |
|
|
@ -1669,6 +1679,7 @@ look ahead delay, as well.</p> |
|
|
|
a non-symetrical response, make sure the data is in reverse time order. |
|
|
|
a non-symetrical response, make sure the data is in reverse time order. |
|
|
|
</p> |
|
|
|
</p> |
|
|
|
<h3>Notes</h3> |
|
|
|
<h3>Notes</h3> |
|
|
|
|
|
|
|
|
|
|
|
<p>FIR filters requires more CPU time than Biquad (IIR), but they can |
|
|
|
<p>FIR filters requires more CPU time than Biquad (IIR), but they can |
|
|
|
implement filters with better phase response. |
|
|
|
implement filters with better phase response. |
|
|
|
</p> |
|
|
|
</p> |
|
|
@ -1986,36 +1997,17 @@ look ahead delay, as well.</p> |
|
|
|
<p>Audio from |
|
|
|
<p>Audio from |
|
|
|
master mode I2S may be used in the same project as ADC, DAC and |
|
|
|
master mode I2S may be used in the same project as ADC, DAC and |
|
|
|
PWM signals, because all remain in sync to Teensy's timing</p> |
|
|
|
PWM signals, because all remain in sync to Teensy's timing</p> |
|
|
|
<!-- |
|
|
|
|
|
|
|
<h3>Examples</h3> |
|
|
|
<h3>Examples</h3> |
|
|
|
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughStereo |
|
|
|
<p Most examples use the Audio card with I2S transfer.</p> |
|
|
|
</p> |
|
|
|
|
|
|
|
<p class=exam>File > Examples > Audio > Recorder |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
<p class=exam>File > Examples > Audio > Analysis > PeakMeterStereo |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
<p class=exam>File > Examples > Audio > Analysis > FFT |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
<p class=exam>File > Examples > Audio > Analysis > SpectrumAnalyzerBasic |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
<p class=exam>File > Examples > Audio > Effects > Chorus |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
<p class=exam>File > Examples > Audio > Effects > Flange |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
<p class=exam>File > Examples > Audio > Effects > Filter |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
<p class=exam>File > Examples > Audio > Effects > Filter_FIR |
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
--> |
|
|
|
|
|
|
|
<h3>Notes</h3> |
|
|
|
<h3>Notes</h3> |
|
|
|
<p>Only one I2S input and one I2S output object may be used. Master |
|
|
|
<p>Only one I2S input and one I2S output object may be used. Master |
|
|
|
and slave modes may not be mixed (both must be of the same type). |
|
|
|
and slave modes may not be mixed (both must be of the same type).</p> |
|
|
|
</p> |
|
|
|
<p>As of May 2022, the I2S input and output objects can handle 24 or 32-bit |
|
|
|
<p>Being an "_F32" object, audio is passed into this class using F32 memory |
|
|
|
data transfer, if that is supported by the audio hardware device. |
|
|
|
that was allocated using an AudioMemory_F32() call in your sketch's setup() |
|
|
|
No class functions are needed. It is "automagic".</p> |
|
|
|
routine. But, internally, this class still uses some Int16 data handling, |
|
|
|
|
|
|
|
so be sure to also include an AudioMemory() call in addition to AudioMemory_F32() |
|
|
|
|
|
|
|
to allocate the Int16 memory.</p> |
|
|
|
|
|
|
|
</script> |
|
|
|
</script> |
|
|
|
<script type="text/x-red" data-template-name="AudioInputI2S_F32"> |
|
|
|
<script type="text/x-red" data-template-name="AudioInputI2S_F32"> |
|
|
|
<div class="form-row"> |
|
|
|
<div class="form-row"> |
|
|
|