Re: Re: Unwrap list of angles
- To: mathgroup at smc.vnet.net
- Subject: [mg74557] Re: [mg73291] Re: [mg73262] Unwrap list of angles
- From: gardyloo <gardyloo at mail.wsu.edu>
- Date: Mon, 26 Mar 2007 02:04:47 -0500 (EST)
- References: <200702090718.CAA18382@smc.vnet.net> <200702100439.XAA07871@smc.vnet.net>
Hi, all,
This is in response to a relatively old (about two months' worth)
message concerning unwrapping phases. I realized a while ago that the
algorithm I sent to Ben (and to the list) was wrong -- it *usually*
works, but it does NOT ALWAYS return a phase whose sine matches the
original number fed to it. Therefore, if the original algorithm is used,
it can sometimes return incorrect values.
Here's a more reliable algorithm; I haven't found any problems with
it yet:
(*********** UnwrapPhase follows *************)
UnwrapPhase[data_?VectorQ, tol_:Pi, inc_:2 Pi] :=
FixedPoint[
# +
inc*FoldList[
Plus, 0.,
Sign[
Chop[
ListCorrelate[{1, -1}, #],
tol] (*close Chop*)
] (*close Sign*)
]&, (*close FoldList*)
data] (*close FixedPoint and overall function *)
UnwrapPhase[list:{{_,_}..} ]:=
Transpose[
{
list[[All, 1]],
UnwrapPhase[list[[All,-1]]]
}
]
(*********** UnwrapPhase above *************)
I hope the previous thing I sent hasn't screwed anyone up!
C.O.
gardyloo wrote:
> Hi, Ben,
>
> I ended up writing a version of this a while ago. Here's the
> definition I use. The first is for a list of one dimension; it's used in
> the second definition (since I usually deal with lists of two dimensions
> where the second element in the ordered pairs is the phase.
>
> UnwrapPhase[list_ /; Length[Dimensions[list]] == 1] :=
>
> Module[{newTest,
>
> lC =
>
> Mod[
>
> ListCorrelate[{-1, 1}, list], Pi, -Pi/2]}, newTest[1] = list[[1]];
>
> newTest[i_] := newTest[i] = newTest[i - 1] + lC[[i - 1]];
>
> newTest[#] & /@ Range[Length[list]]]
>
> UnwrapPhase[list:{{_,_}..} ]:=
>
> Transpose[
>
> {
>
> list[[All, 1]],
>
> UnwrapPhase[list[[All,-1]]]
>
> }
>
> ]
>
>
>
>
> Hope that helps!
>
> C.O.
>
> ben wrote:
>
>> Dear all
>>
>> I am looking for a Mathematica-analogue of the unwrap function in another system:
>> I have a list of angles and want to add multiples of 2*pi to them, so
>> that there
>> are no 'jumps' between subsequent entries.
>> Is there a ready-made function?
>>
>> Bye
>> Ben
>>
>>
>>
>>
>>
>
>
--
==========================================================
Curtis Osterhoudt
gardyloo at mail.remove_this.wsu.and_this.edu
PGP Key ID: 0x088E6D7A
Please avoid sending me Word or PowerPoint attachments
See http://www.gnu.org/philosophy/no-word-attachments.html
==========================================================