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

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

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

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

В том и идея, чтобы формировать имейдж во все полосе. Для этого достаточно знать одно: имейдж связан с комплексно сопряженным выходным сигналом. Нам лишь нужно эту связь установить. Для этого надо две выборки: входной сигнал во всей полосе и имейдж во всей полосе, который описывается через линейный фильтр сопряженного входного сигнала.

Для калибровки необходимо разнести частоты как я приводил на рисунке от 25 марта,иначе имейдж от сигнала из второй зоны попадёт на сигнал первой и их нельзя будет различить.

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

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

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

Сообщение sda »

Тоже немного отвлёкся... Моделировать я обычно начинаю когда становится ясен весь механизм взаимодействия узлов в разрабатываемом модуле. Сейчас такой ясности нет, есть тёмные места которые вы затрагиваете вскользь и мои главные вопросы остаются без ответов(например о двух сигналах в разных зонах). Я, например, не могу себе представить как будет выглядеть результирующая АЧХ этого комплексного фильтра, чтобы один фильтр одновременно давил два сигнала в разных зонах а их образы пропускал без изменений. Мне нужно ещё подумать.

p.s. И если фильтр сможет это сделать то зачем давить сигналы и пропускать образы? Ведь можно просто давить образы а сигналы пропускать и тогда на выходе фильтра сразу будет чистый сигнал. Вы согласны?

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

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

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

Нет не согласен. Потому что возникновение имейджа процедура нелинейная поэтому линейный фильтр их не сможет отфильтровать. Их нужно формировать через комплексное сопряжение.

PS
На данный момент я предлагаю подождать ясности с вашей стороны. Моменты которые я "затрагиваю вскользь" гораздо проще понять через 20 строк скрипта симуляции в матлабе или питоне, чем умозрительно пытаться донести текстом. Поэтому если ваша цель разобраться с вопросом то начинайте симуляцию и я помогу. А искать теоретические пробелы смысла нет.

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

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

Сообщение sda »

Бахурин Сергей писал(а):
01 апр 2021, 16:02
Нет не согласен. Потому что возникновение имейджа процедура нелинейная поэтому линейный фильтр их не сможет отфильтровать. Их нужно формировать через комплексное сопряжение.
Теперь моя очередь не соглашаться. На первом листе в сообщении от 25 мар 2021, 16:21 я показал результат работы моего существующего фильтра, он прекрасно справляется с уничтожением образов при любой амплитуде входных сигналов, нелинейность здесь ни при чём. Ключевое слово здесь "поэтому линейный фильтр их не сможет отфильтровать". Дело в том что на тех картинках фильтр совершенно не отфильтровывает образы, просто он устраняет причину их возникновения. На мой взгляд это принципиальная разница.

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

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

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

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


Я тут промоделировал комплексный фильтр компенсатор.
Вот например спектр входного сигнала во всей полосе в виде суммы комплексных экспонент на некоторых бинах FFT. Длина входного сигнала 2048 отсчетов, он содержит 31 гармонику, так чтобы бины в положительной и отрицательной областях спектра не попадали друг на друга.
fig1.png
на выходе демодулятора буду иметь сигнал с IQ дисбалансом, и видно что между гармоникамивозникли спуры из-за разбаланса квадратур:
fig2.png


Если вычесть из выхода демодулятора вход, то остануться только имейджевые спуры:
fig3.png
По которым с использование сопряженного сигнала можно получить частотную характеристику фильтра компенсатора. Я использовал FFT калибровку, хотя есть более оптимальные методы, но не суть.
fig4.png
Можно видеть, что АЧХ фильтра на уровне -20 дБ, что соответствует уровню имейджа. Если имейдж будет на уровне -40, то и АЧХ фильтра тоже на уровне -40.

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

Результат - комплексная импульсная характеристика реальная и мнимая часть которой показана на следующем рисунке:
fig5.png
Ну и потом мне лишь осталось применить полученный комплексный фильтр для искажённого сигнала, и вы знаете, он также как ваш фильтр устраняет причину имейджа, только уже во всей полосе.
fig6.png
Вот как то так.

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

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

Сообщение sda »

Большое спасибо за развёрнутый ответ! Беру тайм-аут, эту информацию нужно обдумать. А чтобы дело двигалось быстрее не смогли бы вы поделиться вашим скриптом? Это заметно ускорит процесс.
Последний раз редактировалось sda 01 апр 2021, 22:36, всего редактировалось 2 раза.

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

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

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

Код: Выделить всё

clear all; close all; clc;

N = 2048
K = 64

h0 = [randn(5,1)*5E-3 + 1i * randn(5,1)*5E-3];

frq = [K/4:K/2:N/2-1,  N/2+K/2: K/2: N-1];

t = 0:N-1;
f = 0:N-1;
x = 0;
for k = frq
  x = x + exp(2i*pi*k/N*t);
end

y = x + filter(h0, 1, conj(x)) + (randn(1,N) + 1i*randn(1,N))*1E-2;

X = fft(x);
Y = fft(y); 
C = fft(conj(x));

H = Y(N - frq+1)./C(N - frq+1);


for k = 1:length(H)
  for n = 1:length(H)
    W(k, n) = exp(-2i*pi*(N - frq(k))*(n-1)/N);
  end
end

w = inv(W)*H.';
z =  y - filter(w,1,conj(y));
Z = fft(z);

figure(1);
plot(f, 20*log10(abs(X)),   'b')
axis([0,N,-230, 80])
title('input signal')
xlabel('frequency')
ylabel('X(f), dB')

figure(2);
plot(f, 20*log10(abs(Y)),   'r') 
axis([0,N,-30, 80])
title('input signal + image')
xlabel('frequency')
ylabel('Y(f), dB')

figure(3);
plot(f, 20*log10(abs(Y-X)),   'g') 
axis([0,N,-30, 80])
title('image only')
xlabel('frequency')
ylabel('Y(f)-X(f), dB')


figure(4);
plot(frq, 20*log10(abs(H)),   'k') 
axis([0,N,-70, 80])
title('FFT calibrated filter magnitude')
xlabel('frequency')
ylabel('|H(f)|^2, dB')


figure(5);
plot(0:length(w)-1, real(w),0:length(w)-1, imag(w));
title('recalculated impulse response')
xlabel('time n')
ylabel('Re(w(n)), Im(w(n))')

figure(6);
plot(f, 20*log10(abs(Z)),   'm')
axis([0,N,-30, 80])
title('signal after IQ imbalance compensation')
xlabel('frequency')
ylabel('Z(f), dB')

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

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

Сообщение sda »

Спасибо! Если появятся вопросы - буду приставать :-)

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

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

Сообщение sda »

Бахурин Сергей писал(а):
01 апр 2021, 22:31
Вопросов не возникло, спасибо! Посмотрите личку.

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

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

Сообщение sda »

Сегодня возник первый вопрос. Формируя данные для калибровки вы используете вектор 'х' - идеальный сигнал и прибавляете к нему IQ imbalance. Это происходит в следующей строке:

Код: Выделить всё

y = x + filter(h0, 1, conj(x)) + (randn(1,N) + 1i*randn(1,N))*1E-2;
Для абстрактной модели в матлабе это нормально, но я предполагаю использовать этот алгоритм в реальном изделии. Для калибровки вектор 'y' будет считываться из платы и он уже будет сильно отличаться от эталонного сигнала 'x' т.к. в реальной плате кроме IQ imbalance будут присутствовать факторы неравномерности АЧХ и ФЧХ аналогового тракта. Я решил проверить как алгоритм отнесётся к изменению уровня читаемых из платы пилотов и уменьшил этот уровень вектора 'y' всего на 0,5 дБ.

Код: Выделить всё

y = x + filter(h0, 1, conj(x)) + (randn(1,N) + 1i*randn(1,N))*1E-2;
y = y*10^(-0.5/20);
Результат видно на Figure 6. Можете прокомментировать эту ситуацию? Можно ли избавиться от этого эффекта? Реальная неравномерность АЧХ в тракте возможна в пределах 3...4-х децибел.
Вложения
2021-04-05_110054_05dB.png

Ответить