Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сдвиг фазы сигнала
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Denvil
Здравствуйте.

Есть 2 оцифрованных синусоидальных сигнала x1 и x2 во временной области. x2 отстает от x1 по фазе, скажем, на 10 градусов. x2 переводится в частотную область и получается X2. Теперь нужно X2 сдвинуть по фазе на -10 градусов, перевести обратно во временную область и увидеть, что сигналы стали синфазными. Подскажите, пожалуйста, как осуществить этот сдвиг по фазе в частотной области?

P.S. Прошу прощения, если вопрос тривиальный или сформулирован некорректно. Это совсем новая для меня область.
Александр77
Цитата(Denvil @ Apr 13 2011, 05:16) *
Есть 2 оцифрованных синусоидальных сигнала x1 и x2 во временной области. x2 отстает от x1 по фазе, скажем, на 10 градусов. x2 переводится в частотную область и получается X2. Теперь нужно X2 сдвинуть по фазе на -10 градусов, перевести обратно во временную область и увидеть, что сигналы стали синфазными. Подскажите, пожалуйста, как осуществить этот сдвиг по фазе в частотной области?

При переводе вы получаете 2 характеристики:
Амплитудно-частотную
Фазо-частотную.
Вот по ФЧХ и надо сравнивать/сдвигать и затем восстанавливать по обеим характеристикам
st232bd
Пролистайте представление комплексных чисел в векторной форме. Для того, чтобы повернуть вектор комплексного числа не меняя его длины (сдвинуть фазу не меняя амплитуды гармоники), нужно умножить на комплексное число, которое в векторной форме имеет амплитуду = 1, и аргумент равнй 10 градусам (надо в радианы перевести). Через формулу Эйлера переводим в алгебраическую форму записи, расписываем формулы для действительной и мнимой части и применяем их к синусной и косинусной части.
ivan219
Помойму так:

S(n) = Re(n) + Im(n); // Исходный спектр

S'(n) = S(n) * (Cos(Fi) + Sin(Fi)); // Сдвинут по фазе на Fi

Вещественный FFT;
Re' = Re * Cos(Fi) - Im * Sin(Fi);
Im' = Re * Sin(Fi) + Im * Cos(Fi);

Комплексный FFT;
Положительные частоты.
Re' = Re * Cos(Fi) - Im * Sin(Fi);
Im' = Re * Sin(Fi) + Im * Cos(Fi);
Отрицательные.
Re' = Re * Cos(Fi) + Im * Sin(Fi);
Im' = Re * Sin(Fi) - Im * Cos(Fi);

Fi = Pi * 10 / 180;
Denvil
Всем спасибо за ответы. Идею я понял. Но на практике реализовать не получается. Вот что я пытаюсь сделать в MATLAB для проверки:

Код
N = 1024;
n = 0 : (N-1);
PPW = 20; % points per wave
x1 = sin(2 * pi * n / PPW);
X1 = fft(x1);
theta = pi / 4;
P = cos(theta) + j * sin(theta); % phase shift by theta
X2 = X1 * P;
x1i = ifft(X1);
x2i = ifft(X2);


Т.е. я генерирую синусоиду из 1024 точек и пытаюсь сдвинуть ее на 45 градусов. В частотной области вроде бы все хорошо. Я вижу, что ФЧХ X2 сдвинулась на theta радиан. Но результат обратного преобразования Фурье (x2i) представляет собой совсем не то, что я ожидал увидеть - это массив комплексных чисел. Насколько я понимаю, это потому, что ФЧХ после сдвига перестала быть симметричной.

Скажите, правильно ли я все делаю? И если да, то как мне из этого массива комплексных чисел получить сдвинутый сигнал во временной области?
Alexey Lukin
Раз не совладали с комплксным FFT, то используйте FFT и IFFT, предназначенные для вещественного временного сигнала. Тогда комплексных чисел не возникнет.
Gyga
можно взять реальную часть от комплексного сигнала
lux
Цитата(Denvil @ May 6 2011, 07:49) *
Всем спасибо за ответы. Идею я понял. Но на практике реализовать не получается. Вот что я пытаюсь сделать в MATLAB для проверки:

Код
N = 1024;
n = 0 : (N-1);
PPW = 20; % points per wave
x1 = sin(2 * pi * n / PPW);
X1 = fft(x1);
theta = pi / 4;
P = cos(theta) + j * sin(theta); % phase shift by theta
X2 = X1 * P;
x1i = ifft(X1);
x2i = ifft(X2);


Т.е. я генерирую синусоиду из 1024 точек и пытаюсь сдвинуть ее на 45 градусов. В частотной области вроде бы все хорошо. Я вижу, что ФЧХ X2 сдвинулась на theta радиан. Но результат обратного преобразования Фурье (x2i) представляет собой совсем не то, что я ожидал увидеть - это массив комплексных чисел. Насколько я понимаю, это потому, что ФЧХ после сдвига перестала быть симметричной.

Скажите, правильно ли я все делаю? И если да, то как мне из этого массива комплексных чисел получить сдвинутый сигнал во временной области?


Если подытожить, то получим обычное тригонометрическое преобразование sin( a+b )=sin( a )cos( b )+cos( a )sin( b ), где b-сдвиг фазы
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.