Разность фаз по бинам с использованием FFT - сдвиги 2pi даже после использования фазовой развертки

Я просматривал похожие вопросы на StackOverflow, и ни один из них, похоже, не касается этого конкретно.

Я пытаюсь найти разность фаз между двумя сигналами. Чтобы проверить, можно ли использовать этот результат, я ввел одну задержку выборки между двумя сигналами.

Что-то вроде этого:

    ch1 = randn(frame_length * 100, 1);
    ch2 = [0 ; ch1(1:end-1) ];

После этого я просматриваю сигнал, беру БПФ и строю разность фаз. Нравится:

    phase_1 = unwrap(arg(bin_wise_struct.fft_out_ch1));
    phase_2 = unwrap(arg(bin_wise_struct.fft_out_ch2));
    phase_diff = (phase_1 - phase_2);

Однако я заметил, что конечная разность фаз имеет случайные скачки в 2*pi. Я хотел бы знать, почему это происходит, несмотря на разворачивание фазы исходных сигналов.


person neeraj baji    schedule 07.03.2014    source источник


Ответы (1)


Если вы не отцентрируете опорную фазу БПФ по центру апертуры (используя fftshift), а не по переднему/заднему краю, то фаза любого разрыва сигнала (между началом и концом апертуры БПФ) будет чередоваться между Бункеры результатов БПФ.

Развертка, возможно, перевернет знак и добавит 2pi.

Знак фазы меняется, потому что БПФ пытается измерить фазу функции Sinc, которая представляет собой прямоугольное окно для любых непериодических данных по апертуре. Fftshift «искажает» сложную функцию Sinc, так что ее фаза больше не меняется.

Попробуйте сравнить фазы, используя fftshift (либо поворот данных до fft, либо чередование знака после fft), и посмотрите, дает ли это более надежные результаты фазового смещения.

person hotpaw2    schedule 07.03.2014