Mercurial > hg > may
view yetilab/stream/channels.yeti @ 101:2bc6534248fe
Tidier comments
author | Chris Cannam |
---|---|
date | Thu, 21 Mar 2013 21:53:13 +0000 |
parents | d0abc9afe608 |
children | b6db07468ed1 |
line wrap: on
line source
module yetilab.stream.channels; vec = load yetilab.block.fvector; block = load yetilab.block.block; mat = load yetilab.block.fmatrix; interleaved m = ({ cols, rows } = mat.dimensions m; v = vec.zeros (cols * rows); for [0..rows-1] do row: for [0..cols-1] do col: v[col * rows + row] := m[row][col]; done; done; block.block v); deinterleaved rows b = (v = block.data b; mat.generate do row col: v[rows * col + row] done rows ((vec.length v) / rows)); mixedDown m = (if empty? m then block.zeros 0 else { cols, rows } = mat.dimensions m; v = vec.copyOf m[0]; for [1..rows-1] do row: for [0..cols-1] do col: v[col] := v[col] + m[row][col]; done; done; block.block v; fi); mixedDownFromInterleaved rows b = (v = block.data b; cols = ((vec.length v) / rows); v' = vec.zeros cols; for [0..rows-1] do row: for [0..cols-1] do col: v'[col] := v'[col] + v[col * rows + row]; done; done; block.block v'); mixedFromInterleavedTo targetRows rows b = if targetRows == rows then b; elif targetRows == 1 then mixedDownFromInterleaved rows b; else v = block.data b; cols = ((vec.length v) / rows); v' = vec.zeros (cols * targetRows); for [0..targetRows-1] do target: for [0..cols-1] do col: if target < rows then v'[col * targetRows + target] := v[col * rows + target]; elif rows == 1 then v'[col * targetRows + target] := v[col * rows]; fi done done; block.block v'; fi; { interleaved, deinterleaved, mixedDown, mixedDownFromInterleaved, mixedFromInterleavedTo, }