Non-Negative Matrix Completion

This page provides source code for the paper:

D. L. Sun and R. Mazumder. Non-negative matrix completion for bandwidth extension: a convex optimization approach, IEEE Workshop on Machine Learning and Signal Processing (MLSP), September 2013.

Matlab code: nmc_admm.m

Example usage:

% generate a random matrix to start (just for testing the code)
V = rand(1000, 1000);

% specify which entries in V are missing
missing = false(size(V));
missing(501:1000, 501:1000) = 1; % set quarter of entries to be missing

% specify which entries in V should be held fixed (i.e., not updated in the algorithm)
fixed = false(size(V));
fixed(1:1000, 1:500) = 1; % hold first half of matrix fixed

% other parameters of the algorithm
lam = 1; % regularization parameter in the objective function
rho = 1; % ADMM parameter
beta = 1; % set beta=1 for KL divergence, beta=2 for Euclidean distance

% run non-negative matrix completion algorithm
[X, ~, ~, ~] = nmc_admm(V, missing, fixed, lam, rho, beta);

Please feel free to contact me with any questions and bug reports: dlsun@stanford.edu.

Application to Bandwidth Extension

In the paper, we applied non-negative matrix completion to the problem of bandwidth extension. Shown below are spectrograms of the bandlimited signal, the full-bandwidth training data, and the recovered signal, alongside the ground truth. You can listen to the audio by clicking on the link below.

AC/DC Example

Bandlimited Signal Training Data Bandwidth Extended Ground Truth
Back in Black Highway to Hell Back in Black Back in Black