Programmer Guide/SPU Reference/SELECTAB: Difference between revisions
From STX Wiki
Jump to navigationJump to search
No edit summary |
|||
Line 1: | Line 1: | ||
{{DISPLAYTITLE:{{SUBPAGENAME}}}} | {{DISPLAYTITLE:{{SUBPAGENAME}}}} | ||
Two channel multiplexer. | |||
==<code>[SPU SELECTAB <var>A B SEL</var> OUT <var>Y</var>]</code>== | |||
== | {|class="einrahmen" | ||
!input !!description !!data type !!value type!!default value | |||
<code>SELECTAB <var>A B SEL</var></code> | |- | ||
|<var>A, B</var>||input data ||number, vector ||variable | |||
|- | |- | ||
|<var> | |<var>SEL</var>||select switch ||number (int.), string||variable | ||
| | |||
|- | |- | ||
!output !!description !!data type !!value type!!comment | |||
|- | |- | ||
|<var>Y</var> | |<var>Y</var>||selected data ||same type as <var>A</var> ||variable | ||
| | |||
|} | |} | ||
;Description: | |||
:;<var>A</var> and <var>B</var> are numbers: | |||
::{|class="einrahmen" | |||
!SEL | |||
! <var>Y<sub>number</sub></var>=f(<var>A<sub>number</sub></var>,<var>B<sub>number</sub></var>) | |||
! <var>Y<sub>vector</sub></var>=f(<var>A<sub>vector</sub></var>,<var>B<sub>number</sub></var>) | |||
! <var>Y<sub>number</sub></var>=f(<var>A<sub>vector</sub></var>,<var>B<sub>vector</sub></var>) | |||
|- | |- | ||
| | |<code>0</code> or <code>A</code> | ||
| | |<var>Y</var> = <var>A</var> | ||
|<var>Y</var>[i] = <var>A</var>[i] | |||
|<var>Y</var>[i] = <var>A</var>[i] | |||
|- | |- | ||
| | |<code>1</code> or <code>B</code> | ||
| | |<var>Y</var> = <var>B</var> | ||
|<var>Y</var>[i] = <var>B</var> | |||
|<var>Y</var>[i] = <var>B</var>[i] | |||
|- | |- | ||
| | |<code>2</code> or <code>minimum</code> | ||
| | |<var>Y</var> = min(<var>A</var>,<var>B</var>) | ||
|<var>Y</var>[i] = min(<var>A</var>[i],<var>B</var>) | |||
|<var>Y</var>[i] = min(<var>A</var>[i],<var>B</var>[i]) | |||
|- | |- | ||
| | |<code>3</code> or <code>maximum</code> | ||
| | |<var>Y</var> = max(<var>A</var>,<var>B</var>) | ||
| | |<var>Y</var>[i] = max(<var>A</var>[i],<var>B</var>) | ||
|<var>Y</var>[i] = max(<var>A</var>[i],<var>B</var>[i]) | |||
| | |||
|} | |} | ||
{ | |||
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: | |||
<[[../#Signal Processing Atoms|SP-atoms]]> | |||
<!-- AN, 2.5.2011 --> |
Revision as of 13:29, 6 May 2011
Two channel multiplexer.
[SPU SELECTAB A B SEL OUT Y]
input | description | data type | value type | default value |
---|---|---|---|---|
A, B | input data | number, vector | variable | |
SEL | select switch | number (int.), string | variable | |
output | description | data type | value type | comment |
Y | selected data | same type as A | variable |
- Description
-
- A and B are numbers
SEL Ynumber=f(Anumber,Bnumber) Yvector=f(Avector,Bnumber) Ynumber=f(Avector,Bvector) 0
orA
Y = A Y[i] = A[i] Y[i] = A[i] 1
orB
Y = B Y[i] = B Y[i] = B[i] 2
orminimum
Y = min(A,B) Y[i] = min(A[i],B) Y[i] = min(A[i],B[i]) 3
ormaximum
Y = max(A,B) Y[i] = max(A[i],B) Y[i] = max(A[i],B[i])
The averaging algorithm is defined by the inputs TYP and T. The atom averages the elements X[i,j]t over evaluation cycles t (i=row index, j=column index, t=cycle counter) and stores the averaged value in the element Y[i,j]t.
The cycle counter t is initialized with 0 and incremented by 1 after each evaluation cycle. The cycle counter is reset, if the input RS is set to a value greater than 0
. The input RS is checked each time the SPU is started.
- infinite average
- TYP=
0
orlinear
- T=
0
- running average
- TYP=
0
orlinear
- T>
0
; T is the (integer) number of averaging cycles - exponential average
- TYP=
1
orexponential
0
<T<1
; T is the averaging factor- minimum
- TYP=
2
orminimum
- T is not used
- maximum
- TYP=
3
ormaximum
- T is not used
- See also
<SP-atoms>