2015-03-03 3 views
1

Я имею дело со сложными числами в Matlab, и у меня есть некоторые проблемы с их углами.Предотвращение укорачивания фаз Matlab до 0-2pi в комплексных числах

У меня есть вектор углов, Ph Тогда я хочу построить вектор С комплексных чисел, как:.

C=exp(j*Ph). 

Проблема состоит в том, что Ph содержит отрицательные фазы, поскольку она имеет нечетную симметрию, так может быть дополнительно используемый для синтеза сигнала с использованием IFFT. Эти отрицательные фазы обертываются на 0-2pi в векторе C, теряя их нечетную симметрию.

Можно ли каким-либо образом предотвратить предотвращение упаковки Matlab углами?

Возможно, это невозможно сделать, потому что мы знаем, что математически фаза -30º совпадает с фазой 330º. Но мне интересно, разрушает ли фаза их желаемую нечетную симметрию.

Прилагаю изображение, которое иллюстрирует мою проблему, спасибо!

enter image description here

+0

Я не думаю, что фаза обертывание вопрос здесь - значения, которые вы посылаете в Иффт функции в прямоугольных координатах, поэтому угол затевается по фазе (которая Я не могу найти в документации - угол является нормальным выбором) на самом деле не является входом в функцию. Пока вход сопряжен-симметричен, он должен быть точным, что верно, если ваше реальное четное, а ваше воображаемое нечетно-симметричное. Я не уверен, что все ваши описания и сюжеты выстраиваются в линию - то, что вы описываете, не совсем соответствует тому, что я вижу, но я тоже мог бы что-то недопонимать .... – Katie

+0

Реальная часть C является четно-симметричной, а мнимая часть нечетно-симметричная, извините, я изменил приведенные выше термины, теперь она отредактирована. Я думаю, проблема здесь заключается в использовании функции «freqz». Если я получаю фазу Y как угол (fft (Y)), я получаю то же самое, что и в векторе Ph. Спасибо! – JavaRar

ответ

1

Если у вас есть Mapping Toolbox, есть wrapToPi функция, которая будет делать то, что вы хотите.

Без этого, вам нужно реализовать свой собственный:

function [ lambdaWrapped ] = myWrapToPi(lambda) 
    lambdaWrapped = lambda - floor(lambda/(2*pi)) * 2*pi; 
    lambdaWrapped(lambdaWrapped > pi) = lambdaWrapped(lambdaWrapped > pi) - 2*pi; 
end 

Первая линия обертывания все от 0-2pi, а следующий принимает значения, которые больше, чем р и перемещает их к -pi до 0.

phase = linspace(0, 2*pi, 100); 
plot(phase); 
plot(myWrapToPi(phase)); 

Original plot Wrapped plot

+0

Спасибо, Кэти, но это не исправить мою проблему. То, что вы предлагаете, хорошо, если я хочу определить нечетную симметрию между -pi и pi. Я действительно хочу построить комплексное число с нечетной симметрией в своей фазе, т. Е. Фаза (k) = - фаза (N-k), где N - количество элементов. Но, похоже, это невозможно, поскольку Matlab завершает любую отрицательную фазу до 0-2pi – JavaRar

+0

@JavaRar, я думаю, что конец вашего комментария был отрезан. Я думаю, вам нужно расширить свой вопрос, чтобы немного уточнить - я не уверен, где вы получаете этот сюжет 0-2pi вообще. Функция «угол» для получения фазового угла комплексного числа обертывает -pi на pi. – Katie

+0

Ваш отредактированный комментарий только что прошел. Я думаю, что упаковка -pi в pi вызовет любую нечетную симметрию в фазе, как вы хотите, хотя я смущен, почему вы нуждаетесь в ней для чего-то другого, кроме как сделать симметрию очевидной при ее построении или сделать процедуру проверки симметрии. Как вы сказали в своем вопросе, -30 градусов и 330 градусов математически идентичны, потому что вы работаете с круговыми единицами. Это не должно вызывать никаких проблем, когда вы выполняете IFFT.У вас есть определенные проблемы, которые, по вашему мнению, связаны с фазовой упаковкой? – Katie