Корректирующий фильтр IQ imbalance

Все что касается фильтрации
sda
Сообщения: 39
Зарегистрирован: 24 мар 2021, 09:30

Корректирующий фильтр IQ imbalance

Сообщение sda »

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

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Корректирующий фильтр IQ imbalance

Сообщение Бахурин Сергей »

непонятно почему вы не можете применить ваш метод для сигнала в полосе от -Fs/2...+Fs/2. Никакой разницы я не вижу в алгоритме для данной полосы.

sda
Сообщения: 39
Зарегистрирован: 24 мар 2021, 09:30

Re: Корректирующий фильтр IQ imbalance

Сообщение sda »

Спасибо за ответ, с вами мы быстро разберёмся. Как я делаю сейчас:

В полосе 0...Fs/2 я формирую 30 квадратурных синусоидальных пилотов так, чтобы их частоты попали точно в бины FFT.
После этого выполняю FFT для каждого пилота, причём отдельно для реальной и мнимой части.На выходе этих FFT из нужного бина (соответствующего частоте пилота) беру значение сигнала и укладываю в векторы раздельно для косинусной и синусной составляющих входных сигналов. Потом делю первый вектор на второй и получаю вектор ошибки(учитывая фазовый сдвиг 90 градусов между компонентами пилотов). Этот вектор пропускаю через IFFT и получаю ИХ (вещественную!) корректирующего фильтра через который пропускаю мнимую часть входного сигнала. Реальная часть просто пропускается через компенсирующую линию задержки. F0 - это вектор ошибки. Перед применением IFFT к этому вектору я формирую массив nF0.
nF0 = [F0(1:N) conj(F0(N-1 : -1 : 2))]';
h0 = fftshift(ifft(nF0));

h0 - ИХ корректирующего фильтра,

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

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Корректирующий фильтр IQ imbalance

Сообщение Бахурин Сергей »

Нужны некоторые уточнения в терминологии:
sda писал(а):
25 мар 2021, 11:47
В полосе 0...Fs/2 я формирую 30 квадратурных синусоидальных пилотов так, чтобы их частоты попали точно в бины FFT.
Что такое квадратурные пилоты? Это комплекнсые экспоненты? , где n - время, а частоты бинов FFT? Если да, то я не вижу проблем чтобы сформировать эту экспоненту во всем диапазоне частот от -Fs/2 до Fs/2.
sda писал(а):
25 мар 2021, 11:47
На выходе этих FFT из нужного бина (соответствующего частоте пилота) беру значение сигнала и укладываю в векторы раздельно для косинусной и синусной составляющих входных сигналов.
Не совсем понял как взять сигнал на выходе FFT? там же спектральные отсчеты. Вы спектр берете?
Этот вектор пропускаю через IFFT и получаю ИХ (вещественную!) корректирующего фильтра через который пропускаю мнимую часть входного сигнала. Реальная часть просто пропускается через компенсирующую линию задержки. F0 - это вектор ошибки. Перед применением IFFT к этому вектору я формирую массив nF0.
nF0 = [F0(1:N) conj(F0(N-1 : -1 : 2))]';
h0 = fftshift(ifft(nF0));

h0 - ИХ корректирующего фильтра,

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



k =0, 1, 2, ..., N-1 индексы бинов FFT, k от N/2 до N-1 соответсвует частоте от -Fs/2 до 0 или Fs/2 до Fs

sda
Сообщения: 39
Зарегистрирован: 24 мар 2021, 09:30

Re: Корректирующий фильтр IQ imbalance

Сообщение sda »

Уточнения это хорошо, уменьшается вероятность недопонимания друг друга.
Бахурин Сергей писал(а):
25 мар 2021, 12:46
Что такое квадратурные пилоты? Это комплекнсые экспоненты? , где n - время, а частоты бинов FFT? Если да, то я не вижу проблем чтобы сформировать эту экспоненту во всем диапазоне частот от -Fs/2 до Fs/2.
Вы правильно всё поняли, и я тоже в этом месте проблем не вижу.
sda писал(а):
25 мар 2021, 11:47
Не совсем понял как взять сигнал на выходе FFT? там же спектральные отсчеты. Вы спектр берете?
Ну да, спектральные отсчеты я и беру из тех бинов где есть пилоты.
Подход интересный, хотелось бы увидеть модель как это работает.
Придумал лет 10 назад для другой задачи, а теперь вот нужно модернизировать. Кстати, я не нашёл возможности вставить картинки в текст, я бы показал результаты работы модели. Со вставкой картинок, нашёл как.
Если пилоты это комплексные экспоненты, то формируются они так:



k =0, 1, 2, ..., N-1 индексы бинов FFT, k от N/2 до N-1 соответсвует частоте от -Fs/2 до 0 или Fs/2 до Fs
Извиняюсь, но вы не поняли вопроса, речь не о формировании пилотов, а о формировании вектора nF0 (как его сформировать из вектора ошибки F0) который дальше пойдёт в IFFT. И по видимому искомая ИХ станет комплексной, я правильно думаю? Вот здесь я и застрял...

sda
Сообщения: 39
Зарегистрирован: 24 мар 2021, 09:30

Re: Корректирующий фильтр IQ imbalance

Сообщение sda »

В спектре видно образы при подаче 30-ти комплексных экспонент, у каждой из экспонент свой разбаланс IQ.
1.png
А это спектр сигнала на выходе корректирующего фильтра.
2.png
Странно, картинки не открываются... Продублировал url.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Корректирующий фильтр IQ imbalance

Сообщение Бахурин Сергей »

Мне кажется, я понял в чем проблема: Вы заполняете половину полосы сигналом, соответсвенно можете проанализировать имбаланс только для второй (чистой половины полосы)? Если я правильно понял, то можно пойти двумя путями:
1) Разнести частоты гармоник и генерирующих и частоты гармоник, которые вы анализируете во все полосе как на рисунке:
v1.png
v1.png (6.53 КБ) 3792 просмотра
Тогда после IFFT у вас уже получится комплексный фильтр, чья частотная характеристика будет во всей полосе компенсировать IQ разбаланс.

2) Генерировать сначала первую половину полосы получите вещественный фильтр для нее (причем после IFFT не производить манипуляция для получения вещественного фильтра, оставить его комплексным как есть). ЧХ фильтра должна быть только для второй половины (синий на рисунке ниже).
v2.png
v2.png (4.36 КБ) 3792 просмотра
Потом сгенерировать аналогичный фильтр для отрицательных частот (красный на рисунке) и сложить их.

PS для вставки рисунков можно добавить вложения и там будет кнопка вставить в текст:
att.png

sda
Сообщения: 39
Зарегистрирован: 24 мар 2021, 09:30

Re: Корректирующий фильтр IQ imbalance

Сообщение sda »

Бахурин Сергей писал(а):
25 мар 2021, 17:58
Мне кажется, я понял в чем проблема: Вы заполняете половину полосы сигналом, соответсвенно можете проанализировать имбаланс только для второй (чистой половины полосы)? Если я правильно понял, то можно пойти двумя путями:
1) Разнести частоты гармоник и генерирующих и частоты гармоник, которые вы анализируете во все полосе как на рисунке:
v1.png
Тогда после IFFT у вас уже получится комплексный фильтр, чья частотная характеристика будет во всей полосе компенсировать IQ разбаланс.
Для меня это было бы очень хорошим решением, но увы - вопрос о формировании вектора nF0 (как его сформировать из вектора ошибки F0) который дальше пойдёт в IFFT, остаётся открытым. И что делать с комплексным фильтром если на выходе с него я должен получить вещественный сигнал. Ведь этим фильтром я корректирую синусную компоненту входной комплексной экспоненты. Структура корректора на рисунке.
2021-03-25_200357_corrector.png
2021-03-25_200357_corrector.png (4.88 КБ) 3757 просмотров
Здесь Filter вещественный. Как в качестве Filter использовать комплексный - для меня загадка.
Бахурин Сергей писал(а):
25 мар 2021, 17:58
2) Генерировать сначала первую половину полосы получите вещественный фильтр для нее (причем после IFFT не производить манипуляция для получения вещественного фильтра, оставить его комплексным как есть). ЧХ фильтра должна быть только для второй половины (синий на рисунке ниже).

v1.png

Потом сгенерировать аналогичный фильтр для отрицательных частот (красный на рисунке) и сложить их.

PS для вставки рисунков можно добавить вложения и там будет кнопка вставить в текст:

att.png
Всегда считал что вещественный фильтр будет иметь симметричную АЧХ относительно нуля, у вас же на графике обе АЧХ несимметричны, т.е. оба фильтра должны быть комплексными. Или я что то не так понял?
Если же вы предлагаете два комплексных фильтра то на мой взгляд первый вариант предпочтительней. Давайте развивать его.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Корректирующий фильтр IQ imbalance

Сообщение Бахурин Сергей »

sda писал(а):
25 мар 2021, 19:00
Для меня это было бы очень хорошим решением, но увы - вопрос о формировании вектора nF0 (как его сформировать из вектора ошибки F0) который дальше пойдёт в IFFT, остаётся открытым. И что делать с комплексным фильтром если на выходе с него я должен получить вещественный сигнал. Ведь этим фильтром я корректирую синусную компоненту входной комплексной экспоненты. Структура корректора на рисунке.2021-03-25_200357_corrector.png
Здесь Filter вещественный. Как в качестве Filter использовать комплексный - для меня загадка.
В этом проблема. Если вы хотите корректировать только вещественную ветвь, то сможете корректировать только половину частотного диапазона. Если хотите весь диапазон от -Fs/2 до Fs/2 то и сигналы и фильтры должны быть комплексными.
Filt.png
Filt.png (9.07 КБ) 3736 просмотров
Всегда считал что вещественный фильтр будет иметь симметричную АЧХ относительно нуля, у вас же на графике обе АЧХ несимметричны, т.е. оба фильтра должны быть комплексными. Или я что то не так понял?
Если же вы предлагаете два комплексных фильтра то на мой взгляд первый вариант предпочтительней. Давайте развивать его.
Вы можете использовать один суммарный комплексный фильтр (импульсные характеристики красного и синего фильтров на моем рисунке надо сложить, тогда они накроют весь диапазон), который будет обрабатывать комплексный же входной сигнал и выдавать на выход комплексный выходной с подавленным IQ имаджем.

Приведенные два способа калибровки фильтра будут давать примерно один результат, который может быть использован в схеме выше

sda
Сообщения: 39
Зарегистрирован: 24 мар 2021, 09:30

Re: Корректирующий фильтр IQ imbalance

Сообщение sda »

Что то я совсем запутался...А каким образом должен быть сформирован вектор ошибки для комплексного фильтра? Сейчас я действую так: вектор частотных составляющих компонента RE делю на вектор частотных составляющих компонента IM и получаю вектор ошибки. Под ошибкой здесь понимается различие между компонентами по амплитуде и фазе. Т.к. через фильтр пропускается компонент IM, то фильтр его "подтягивает" по параметрам к компоненту RE. Как следствие этого будут подавлены спектральные имаджи, т.е. непосредственно имаджи я не фильтрую, а устраняю причину их возникновения. На вашей картинке выше видно что выходной сигнал фильтра должен представлять собой функцию ошибки входного сигнала. У меня сейчас на выходе фильтра присутствует уже откорректированный сигнал, а у вас функция ошибки. Согласитесь что это немного разные ситуации и метод формирования вектора ошибки должен быть другим.

Ответить