fft_unwrap_phase
Description
Calculate the change in phi and add it to the previous phase.
Syntax
int fft_unwrap_phase( vector & vPhase )
Parameters
- vPhase
- [modify] the data for input, and the result of phase after transform for output
Return
Returns OE_NOERROR for success or error codes for failure.
Examples
Prior to compilation, load fft_utils.c to the workspace by executing the following LabTalk command:
Run.LoadOC("Originlab\fft_utils.c", 16);
To retain fft_utils.c in the workspace for successive sessions, drag and drop the file from the Temporary folder to the System folder.
EX1
#include <fft_utils.h>
void fft_unwrap_phase_ex1()
{
vector<complex> vSignal = {36, -4 + 9.6569i, -4 + 4i, -4 + 1.6569i,
-4, -4 - 1.6569i, -4 - 4i, -4 - 9.6569i};
vector vPhase;
vSignal.GetPhase(vPhase);
//the result should be
//vPhase = {0, 1.9634, 2.3561, 2.7488, 3.1415, -2.7488, -2.3561, -1.9634}
int nRet = fft_unwrap_phase(vPhase);
if( 0 != nRet )
{
printf("fft_unwrap_phase function returned error: %d\n", nRet);
return;
}
}
Remark
In the unwrapping part that is to follow, we look at the difference
between the present and previous values returned by arctan2(), which
is in the range -PI to PI. Now if their difference is greater than 180,
we assume that it has crossed over the branch cut at +-PI. Then we
calculate the change in phi and add it to the previous phase.
WARNING - FOR THIS TO BE RIGHT, THE MAXIMUM PHASE FLUCTUATION SHOULD BE LESS THAN 180!!!
See Also
fftw_fft_unwrap_phase
header to Include
fft_utils.h
Reference
|