Jun He, Dejiao Zhang, and I are happy to share our preprint and our code on t-GRASTA, a variant of GRASTA which includes estimation of geometric transformations of the data (such as translations and rotations of images, so that we can deal with jitter).


The GRASTAcam code is availabile for download here. This code uses OpenCV to run Grasta using the camera on your computer. It was written by Arthur Szlam (with makefile by Jia Xu, Thanks Jia!) in C using the Intel MKL library.


Grassmannian Robust Adaptive Subspace Tracking Algorithm (GRASTA), is an algorithm for subspace identification and tracking in the presence of corrupted and missing data. The algorithm is derived using the Augmented Lagrangian for an l1 cost function. See our page on GRASTA for code and a description of the algorithm.



Grassmannian Rank-One Update Subspace Estimation (GROUSE), is an online algorithm for subspace identification and tracking when data vectors are incomplete. See our page on GROUSE for details about the algorithm. GROUSE can be used for matrix completion; download grouse.m for the Matlab function and rungrouse.m to see how to run it.

Edit September 24, 2018:

For a long time I’ve had an updated version of the code with our various new step-size schemes, but finally I am putting it online! Download grouse2.m for the new Matlab function, and rungrouse2.m to see how to run it.

Relevant new publications are Dejiao Zhang’s AIStats paper with the greedy step-size scheme for full data and our ongoing submission on arxiv that has the same step size for missing/compressed data and even further analysis. The AIStats submission includes a noisy scheme that is NOT included in the code here. It currently requires an accurate estimate of the noise bounds, but we hope to develop a technique for estimating the noise variance online, and we will update this post again when we do!

Generating all rooted trees

Matlab code to enumerate all possible trees on n nodes: I wrote this awhile ago when I needed to enumerate all possible trees that could be formed by a set of n nodes. There are n^(n-1) such trees. This code uses the fact that there is a bijection between these trees and Prufer sequences. Here is tree_enumeration.m, which is a skeleton file for running code on all possible trees, and here is the function for generating the next tree, get_next_tree.m.

Compressed Sensing in Audio Signals

A demo for Compressed Sensing in Audio Signals can be found here, along with matlab code for the examples.

Blind Calibration

Blind Calibration examples and code can be found here.