<phyphox version="1.14" locale="en">
  <title>Bandpass Amplitude</title>
  <category>Acoustics</category>
  <icon>BA</icon>
  <description>
    Amplitude of a specific frequency band over time.
  </description>
  <data-containers>
    <container size="32768">recording</container>
    <container>rate</container>
    <container>rate/2</container>
    <container size="32768">appended_recording</container>
    <container size="32768">recording_subrange</container>
    <container>recording_length</container>
    <container init="8192">samples</container>
    <container>actual_samples/2</container>
    <container>actual_samples/2+1</container>
    <container>actual_samples+1</container>
    <container>actual_samples</container>
    <container>subrange_start</container>
    <container>period</container>
    <container size="1">df</container>
    <container size="32768">time</container>
    <container size="32769">frequency</container>
    <container size="32768">fftX</container>
    <container size="32768">fftY</container>
    <container size="16384">halfFrequency</container>
    <container size="16384">halfFFTtempX</container>
    <container size="16384">halfFFTtempY</container>
    <container size="16384">fft</container>
    <container size="1">f0</container>
    <container size="0">amplitude</container>
    <container size="0">t</container>
    <container size="1">a</container>
    <container size="1">tnow</container>
    <container size="1">f1</container>
    <container size="1">f2</container>
    <container size="16384">filteredFFT</container>
    <container size="2">f1x</container>
    <container size="2">f1y</container>
    <container size="2">f2x</container>
    <container size="2">f2y</container>
  </data-containers>
  <input>
    <audio>
      <output>recording</output>
      <output component="rate">rate</output>
    </audio>
  </input>
  <views>
    <view label="Amplitude">
      <graph label="Amplitude" labelX="[[quantity_short_time]]" unitX="[[unit_short_second]]" labelY="Amplitude" unitY="[[unit_short_arbitrary_unit]]" color="ffff00">
        <input axis="x">t</input>
        <input axis="y">amplitude</input>
      </graph>
      <button label="Clear">
        <input type="empty" />
        <output>t</output>
        <input type="empty" />
        <output>amplitude</output>
      </button>
    </view>
    <view label="Bandpass">
      <value label="Peak-Frequency" unit="[[unit_short_hertz]]">
        <input>f0</input>
      </value>
      <graph label="Fourier Transform" logX="true" logY="true" labelX="Frequency" unitX="[[unit_short_hertz]]" labelY="FFT Mag" unitY="[[unit_short_arbitrary_unit]]">
        <input axis="x">halfFrequency</input>
        <input axis="y">fft</input>
        <input axis="x" color="yellow">f1x</input>
        <input axis="y">f1y</input>
        <input axis="x" color="yellow">f2x</input>
        <input axis="y">f2y</input>
      </graph>
      <separator height="1"/>
      <info label="Bandpass settings" size="1.5" />
      <edit label="Lower limit" default="1950" signed="false" min="1" unit="[[unit_short_hertz]]" >
        <output>f1</output>
      </edit>
      <edit label="Upper limit" default="2050" signed="false" min="1" unit="[[unit_short_hertz]]" >
        <output>f2</output>
      </edit>
    </view>
    <view label="Raw data">
      <graph label="Recording" labelX="[[quantity_short_time]]" unitX="[[unit_short_second]]" labelY="Amplitude" unitY="[[unit_short_arbitrary_unit]]">
        <input axis="x">time</input>
        <input axis="y">recording_subrange</input>
      </graph>
    </view>
  </views>
  <analysis sleep="0.05" dynamicSleep="period">
    <timer>
      <output>tnow</output>
    </timer>
    <append>
      <input clear="false">recording_subrange</input>
      <input clear="false">recording</input>
      <output>appended_recording</output>
    </append>
    <count>
      <input clear="false">appended_recording</input>
      <output>recording_length</output>
    </count>
    <subtract>
      <input>recording_length</input>
      <input clear="false">samples</input>
      <output>subrange_start</output>
    </subtract>
    <subrange>
      <input clear="false" as="from">subrange_start</input>
      <input as="in" clear="false">appended_recording</input>
      <output>recording_subrange</output>
    </subrange>
    <count>
      <input clear="false">recording_subrange</input>
      <output>actual_samples</output>
    </count>
    <add>
      <input clear="false">actual_samples</input>
      <input type="value">1</input>
      <output>actual_samples+1</output>
    </add>
    <divide>
      <input clear="false">actual_samples</input>
      <input type="value">2</input>
      <output>actual_samples/2</output>
    </divide>
    <add>
      <input clear="false">actual_samples/2</input>
      <input type="value">1</input>
      <output>actual_samples/2+1</output>
    </add>
    <divide>
      <input clear="false">actual_samples</input>
      <input clear="false">rate</input>
      <output>period</output>
    </divide>
    <divide>
      <input type="value">1</input>
      <input clear="false">period</input>
      <output>df</output>
    </divide>
    <divide>
      <input clear="false">rate</input>
      <input type="value">2</input>
      <output>rate/2</output>
    </divide>
    <ramp>
      <input as="start" type="value">0</input>
      <input as="stop" clear="false">period</input>
      <input as="length" clear="false">actual_samples+1</input>
      <output>time</output>
    </ramp>
    <ramp>
      <input as="start" type="value">0</input>
      <input as="stop" clear="false">rate/2</input>
      <input as="length" clear="false">actual_samples/2+1</input>
      <output>frequency</output>
    </ramp>
    <fft>
      <input clear="false">recording_subrange</input>
      <output as="re">fftX</output>
      <output as="im">fftY</output>
    </fft>
    <subrange>
      <input type="value" as="from">1</input>
      <input clear="false" as="to">actual_samples/2</input>
      <input as="in">frequency</input>
      <input as="in">fftX</input>
      <input as="in">fftY</input>
      <output>halfFrequency</output>
      <output>halfFFTtempX</output>
      <output>halfFFTtempY</output>
    </subrange>
    <formula formula="sqrt([1_]*[1_]+[2_]*[2_])">
      <input>halfFFTtempX</input>
      <input>halfFFTtempY</input>
      <output>fft</output>
    </formula>
    <max>
      <input as="y" clear="false">fft</input>
      <input as="x" clear="false">halfFrequency</input>
      <output as="position" clear="false">f0</output>
      <output as="max">f1y</output>
    </max>
    <rangefilter>
      <input clear="false">fft</input>
      <input clear="false">halfFrequency</input>
      <input clear="false" as="min">f1</input>
      <input clear="false" as="max">f2</input>
      <output>filteredFFT</output>
    </rangefilter>
    <average>
      <input clear="false">filteredFFT</input>
      <output as="average" clear="false">a</output>
    </average>
    <append>
      <input clear="false">f1</input>
      <input clear="false">f1</input>
      <output>f1x</output>
    </append>
    <append>
      <input clear="false">f2</input>
      <input clear="false">f2</input>
      <output>f2x</output>
    </append>
    <min>
      <input as="y" clear="false">fft</input>
      <output as="min" clear="false">f1y</output>
    </min>
    <append>
      <input clear="false">f1y</input>
      <output>f2y</output>
    </append>
    <match>
      <input>tnow</input>
      <input>a</input>
      <output clear="false">t</output>
      <output clear="false">amplitude</output>
    </match>
  </analysis>
  <export>
    <set name="Amplitude">
      <data name="time (s)">t</data>
      <data name="Amplitude (a.u.)">amplitude</data>
    </set>
    <set name="Raw data">
      <data name="Time (s)">time</data>
      <data name="Recording (a.u.)">recording_subrange</data>
    </set>
  </export>
</phyphox>
