Корректирующий фильтр IQ imbalance
- Бахурин Сергей
- Администратор
- Сообщения: 1119
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Корректирующий фильтр IQ imbalance
Это стандартная проблема. Необходимо добавить калибровку тракта. Чуть позже смогу добавить в код
Re: Корректирующий фильтр IQ imbalance
Хорошо, просто я исходил из того что мой старый компенсатор прекрасно справлялся с перекосом 20дБ.
И ещё заметил одну вещь. В реальности не будет скачков фаз и амплитуд из-за inbalance, они будут изменяться от частоты монотонно. Если сделать следующее формирование реальных пилотов, то на Figure 3 мы увидим не образы, а смесь сигналы+образы.
Может что то не так сделал? А может это следствие предыдущей проблемы?
И ещё заметил одну вещь. В реальности не будет скачков фаз и амплитуд из-за 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
- Бахурин Сергей
- Администратор
- Сообщения: 1119
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Корректирующий фильтр IQ imbalance
Да все так после вычитание останется image из за разбаланса и искажения сигнала из-за неравномерности тракта. Я постараюсь завтра добавить в скрипт калибровку тракта, в выходные сдох ssd диск сегодня новый должен приехать.
Re: Корректирующий фильтр IQ imbalance
Я конечно понимаю что здесь никто никому ничего не должен. Сергей, вы можете хоть пару слов написать о ситуации, ведь прошло уже две недели.Бахурин Сергей писал(а): ↑06 апр 2021, 16:22Да все так после вычитание останется image из за разбаланса и искажения сигнала из-за неравномерности тракта. Я постараюсь завтра добавить в скрипт калибровку тракта, в выходные сдох ssd диск сегодня новый должен приехать.
1). Вам надоела эта тема?
2). У вас банально нет свободного времени?
3). Вопрос оказался не таким простым как показалось в начале?
- Бахурин Сергей
- Администратор
- Сообщения: 1119
- Зарегистрирован: 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')
Re: Корректирующий фильтр IQ imbalance
Спасибо! Не нужно извиняться - все мы живые люди.
Результат тестирования я вам сообщу.
Результат тестирования я вам сообщу.
Re: Корректирующий фильтр IQ imbalance
Сергей, на фигуре №3 выводится вот такая картинка. Т.е. не образы а сигналы+образы.
Это ошибка или нормально?
P.S. Исправил ошибку.
Это ошибка или нормально?
P.S. Исправил ошибку.
Последний раз редактировалось sda 21 апр 2021, 11:11, всего редактировалось 1 раз.
- Бахурин Сергей
- Администратор
- Сообщения: 1119
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Корректирующий фильтр IQ imbalance
Надо проверить что за сигнал. Поскольку появились линейные искажения самого тракта вполне может быть такая картина. Главное чтобы финальный график (малиновый) был корректный
Re: Корректирующий фильтр IQ imbalance
Да,спасибо, я уже нашёл и исправил ошибку.