Меня немного смущает функция angle() в Matlab, в частности, когда она применяется к массиву действительных чисел.
Функция angle() должна дать мне фазу комплексного числа. Пример: y = a + bi, ==> фаза = arctan(b/a). Действительно, следующие работы:
for t=1:1000
comp(t) = exp(1i*(t/10));
end
phase_good_comp1 = unwrap(angle(comp)); %this gives me the right answer
b = imag(comp);
a = real(comp);
phase_good_comp2 = atan(b./a); %this gives me the right answer too, but
wrapped (not sure if there is a way to unwrap this, but unwrap() does not
work)
figure(1)
plot(phase_good_comp1)
hold on
plot(phase_good_comp2,'--r')
legend('good phase1', 'good phase2')
title('complex number')
Вот график для комплексных чисел -
Обратите внимание, что я могу использовать либо функцию angle(), либо явное определение фазы, как показано выше. Оба дают хорошие результаты (я не могу развернуть последний, но это не моя проблема).
Теперь, если я применю ту же логику к массиву действительных чисел, я должен получить постоянную фазу везде, поскольку мнимой части не существует, поэтому arctan(b/a) = arctan(0) = 0. Это работает, если я использую явное выражение определение фазы, но я получаю странный результат, если использую angle():
for t=1:1000
ree(t) = cos((t/10));
end
phase_bad_re = unwrap(angle(ree)); %this gives me an unreasonable (?) answer
b = imag(ree);
a = real(ree);
phase_good_re = atan(b./a); %this gives me the right answer
figure(1)
plot(phase_bad_re)
hold on
plot(phase_good_re,'--r')
legend('bad phase', 'good phase')
title('real number')
Вот график для реальных чисел -
Почему колебание, когда я использую угол ()???
atan2
? - person bright-star   schedule 16.02.2017