• Регистрация
sda
sda+0.66
н/д
  • Написать
  • Подписаться

IQ Imbalance Compensation

Здравствуйте!

Мне нужно скорректировать ошибку фазы между компонентами квадратурного сигнала (cos и sin).

Допустим их разность фаз не 90 а 92 градуса. Требуется убрать лишние два градуса.

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

Фаза корректируется с точностью до наоборот, например:

При входной ошибке фазы +1 градусов, на выходе получаю ошибку +2 градусов.

При входной ошибке фазы +10 градусов, на выходе получаю ошибку +20 градусов.

При входной ошибке фазы -10 градусов, на выходе получаю ошибку -20 градусов.

Т.е. фазовая ошибка вычисляется правильно, но неправильно применяется, знак не тот.

Коллеги, можете что-то подсказать?

Теги

      25.02.2021

      Ответы

      • aBoomest
        aBoomest+406.49
        25.02.2021 23:04

        Конкретика? Сложно что-то сказать не имея данных. Что хотелось, что получилось, какие выборки брали . . . ?

        • sda
          sda+0.66
          26.02.2021 13:10

          Что хотелось, что получилось - вроде выше всё описал что хотелось.

          В полосе 0...Fs/2 я формирую 30 квадратурных пилотов так, чтобы их частоты попали точно в бины FFT. 

          После этого выполняю FFT для каждого пилота, причём отдельно для реальной и мнимой части.На выходе этих FFT из нужного бина беру значение сигнала и укладываю в векторы раздельно для real и для imag входных сигналов. Потом делю первый вектор на второй и получаю вектор ошибки(учитывая  фазовый сдвиг 90 градусов между компонентами пилотов). Этот вектор пропускаю через IFFT и получаю ИХ корректирующего фильтра через который пропускаю мнимую часть входного сигнала. 

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

          При входной ошибке фазы +1 градусов от 90, на выходе получаю ошибку +2 градусов.

          При входной ошибке фазы +10 градусов от 90, на выходе получаю ошибку +20 градусов.

          При входной ошибке фазы -10 градусов от 90, на выходе получаю ошибку -20 градусов.

          Во всех случаях ошибка должна быть 0 градусов относительно фазы 90 градусов. Т.е. фазовая ошибка вычисляется правильно, но неправильно применяется, знак не тот.

          Вкратце всё.

          • aBoomest
            aBoomest+406.49
            28.02.2021 14:31

            Потом делю первый вектор на второй и получаю вектор ошибки(учитывая фазовый сдвиг 90 градусов между компонентами пилотов). Этот вектор пропускаю через IFFT и получаю ИХ корректирующего фильтра через который пропускаю мнимую часть входного сигнала.

            А с противоположным знаком не надо взять перед ИФФТ?

            • sda
              sda+0.66
              28.02.2021 16:36

              Не, со знаком у меня всё нормально. Я уже нашёл ошибку, всё работает отлично, мой косяк.

              Спасибо за неравнодушие!

              • falton
                falton0.00
                28.02.2021 23:21

                раньше путался в этом 

                • sda
                  sda+0.66
                  24.03.2021 09:27

                  Коллеги, получиться то у меня получилось но только для одной зоны Найквиста, либо для первой либо для второй. Позволяет ли этот метод реализовать фильтр в полосе -Fs/2...+Fs/2? Я пока обхожусь двумя корректирующими фильтрами, для каждой зоны свой, но может есть более красивое решение?

                  • aBoomest
                    aBoomest+406.49
                    24.03.2021 23:02

                    Философский вопрос: а на практике отрицательная полоса частот бывает? :)

                    • sda
                      sda+0.66
                      25.03.2021 09:05

                      А если я скажу что хочу полосу 0...Fs разве это изменит что то в математике?