|
|
Line 3: |
Line 3: |
| ==<code>[SPU DELAY <var>X</var> OUT <var>Y</var>]</code>== | | ==<code>[SPU DELAY <var>X</var> OUT <var>Y</var>]</code>== |
| {|class="einrahmen" | | {|class="einrahmen" |
| !input !!description !!data type !!value type!!default value | | !input !!description !!data type !!value type |
| |- | | |- |
| |<var>X</var>||data to be averaged ||number, vector, matrix ||variable | | |<var>X</var>||input data ||any ||variable |
| |- | | |- |
| |<var>TYP</var>||averaging method ||number (int.), string||constant
| | !output !!description !!data type !!value type |
| |- | | |- |
| |<var>T</var>||averaging parameter, depends on method ||number or n.c.||<var>TYP</var>=1→variable<BR><var>TYP</var>≠2→constant | | |<var>Y</var>||delayed input data<BR><var>Y</var><sub>t</sub> = <var>X</var><sub>t-1</sub>||same type as <var>X</var>||variable |
| |-
| |
| |<var>RS</var>||reset flag||number or n.c. ||variable
| |
| |-
| |
| !output !!description !!data type !!value type!!comment
| |
| |-
| |
| |<var>Y</var>||averaged input data ||same type as <var>X</var> ||variable
| |
| |} | | |} |
|
| |
|
| |
| ;Description:
| |
| The averaging algorithm is defined by the inputs <var>TYP</var> and <var>T</var>. The atom averages the elements <var>X</var>[''i'',''j'']<sub>''t''</sub> over evaluation cycles t (''i''=row index, ''j''=column index, ''t''=cycle counter) and stores the averaged value in the element <var>Y</var>[''i'',''j'']<sub>''t''</sub>.
| |
|
| |
| The cycle counter ''t'' is initialized with 0 and incremented by 1 after each evaluation cycle. The cycle counter is reset, if the input <var>RS</var> is set to a value greater than <code>0</code>. The input <var>RS</var> is checked each time the SPU is started.
| |
| :;infinite average:
| |
| ::<var>TYP</var>=<code>0</code> or <code>linear</code>
| |
| ::<var>T</var>=<code>0</code>
| |
| ::<math>Y[i,j]_t =
| |
| \begin{cases}
| |
| X[i,j]_t & \mbox{if }t=0 \\
| |
| \frac{1}{t+1}(t.Y[i,j]_{t-1}+X[i,j]_t) & \mbox{if }t>0
| |
| \end{cases}
| |
| </math>
| |
| :;running average:
| |
| ::<var>TYP</var>=<code>0</code> or <code>linear</code>
| |
| ::<var>T</var>><code>0</code>; <var>T</var> is the (integer) number of averaging cycles
| |
| ::<math>Y[i,j]_t =
| |
| \begin{cases}
| |
| \frac{1}{t+1}\sum_{z=0}^t X[i,j]_z & \mbox{if }0\leqslant t < T \\
| |
| \frac{1}{T}\sum_{z=0}^{T-1}X[i,j]_{t-z} & \mbox{if }t\geqslant T
| |
| \end{cases}
| |
| </math>
| |
| :;exponential average:
| |
| ::<var>TYP</var>=<code>1</code> or <code>exponential</code>
| |
| ::<code>0</code><<var>T</var><<code>1</code>; <var>T</var> is the averaging factor
| |
| ::<math>Y[i,j]_t =
| |
| \begin{cases}
| |
| X[i,j]_t & \mbox{if }t=0\mbox{ (or }T\mbox{ out of range)}\\
| |
| \sqrt{T}.Y[i,j]_{t-1}+(1-\sqrt{T}).X[i,j]_t & \mbox{if }t>0
| |
| \end{cases}
| |
| </math>
| |
| :;minimum:
| |
| ::<var>TYP</var>=<code>2</code> or <code>minimum</code>
| |
| ::<var>T</var> is not used
| |
| ::<math>Y[i,j]_t =
| |
| \begin{cases}
| |
| X[i,j]_t & \mbox{if }t=0 \\
| |
| min(Y[i,j]_{t-1},X[i,j]_t) & \mbox{if }t>0
| |
| \end{cases}
| |
| </math>
| |
| :;maximum:
| |
| ::<var>TYP</var>=<code>3</code> or <code>maximum</code>
| |
| ::<var>T</var> is not used
| |
| ::<math>Y[i,j]_t =
| |
| \begin{cases}
| |
| X[i,j]_t & \mbox{if }t=0 \\
| |
| max(Y[i,j]_{t-1},X[i,j]_t) & \mbox{if }t>0
| |
| \end{cases}
| |
| </math>
| |
| ;See also: | | ;See also: |
| <[[../#Signal Processing Atoms|SP-atoms]]> | | <[[../#Signal Processing Atoms|SP-atoms]]> |
| <!-- AN, 2.5.2011 --> | | <!-- AN, 2.5.2011 --> |