Корректирующий фильтр IQ imbalance
Корректирующий фильтр IQ imbalance
Методом частотной выборки я проектирую этот корректирующий фильтр, и он прекрасно работает. Проблема в том что он работает только внутри зоны Найквиста(либо первой либо второй), а мне хотелось бы сделать корректор для полосы
-Fs/2...+Fs/2 (ну или 0...Fs). Этот метод позволяет рассчитать такой фильтр? Видимо тут нужен другой подход?
-Fs/2...+Fs/2 (ну или 0...Fs). Этот метод позволяет рассчитать такой фильтр? Видимо тут нужен другой подход?
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Корректирующий фильтр IQ imbalance
непонятно почему вы не можете применить ваш метод для сигнала в полосе от -Fs/2...+Fs/2. Никакой разницы я не вижу в алгоритме для данной полосы.
Re: Корректирующий фильтр IQ imbalance
Спасибо за ответ, с вами мы быстро разберёмся. Как я делаю сейчас:
В полосе 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?
И видимо фильтр должен быть комплексным, так как в разных зонах Найквиста ошибки могут отличаться. Так?
В полосе 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?
И видимо фильтр должен быть комплексным, так как в разных зонах Найквиста ошибки могут отличаться. Так?
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Корректирующий фильтр IQ imbalance
Нужны некоторые уточнения в терминологии:
k =0, 1, 2, ..., N-1 индексы бинов FFT, k от N/2 до N-1 соответсвует частоте от -Fs/2 до 0 или Fs/2 до Fs
Что такое квадратурные пилоты? Это комплекнсые экспоненты? , где n - время, а частоты бинов FFT? Если да, то я не вижу проблем чтобы сформировать эту экспоненту во всем диапазоне частот от -Fs/2 до Fs/2.
Не совсем понял как взять сигнал на выходе 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
Re: Корректирующий фильтр IQ imbalance
Уточнения это хорошо, уменьшается вероятность недопонимания друг друга.
Вы правильно всё поняли, и я тоже в этом месте проблем не вижу.Бахурин Сергей писал(а): ↑25 мар 2021, 12:46Что такое квадратурные пилоты? Это комплекнсые экспоненты? , где n - время, а частоты бинов FFT? Если да, то я не вижу проблем чтобы сформировать эту экспоненту во всем диапазоне частот от -Fs/2 до Fs/2.
Ну да, спектральные отсчеты я и беру из тех бинов где есть пилоты.
Придумал лет 10 назад для другой задачи, а теперь вот нужно модернизировать. Кстати, я не нашёл возможности вставить картинки в текст, я бы показал результаты работы модели. Со вставкой картинок, нашёл как.Подход интересный, хотелось бы увидеть модель как это работает.
Извиняюсь, но вы не поняли вопроса, речь не о формировании пилотов, а о формировании вектора nF0 (как его сформировать из вектора ошибки F0) который дальше пойдёт в IFFT. И по видимому искомая ИХ станет комплексной, я правильно думаю? Вот здесь я и застрял...Если пилоты это комплексные экспоненты, то формируются они так:
k =0, 1, 2, ..., N-1 индексы бинов FFT, k от N/2 до N-1 соответсвует частоте от -Fs/2 до 0 или Fs/2 до Fs
Re: Корректирующий фильтр IQ imbalance
В спектре видно образы при подаче 30-ти комплексных экспонент, у каждой из экспонент свой разбаланс IQ.
А это спектр сигнала на выходе корректирующего фильтра.
Странно, картинки не открываются... Продублировал url.- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Корректирующий фильтр IQ imbalance
Мне кажется, я понял в чем проблема: Вы заполняете половину полосы сигналом, соответсвенно можете проанализировать имбаланс только для второй (чистой половины полосы)? Если я правильно понял, то можно пойти двумя путями:
1) Разнести частоты гармоник и генерирующих и частоты гармоник, которые вы анализируете во все полосе как на рисунке: Тогда после IFFT у вас уже получится комплексный фильтр, чья частотная характеристика будет во всей полосе компенсировать IQ разбаланс.
2) Генерировать сначала первую половину полосы получите вещественный фильтр для нее (причем после IFFT не производить манипуляция для получения вещественного фильтра, оставить его комплексным как есть). ЧХ фильтра должна быть только для второй половины (синий на рисунке ниже).
Потом сгенерировать аналогичный фильтр для отрицательных частот (красный на рисунке) и сложить их.
PS для вставки рисунков можно добавить вложения и там будет кнопка вставить в текст:
1) Разнести частоты гармоник и генерирующих и частоты гармоник, которые вы анализируете во все полосе как на рисунке: Тогда после IFFT у вас уже получится комплексный фильтр, чья частотная характеристика будет во всей полосе компенсировать IQ разбаланс.
2) Генерировать сначала первую половину полосы получите вещественный фильтр для нее (причем после IFFT не производить манипуляция для получения вещественного фильтра, оставить его комплексным как есть). ЧХ фильтра должна быть только для второй половины (синий на рисунке ниже).
Потом сгенерировать аналогичный фильтр для отрицательных частот (красный на рисунке) и сложить их.
PS для вставки рисунков можно добавить вложения и там будет кнопка вставить в текст:
Re: Корректирующий фильтр IQ imbalance
Для меня это было бы очень хорошим решением, но увы - вопрос о формировании вектора nF0 (как его сформировать из вектора ошибки F0) который дальше пойдёт в IFFT, остаётся открытым. И что делать с комплексным фильтром если на выходе с него я должен получить вещественный сигнал. Ведь этим фильтром я корректирую синусную компоненту входной комплексной экспоненты. Структура корректора на рисунке. Здесь Filter вещественный. Как в качестве Filter использовать комплексный - для меня загадка.Бахурин Сергей писал(а): ↑25 мар 2021, 17:58Мне кажется, я понял в чем проблема: Вы заполняете половину полосы сигналом, соответсвенно можете проанализировать имбаланс только для второй (чистой половины полосы)? Если я правильно понял, то можно пойти двумя путями:
1) Разнести частоты гармоник и генерирующих и частоты гармоник, которые вы анализируете во все полосе как на рисунке:
v1.png
Тогда после IFFT у вас уже получится комплексный фильтр, чья частотная характеристика будет во всей полосе компенсировать IQ разбаланс.
Всегда считал что вещественный фильтр будет иметь симметричную АЧХ относительно нуля, у вас же на графике обе АЧХ несимметричны, т.е. оба фильтра должны быть комплексными. Или я что то не так понял?Бахурин Сергей писал(а): ↑25 мар 2021, 17:582) Генерировать сначала первую половину полосы получите вещественный фильтр для нее (причем после IFFT не производить манипуляция для получения вещественного фильтра, оставить его комплексным как есть). ЧХ фильтра должна быть только для второй половины (синий на рисунке ниже).
v1.png
Потом сгенерировать аналогичный фильтр для отрицательных частот (красный на рисунке) и сложить их.
PS для вставки рисунков можно добавить вложения и там будет кнопка вставить в текст:
att.png
Если же вы предлагаете два комплексных фильтра то на мой взгляд первый вариант предпочтительней. Давайте развивать его.
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Корректирующий фильтр IQ imbalance
В этом проблема. Если вы хотите корректировать только вещественную ветвь, то сможете корректировать только половину частотного диапазона. Если хотите весь диапазон от -Fs/2 до Fs/2 то и сигналы и фильтры должны быть комплексными.sda писал(а): ↑25 мар 2021, 19:00Для меня это было бы очень хорошим решением, но увы - вопрос о формировании вектора nF0 (как его сформировать из вектора ошибки F0) который дальше пойдёт в IFFT, остаётся открытым. И что делать с комплексным фильтром если на выходе с него я должен получить вещественный сигнал. Ведь этим фильтром я корректирую синусную компоненту входной комплексной экспоненты. Структура корректора на рисунке.2021-03-25_200357_corrector.png
Здесь Filter вещественный. Как в качестве Filter использовать комплексный - для меня загадка.
Вы можете использовать один суммарный комплексный фильтр (импульсные характеристики красного и синего фильтров на моем рисунке надо сложить, тогда они накроют весь диапазон), который будет обрабатывать комплексный же входной сигнал и выдавать на выход комплексный выходной с подавленным IQ имаджем.Всегда считал что вещественный фильтр будет иметь симметричную АЧХ относительно нуля, у вас же на графике обе АЧХ несимметричны, т.е. оба фильтра должны быть комплексными. Или я что то не так понял?
Если же вы предлагаете два комплексных фильтра то на мой взгляд первый вариант предпочтительней. Давайте развивать его.
Приведенные два способа калибровки фильтра будут давать примерно один результат, который может быть использован в схеме выше
Re: Корректирующий фильтр IQ imbalance
Что то я совсем запутался...А каким образом должен быть сформирован вектор ошибки для комплексного фильтра? Сейчас я действую так: вектор частотных составляющих компонента RE делю на вектор частотных составляющих компонента IM и получаю вектор ошибки. Под ошибкой здесь понимается различие между компонентами по амплитуде и фазе. Т.к. через фильтр пропускается компонент IM, то фильтр его "подтягивает" по параметрам к компоненту RE. Как следствие этого будут подавлены спектральные имаджи, т.е. непосредственно имаджи я не фильтрую, а устраняю причину их возникновения. На вашей картинке выше видно что выходной сигнал фильтра должен представлять собой функцию ошибки входного сигнала. У меня сейчас на выходе фильтра присутствует уже откорректированный сигнал, а у вас функция ошибки. Согласитесь что это немного разные ситуации и метод формирования вектора ошибки должен быть другим.