SPOT
Ewout van den Berg, Michael P. Friedlander
August 2013
GPL v3
MATLAB
GitHubLinear 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