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