<phyphox version="1.10" locale="en">
    <title>resonance via FFT</title>
    <category>Acoustics</category>
    <description>Determine resonance curve with white noise excitation using FFT</description>
    <icon>rFT</icon>
    <color>red</color>
    <data-containers>
        <container size="1" static="false">rate</container>
        <container size="2501" static="false">frequency</container>
        <container size="48000" static="false">fftX</container>
        <container size="48000" static="false">fftY</container>
        <container size="48000" static="false">fft</container>
        <container size="2501" static="false">fft2500</container>
        <container size="2501" static="false">FFTaverage</container>
        <container size="48000" static="false">sound_in</container>
        <container size="1" static="false" init="0">run</container>
    </data-containers>
    <input>
        <audio rate="48000">
            <output>sound_in</output>
            <output component="rate">rate</output>
        </audio>
    </input>
    <output>
        <audio rate="48000" loop="true" normalize="true">
            <noise>
                <input parameter="amplitude" type="value">0.8</input>
                <input parameter="duration" type="value">1.0</input>
            </noise>
        </audio>
    </output>
    <analysis sleep="1.0">
        <fft>
            <input as="re" clear="false">sound_in</input>
            <output as="re">fftX</output>
            <output as="im">fftY</output>
        </fft>
        <formula formula="sqrt([1_]*[1_]+[2_]*[2_])">
            <input as="in">fftX</input>
            <input as="in">fftY</input>
            <output as="out">fft</output>
        </formula>
        <subrange>
            <input as="from" type="value">0</input>
            <input as="to" type="value">2500</input>
            <input>fft</input>
            <output>fft2500</output>
        </subrange>
        <if less="true" equal="true" greater="false">
            <input as="a" clear="false">run</input>
            <input as="b" type="value">1</input>
            <input as="true" clear="false">fft2500</input>
            <input as="false" clear="false">FFTaverage</input>
            <output as="result">FFTaverage</output>
        </if> 
        <formula formula="[1_]*([3]-1)/[3]+[2_]/[3]">
            <input as="in" clear="false">FFTaverage</input>
            <input as="in" clear="false">fft2500</input>
            <input as="in" clear="false">run</input>
            <output as="out">FFTaverage</output>
        </formula>
        <add>
            <input clear="false">run</input>
            <input type="value">1</input>
            <output>run</output>
        </add>
        <ramp>
            <input as="start" type="value">0</input>
            <input as="stop" type="value">2500</input>
            <input as="length" type="value">2501</input>
            <output as="out">frequency</output>
        </ramp>
    </analysis>
    <views>
        <view label="FFT">
            <graph label="Fourier Transform (average)" aspectRatio="2.5" style="lines" lineWidth="1" color="ff7e22" partialUpdate="false" history="1" labelX="Frequency" labelY="FFT Mag" labelZ="" unitX="Hz" unitY="a.u." unitZ="" logX="false" logY="false" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">frequency</input>
                <input axis="y" clear="false">FFTaverage</input>
            </graph>
            <graph label="Fourier Transform (last run)" aspectRatio="2.5" style="lines" lineWidth="1" color="ff7e22" partialUpdate="false" history="1" labelX="Frequency" labelY="FFT Mag" labelZ="" unitX="Hz" unitY="a.u." unitZ="" logX="false" logY="false" logZ="false" xPrecision="3" yPrecision="3" zPrecision="3" scaleMinX="auto" scaleMaxX="auto" scaleMinY="auto" scaleMaxY="auto" scaleMinZ="auto" scaleMaxZ="auto" minX="0" maxX="0" minY="0" maxY="0" minZ="0" maxZ="0"  mapWidth="0"       >
                <input axis="x">frequency</input>
                <input axis="y" clear="false">fft2500</input>
            </graph>
            <value label="runs" size="2" precision="0" scientific="false" unit="" factor="1" >
                <input>run</input>
            </value>
        </view>
    </views>
  <export>
    <set name="FFT Spectrum">
      <data name="Frequency (Hz)">frequency</data>
      <data name="FFT(average)">FFTaverage</data>
      <data name="FFT(last run)">fft2500</data>
    </set>
  </export>
</phyphox>