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}}}}
====SELECTAB - 2 channel multiplexer====
Two channel multiplexer.
 
==<code>[SPU SELECTAB <var>A B SEL</var> OUT <var>Y</var>]</code>==
=====Usage:=====
{|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
=====Inputs:=====
 
{|
|-
|-
|<var>A, B</var>
|<var>SEL</var>||select switch ||number (int.), string||variable
|data input <var>A</var> and <var>B</var> (number or vector, see I/O configuration table)
|-
|-
|<var>SEL</var>
!output !!description !!data type !!value type!!comment
|selection and/or condition
|}
 
=====Outputs:=====
 
{|
|-
|-
|<var>Y</var>
|<var>Y</var>||selected data ||same type as <var>A</var> ||variable
|output for selected data input (same type as <var>A</var>)
|}
|}


=====Function:=====
;Description:
 
:;<var>A</var> and <var>B</var> are numbers:
This atom implements a direct or conditional 2-channel multiplexer controlled via the input <var>SEL</var>. The input <var>SEL</var> is checked at the beginning of each evaluation cycle.
::{|class="einrahmen"
 
!SEL
Table 23: Multiplexer method selected by input <var>SEL</var>
! <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>)
|-
|-
|value of SEL
|<code>0</code> or <code>A</code>
|value copied to Y
|<var>Y</var> = <var>A</var>
|<var>Y</var>[i] = <var>A</var>[i]
|<var>Y</var>[i] = <var>A</var>[i]
|-
|-
|0 or A
|<code>1</code> or <code>B</code>
|input A is copied to output Y
|<var>Y</var> = <var>B</var>
|<var>Y</var>[i] = <var>B</var>
|<var>Y</var>[i] = <var>B</var>[i]
|-
|-
|1 or B
|<code>2</code> or <code>minimum</code>
|input B is copied to output Y
|<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])
|-
|-
|2 or MINIMUM
|<code>3</code> or <code>maximum</code>
|Min(A, B) is copied to Yfor vectors, the operation is applied element by element!
|<var>Y</var> = max(<var>A</var>,<var>B</var>)
|-
|<var>Y</var>[i] = max(<var>A</var>[i],<var>B</var>)
|3 or MAXIMUM
|<var>Y</var>[i] = max(<var>A</var>[i],<var>B</var>[i])
|Max(A, B) is copied to Yfor vectors, the operation is applied element by element!
|}
|}


Table 24: Possible I/O configurations:


{|
 
|-
 
|type of input A
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>.
|type of input B
 
|type of output Y
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.
|assignment
:;infinite average:
|-
::<var>TYP</var>=<code>0</code> or <code>linear</code>
|Number
::<var>T</var>=<code>0</code>
|number
::<math>Y[i,j]_t =
|number
\begin{cases}
|Y is set to A or B
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
|Vector
\end{cases}
|number
</math>
|vector
:;running average:
|Y[i] is set to A[i] or B
::<var>TYP</var>=<code>0</code> or <code>linear</code>
|-
::<var>T</var>&gt;<code>0</code>; <var>T</var> is the (integer) number of averaging cycles
|vector
::<math>Y[i,j]_t =
|vector
\begin{cases}
|vector
\frac{1}{t+1}\sum_{z=0}^t X[i,j]_z & \mbox{if }0\leqslant t < T \\
|Y[i] is set to A[i] or B[i]
\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>&lt;<var>T</var>&lt;<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 or A Y = A Y[i] = A[i] Y[i] = A[i]
1 or B Y = B Y[i] = B Y[i] = B[i]
2 or minimum Y = min(A,B) Y[i] = min(A[i],B) Y[i] = min(A[i],B[i])
3 or maximum 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 or linear
T=0
{\displaystyle 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}}}
running average
TYP=0 or linear
T>0; T is the (integer) number of averaging cycles
{\displaystyle 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}}}
exponential average
TYP=1 or exponential
0<T<1; T is the averaging factor
{\displaystyle 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}}}
minimum
TYP=2 or minimum
T is not used
{\displaystyle 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}}}
maximum
TYP=3 or maximum
T is not used
{\displaystyle 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}}}
See also

<SP-atoms>

Navigation menu

Personal tools