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







