Я могу извлечь фазу комплексного числа в Matlab, используя функции atan()
или atan2()
.
atan()
возвращается в интервале, ограниченном [-pi/2,pi/2]
, а atan2()
возвращается в интервале, ограниченном [-pi,pi]
.
Я хочу посмотреть, смогу ли я развернуть извлеченную фазу в каждомв случае использования функции unwrap()
, но unwrap
действует только на фазе, извлеченной с помощью atan2()
.
R = 1; % Magnitude
theta = linspace(0,6*pi,100); % (radians) Angle array
theta_atan = zeros(1,length(theta)); % Prellocate for calculation
theta_atan2 = zeros(1,length(theta)); % Prellocate for calculation
X = zeros(1,length(theta)); %Prelloc.
Y = zeros(1,length(theta)); %Prelloc.
for i = 1:length(theta)
X(i) = R*cos(theta(i)); % Real part
Y(i) = R*sin(theta(i)); % Imaginary part
theta_atan(i) = atan(Y(i)/X(i));
theta_atan2(i) = atan2(Y(i),X(i));
end
Я строю развернутую извлеченную фазу, используя каждый метод:
figure(666)
plot(theta,unwrap(theta_atan));
hold on
plot(theta,unwrap(theta_atan2));
legend('theta atan','theta atan2')
xlabel('input phase')
ylabel('extracted phase')
Однако, как вы можете видеть, развертывание эффективно только в случае atan2()
.Даже если я использую unwrap(theta_atan, pi/2)
(в этом случае развертывание основано на приращениях pi / 2 вместо значения по умолчанию, pi), мне не удастся правильно развернуть фазу atan()
.
![Fig.](https://cdn1.imggmi.com/uploads/2019/1/29/18f005068b2574a7982dba707408920e-full.jpg)