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

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

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

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

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

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

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

Сообщение sda »

Хорошо, просто я исходил из того что мой старый компенсатор прекрасно справлялся с перекосом 20дБ.
И ещё заметил одну вещь. В реальности не будет скачков фаз и амплитуд из-за inbalance, они будут изменяться от частоты монотонно. Если сделать следующее формирование реальных пилотов, то на Figure 3 мы увидим не образы, а смесь сигналы+образы.

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

t = 0:N-1;
f = (0:N-1)/N*Fs;
x = 0;
y = 0;
mul_ampl = linspace(1.0001,1.0002,length(frq));
for k = 1:length(frq)
	sig_pilot = exp(2i*pi*frq(k)/Fs*t);
	x = x + sig_pilot;%формирование набора идеальных пилотов
	re_pilot = real(sig_pilot)*mul_ampl(k);
	im_pilot = imag(sig_pilot);
	y = y + complex(re_pilot,im_pilot);%формирование набора пилотов с ошибкой
end
Может что то не так сделал? А может это следствие предыдущей проблемы?
Вложения
2021-04-06_105558_fig1.png
2021-04-06_105611_fig2.png
2021-04-06_105956_fig3.png

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

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

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

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

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

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

Сообщение sda »

ok!

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

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

Сообщение sda »

Бахурин Сергей писал(а):
06 апр 2021, 16:22
Да все так после вычитание останется image из за разбаланса и искажения сигнала из-за неравномерности тракта. Я постараюсь завтра добавить в скрипт калибровку тракта, в выходные сдох ssd диск сегодня новый должен приехать.
Я конечно понимаю что здесь никто никому ничего не должен. Сергей, вы можете хоть пару слов написать о ситуации, ведь прошло уже две недели.
1). Вам надоела эта тема?
2). У вас банально нет свободного времени?
3). Вопрос оказался не таким простым как показалось в начале?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1046
Зарегистрирован: 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;


% добавляем искажения по амплитуде
% В данном случае добаляю фильтр который реально сделает искажения АЧХ
% вместо y = y*10^(-0.5/20);

channel = [-0.3, 0.8, -0.2];
y = filter(channel, 1, y);


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

% Учитываем линейную неравномерность тракта
HL = Y(frq+1)./X(frq+1);
for k = 1:length(HL)
  for n = 1:length(HL)
    W(k, n) = exp(-2i*pi*(frq(k))*(n-1)/N);
  end
end
wl = inv(W)*HL.';

% Сигнал с учетом линейной неравномерности
c = filter(wl,1,x);


% Тракт учли и можем использовать сигнал c для компенсации
C = fft(conj(c));
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
Сообщения: 36
Зарегистрирован: 24 мар 2021, 09:30

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

Сообщение sda »

Спасибо! Не нужно извиняться - все мы живые люди.
Результат тестирования я вам сообщу.

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

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

Сообщение sda »

Сергей, на фигуре №3 выводится вот такая картинка. Т.е. не образы а сигналы+образы.
Это ошибка или нормально?
P.S. Исправил ошибку.
Вложения
2021-04-21_104656_figure3.png
Последний раз редактировалось sda 21 апр 2021, 11:11, всего редактировалось 1 раз.

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

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

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

Надо проверить что за сигнал. Поскольку появились линейные искажения самого тракта вполне может быть такая картина. Главное чтобы финальный график (малиновый) был корректный

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

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

Сообщение sda »

Да,спасибо, я уже нашёл и исправил ошибку.

Ответить