## Matlab for Unwrapping Spectral Phase

When spectral phase is processed, it is often necessary
to *unwrap* the phase to make it a ``continuous'' function.
Below is a simple matlab function for this purpose. It is based on
the assumption that phase jumps by more than
radians must have
been ``wrapped''. That is, multiples of
are added or
subtracted so that the phase changes by no more than
from one
spectral bin to the next. Bin 0 (corresponding to dc) is arbitrarily
chosen as ``unwrapped'' and used as a starting point for the
unwrapping algorithm.

###
Matlab listing: `unwrap.m`

function up = unwrap(p) %UNWRAP unwrap phase N = length(p); up = zeros(size(p)); pm1 = p(1); up(1) = pm1; po = 0; thr = pi - eps; pi2 = 2*pi; for i=2:N cp = p(i) + po; dp = cp-pm1; pm1 = cp; if dp>thr while dp>thr po = po - pi2 dp = dp - pi2; end end if dp<-thr while dp<-thr po = po + pi2 dp = dp + pi2; end end cp = p(i) + po; pm1 = cp; up(i) = cp; end

**Next Section:**

Non-Parametric Frequency Warping

**Previous Section:**

Matlab for Computing Spectrograms