SPOT

Ewout van den Berg, Michael P. Friedlander
August 2013

GPL v3 MATLAB

GitHub

Linear operators are at the core of many of the most basic algorithms for signal and image processing. Matlab’s high-level, matrix-based language allows us to naturally express many of the underlying matrix operations (e.g., computation of matrix-vector products and manipulation of matrices) and is thus a powerful platform on which to develop concrete implementations of these algorithms. Many of the most useful operators, however, do not lend themselves to the explicit matrix representations that Matlab provides. The aim of the Spot Toolbox is to bring the expressiveness of Matlab’s built-in matrix notation to problems for which explicit matrices are not practical.

Here’s simple example that shows how Spot operator primitives can be stitched together using familiar Matlab commands to form more complex operators:

>> n = 1000; x = (1:n)';        % the first column defines a circulant matrix
>> F = opDFT(n);                % create a DFT operator
>> s = sqrt(n)*F*x;             % eigenvalues of C
>> C = real( F'*opDiag(s)*F );  % the circulant operator
>> whos C                       % note the memory footprint...
  Name         Size              Bytes  Class     Attributes

  C         1000x1000            34535  opReal
 y = C*x;                     % apply C to a vector
>> z = C'*y;                    % apply the adjoint of C to a vector
>> double( C(1:5,1) )'          % extract a few elements of the first column

ans =
    1.0000    2.0000    3.0000    4.0000    5.0000