根据上述分析unwrap与wrap的关系可以表达为
u
n
w
r
a
p
(
x
)
=
w
r
a
p
(
x
)
±
360
∗
w
r
a
p
N
u
m
b
e
r
(
x
)
unwrap(x) = wrap(x) ± 360 * wrapNumber(x)
unwrap(x)=wrap(x)±360∗wrapNumber(x)
公式中的±分别对应数据递增或递减的情况,将其使用wrapCycle表示,公式可变为
u
n
w
r
a
p
(
x
)
=
w
r
a
p
(
x
)
−
w
r
a
p
C
y
c
l
e
∗
w
r
a
p
N
u
m
b
e
r
(
x
)
unwrap(x) = wrap(x) - wrapCycle * wrapNumber(x)
unwrap(x)=wrap(x)−wrapCycle∗wrapNumber(x)
公式中每个对应的数据点均为其对应一个wrapCycle表示其跳变,公式可变为
u
n
w
r
a
p
(
x
)
=
w
r
a
p
(
x
)
−
w
r
a
p
C
y
c
l
e
(
x
)
∗
w
r
a
p
N
u
m
b
e
r
(
x
)
unwrap(x) = wrap(x) - wrapCycle(x) * wrapNumber(x)
unwrap(x)=wrap(x)−wrapCycle(x)∗wrapNumber(x)
MATLAB手动实现
%% unwrap
% unwrap(x) = wrap(x) - wrapCycle*wrapNum(x)
% data0
Data = [-59, -92, -126, -158, 166, 133, 96, 61, 26, -7, -18, -59, -92, -126, -158, 166, 133, 96, 61, 26, -7, -18];
subplot(3, 1, 1);
plot(1:length(Data), Data);
title('Ram simulated data')
grid on;
% use system function unwrap
unwrap_Data = unwrap(deg2rad(Data), [], 2);
unwrap_finallyData = rad2deg(unwrap_Data);
subplot(3, 1, 2);
plot(1:length(Data), unwrap_finallyData);
title('Use system function unwrap')
grid on;
% try to simulate unwrap
length_Data = length(Data);
finallyData = [];
CycleNumber = [];
wrapCycle = [];
% calculata CycleNum
for i = 1 : length_Data
if i > 1
if (Data(i) - Data(i-1)) > 180
CycleNumber(i)= CycleNumber(i-1) + 1;
elseif (Data(i) - Data(i-1)) < -180
CycleNumber(i) = CycleNumber(i-1) + 1;
else
CycleNumber(i) = CycleNumber(i-1);
end
else
CycleNumber(i) = 0;
end
end
% calculata wrapCycle
for i = 1 : length_Data
if i > 1
if (Data(i) - Data(i-1)) > 180
wrapCycle(i)= 360;
elseif (Data(i) - Data(i-1)) < -180
wrapCycle(i) = -360;
else
wrapCycle(i) = wrapCycle(i-1);
end
else
wrapCycle(i) = 0;
end
end
% updata Data
for i = 1 : length_Data
finallyData(i) = Data(i) - wrapCycle(i)*CycleNumber(i);
end
subplot(3, 1, 3);
plot(1:length(Data), finallyData);
title('try to simulate unwrap')
grid on;