Перейти к содержанию
    

измерение фазы на выходе БПФ

Коллеги, нужно измерять частоту и фазу входного радиоимпульса. С частотой пока вопросов нет, по номеру бина с максимальным возбуждением вычисляем частоту несущей радиоимпульса. А вот с фазой есть неясности.

На верхней картинке изображено начало входного кадра (первые 100 отсчётов) БПФ 16К с присутствующим радиоимпульсом. 

На нижней картинке совмещены и смасштабированы изображения модуля и фазы для выходного кадра БПФ в окрестности частоты  входного радиосигнала (эта частота соответствует бину номер 2206).

Видно что при увеличении уровня модуля значение фазы начинает "скакать" относительно -20 градусов, т.е. принимает значения -20 +-90. Т.е. (-110 ... +70) градусов.

1). О чём говорят эти значения? На верхней картинке видно что сигнал является синусом и имеет нулевую начальную фазу.

2). Почему происходят скачки фазы? Есть ли какая закономерность этих скачков? 

3). При низком SNR входного сигнала есть вероятность ошибочного определения центрального бина сигнала, а ошибка на один бин даст ошибку фазы 180 градусов. Есть ли методы для борьбы с этим эффектом?

image.thumb.png.b7a8445e1265a67544167fda4ff1984e.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас наверное окно наложено на входной сигнал, без окна пробовали?

И как вы получали фазу - через арктангенс половинок комплексного числа?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 minutes ago, _sda said:

На нижней картинке совмещены и смасштабированы изображения модуля и фазы для выходного кадра БПФ в окрестности частоты  входного радиосигнала (эта частота соответствует бину номер 2206).

Оценку фазы радиоимпульса нужно делать в точке, где модуль спектра имеет максимальное значение.

Значение фазы в других точках показывает фазу отдельных гармоник, из которых состоит весь спектр радиоимпульса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

sin(x)/x колеблется то вверх, то вниз, меняя фазу. А на картинке он показан модулем амплитуды.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

47 минут назад, Lmx2315 сказал:

У вас наверное окно наложено на входной сигнал, без окна пробовали?

И как вы получали фазу - через арктангенс половинок комплексного числа?

Не пробовал и не буду. Частота сигнала неизвестна, может попасть между бинами.

phi = angle(x)

33 минуты назад, blackfin сказал:

Оценку фазы радиоимпульса нужно делать в точке, где модуль спектра имеет максимальное значение.

Значение фазы в других точках показывает фазу отдельных гармоник, из которых состоит весь спектр радиоимпульса.

А если два соседних бина имеют одинаковое максимальное значение модуля спектра, какое значение обрабатывать - первое или последующее? При неправильном выборе будет ошибка в 180 градусов.

34 минуты назад, ViKo сказал:

sin(x)/x колеблется то вверх, то вниз, меняя фазу. А на картинке он показан модулем амплитуды.

Как это поможет извлечь правильное значение фазы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

52 minutes ago, _sda said:

1). О чём говорят эти значения? На верхней картинке видно что сигнал является синусом и имеет нулевую начальную фазу.

2). Почему происходят скачки фазы? Есть ли какая закономерность этих скачков? 

 

3). При низком SNR входного сигнала есть вероятность ошибочного определения центрального бина сигнала, а ошибка на один бин даст ошибку фазы 180 градусов. Есть ли методы для борьбы с этим эффектом?

1,2 вы бы данные приложили, а то не понятно что там за данные и что вы с ними сделали,

3) возьмите +- несколько точек от максимума натяните на них параболу и найдите точнее положение максимума, потом на этой нецелой частоте можно отдельно посчитать интегралы Фурье и из них найти фазу и амплитуду. ну либо потом опять можно повторить поиск максимума по интегралам Фурье в ещё более узкой области, пока не надоест либо пока в шумы не упрётесь.

 

на картинке - 

сигнал;

FFT от него (модуль/агрумент); 

cумма сигнала помноженнего на sin/cos с шагом по частоте гораздо более мелким чем 1 бин (тоже модуль и арктангенс);

наложенные друг на друга 2+3

 

fourier.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 минуту назад, _pv сказал:

1,2 вы бы данные приложили, а то не понятно что там за данные и что вы с ними сделали,

3) возьмите +- несколько точек от максимума натяните на них параболу и найдите точнее положение максимума, потом на этой нецелой частоте можно отдельно посчитать интегралы Фурье и из них найти фазу и амплитуду. ну либо потом опять можно повторить поиск максимума по интегралам Фурье в ещё более узкой области, пока не надоест либо пока в шумы не упрётесь.

Грустно. Максимум модуля по трём точкам я найду,  а вот что с ним дальше делать? Без интегралов Фурье никак? Задача не академическая, нужно будет  реализовывать в FPGA.

По графикам, честно говоря, ничего не понял. Если первый и второй ещё понятны, то третий и четвёртый совсем мимо кассы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3й график это тот же спектр и фаза, но посчитанный через ДПФ на "нецелых" частотах, c гораздо более мелким шагом по частоте.

при наложении одного на другой совпадает с FFT (вот это да!) в тех "целых" частотах где этот FFT считается.

и сколько там ресурсов / тактов на FFT уйдёт?

один дополнительный умножитель для вычисления Герцелем имхо не заметен будет на фоне FFT на 16к.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, _pv сказал:

один дополнительный умножитель для вычисления Герцелем имхо не заметен будет на фоне FFT на 16к.

Что-то я никак не могу понять общий алгоритм действий. Вы предлагаете выхлоп FFT скормить Герцелю? Если не трудно, раскройте ,плз, вашу мысль.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

реальный максимум вполне может оказаться где-то посередине между частотами на которых считает FFT,

можно аппроксимацией какой-нибудь параболой/гауссом/sinc интерполяцией найти реальный максимум, и потом так же интерполировать фазу.

либо взять sin/cos от этой частоты перемножить с сигналом и посчитать фазу.

 

а если FFT нужен только для нахождения максимума, можно с самого начала оценить частоту просто как отношение среднеквадратичных значений сигнала и производной сигнала и считать потом не весь спектр на 16к точек, а только несколько частот около максимума Герцелем.

FFT хоть и O(N log N), но для 16к точек ДПФ на нескольких частотах может оказаться проще/быстрее чем вычисление всего спектра для нахождения одной единственной фазы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

_sda

2). Почему происходят скачки фазы? Есть ли какая закономерность этих скачков?

Вы смотрите сигналы с выходов фильтров, посмотрите ФЧХ этих фильтров и увидите скачки между ними.

3). При низком SNR входного сигнала есть вероятность ошибочного определения центрального бина сигнала, а ошибка на один бин даст ошибку фазы 180 градусов. Есть ли методы для борьбы с этим эффектом?

Просто прибавляется соответствующая номеру фильтра фазовая константа после angle.

Могу на модели фазовой синхронизации в симулинке показать, если будете смотреть...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

51 minutes ago, _sda said:

Что-то я никак не могу понять общий алгоритм действий. Вы предлагаете выхлоп FFT скормить Герцелю?

Не нужен тут никакой Герцель. ))


Просто возьмите лист бумаги и вручную посчитайте коэффициент разложения радиоимпульса в ДПФ.

Там получится простая формула из двух слагаемых для положительных и отрицательных частот.

Отбрасывая слагаемое с отрицательными частотами, получите "точную" формулу для фазы вашего радиоимпульса.

Для вычисления по этой формуле самой фазы вам понадобится точное значение частоты несущей радиоимпульса.

Эту частоту вы можете найти параболической интерполяцией максимума спектра радиоимпульса по трем точкам.

Можно даже вычислить две фазы по бинам слева и справа от несущей и сделать усреднение. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

blackfin

 

Для вычисления по этой формуле самой фазы вам понадобится точное значение частоты несущей радиоимпульса.

Эту частоту вы можете найти параболической интерполяцией максимума спектра радиоимпульса по трем точкам.

Можно даже вычислить две фазы по бинам слева и справа от несущей и сделать усреднение.

И это не нужно.)) На выходе максимального  фильтра банка фильтров ДПФ уже имеется фаза. Нужно только фильтры взять с пекрытием АЧХ, и скачки устранить практически бесплатной операцией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 часов назад, _pv сказал:

а если FFT нужен только для нахождения максимума, можно с самого начала оценить частоту просто как отношение среднеквадратичных значений сигнала и производной сигнала и считать потом не весь спектр на 16к точек, а только несколько частот около максимума Герцелем.

FFT хоть и O(N log N), но для 16к точек ДПФ на нескольких частотах может оказаться проще/быстрее чем вычисление всего спектра для нахождения одной единственной фазы.

О, нет, так не пойдёт, я ведь только задачу описал, типа разберусь с одним сигналом - легче будет с другими. В реальности сигналов может быть много (максимум до сотни) и несущие частоты этих сигналов заранее не известны. Поэтому БПФ используется в основном для определения частот сигналов и их уровня. Это сейчас в рабочий проект нужно добавить измерение фазы.

На свежую голову посмотрел ваши графики, вроде всё понятно. Один вопрос - на четвёртом графике истиный максимум находится на бине 1092,5 и соответствующая ему фаза равна 60 градусов. На первом графике у вас синус с нулевой начальной фазой. Отчего возникает такая разница? Вроде же фаза на максимуме должна быть равна нулю.

image.png.b27f19ece513be87cde94f5f05ee20b9.png

 

13 часов назад, _pv сказал:

можно аппроксимацией какой-нибудь параболой/гауссом/sinc интерполяцией найти реальный максимум, и потом так же интерполировать фазу.

А как можно интерполировать фазу если её значения от бина к бину пляшут на 180 градусов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 часов назад, petrov сказал:

_sda

2). Почему происходят скачки фазы? Есть ли какая закономерность этих скачков?

Вы смотрите сигналы с выходов фильтров, посмотрите ФЧХ этих фильтров и увидите скачки между ними.

Ну да, скачки фазы видно, я их и привёл в топике. Но по их виду трудно определить закономерность. Зная её можно попытаться ввести поправку фазы.

 

13 часов назад, petrov сказал:

_sda

3). При низком SNR входного сигнала есть вероятность ошибочного определения центрального бина сигнала, а ошибка на один бин даст ошибку фазы 180 градусов. Есть ли методы для борьбы с этим эффектом?

Просто прибавляется соответствующая номеру фильтра фазовая константа после angle.

Могу на модели фазовой синхронизации в симулинке показать, если будете смотреть...

 

 

Т.е. вы хотите сказать что каждому выходному бину БПФ соответствует поправка, зависящая только от номера бина? Если это так то круто!

И не зависит от положения максимума между бинами?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...