routes.lib
A library to handle signal routing in Faust. Its official prefix is ro
.
References
Functions Reference
(ro.)cross
Cross N signals: (x1,x2,..,xn) -> (xn,..,x2,x1)
.
cross
is a standard Faust function.
Usage
cross(N)
_,_,_ : cross(3) : _,_,_
Where:
N
: number of signals (int, as a constant numerical expression)
Note
Special case: cross2
:
cross2 = _,cross(2),_;
(ro.)crossnn
Cross two bus(N)
s.
Usage
(si.bus(2*N)) : crossnn(N) : (si.bus(2*N))
Where:
N
: the number of signals in thebus
(int, as a constant numerical expression)
(ro.)crossn1
Cross bus(N)
and bus(1)
.
Usage
(si.bus(N),_) : crossn1(N) : (_,si.bus(N))
Where:
N
: the number of signals in the firstbus
(int, as a constant numerical expression)
(ro.)cross1n
Cross bus(1)
and bus(N)
.
Usage
(_,si.bus(N)) : crossn1(N) : (si.bus(N),_)
Where:
N
: the number of signals in the secondbus
(int, as a constant numerical expression)
(ro.)crossNM
Cross bus(N)
and bus(M)
.
Usage
(si.bus(N),si.bus(M)) : crossNM(N,M) : (si.bus(M),si.bus(N))
Where:
N
: the number of signals in the firstbus
(int, as a constant numerical expression)M
: the number of signals in the secondbus
(int, as a constant numerical expression)
(ro.)interleave
Interleave R x C cables from column order to row order. input : x(0), x(1), x(2) ..., x(rowcol-1) output: x(0+0row), x(0+1row), x(0+2row), ..., x(1+0row), x(1+1row), x(1+2*row), ...
Usage
si.bus(R*C) : interleave(R,C) : si.bus(R*C)
Where:
R
: the number of row (int, as a constant numerical expression)C
: the number of column (int, as a constant numerical expression)
(ro.)butterfly
Addition (first half) then substraction (second half) of interleaved signals.
Usage
si.bus(N) : butterfly(N) : si.bus(N)
Where:
N
: size of the butterfly (N is int, even and as a constant numerical expression)
(ro.)hadamard
Hadamard matrix function of size N = 2^k
.
Usage
si.bus(N) : hadamard(N) : si.bus(N)
Where:
N
:2^k
, size of the matrix (int, as a constant numerical expression)
(ro.)recursivize
Create a recursion from two arbitrary processors p
and q
.
Usage
_,_ : recursivize(p,q) : _,_
Where:
p
: the forward arbitrary processorq
: the feedback arbitrary processor
(ro.)bubbleSort
Sort a set of N parallel signals in ascending order on-the-fly through the Bubble Sort algorithm.
Mechanism: having a set of N parallel signals indexed from 0 to N - 1, compare the first pair of signals and swap them if sig[0] > sig[1]; repeat the pair comparison for the signals sig[1] and sig[2], then again recursively until reaching the signals sig[N - 2] and sig[N - 1]; by the end, the largest element in the set will be placed last; repeat the process for the remaining N - 1 signals until there is a single pair left.
Note that this implementation will always perform the worst-case computation, O(n^2).
Even though the Bubble Sort algorithm is one of the least efficient ones, it is a useful example of how automatic sorting can be implemented at the signal level.
Usage
si.bus(N) : bubbleSort(N) : si.bus(N)
Where:
N
: the number of signals to be sorted (must be an int >= 0, as a constant numerical expression)