Jump to content
    

Эквализация ЛЧМ чигнала. Решение уранения Винера-Хопфа.

Всем привет!

Начал изучать адаптивную фильтрацию и по книге Джигана, в качестве упражнения, пытаюсь рассчитать коэффициенты эквалайзера. Модель построена в Matlab и вот как она работает. В качестве эталонного сигнала REF_SIGNAL выбрал комплексный ЛЧМ сигнал с частотой [0...FS/2].

untitled.thumb.jpg.77946bbc376c4d33828706519776d096.jpg

Далее этот сигнала намеренно искажается и превращается уже в BAD_SIGNAL.

untitled2.thumb.jpg.9a59bdd920adb0f53c45395a4cac91f9.jpg

Имея эти два сигнала, я рассчитываю коэффициенты эквалайзера и пытаюсь устранить внесенные искажения. Критерий решения - MSE, минимальная среднеквадратичная ошибка. Решаю уравнение Винера-Хопфа. Где первый множитель - корреляционная матрица входных сигналов, а второй - вектор взаимной корреляции между входными и требуемыми сигналами.

Screenshot2025-12-25162043.thumb.png.7153a3ebf57aa14fbf58dff8547101a8.png

Далее пропускаю испорченный сигнал через эквалайзер и сморю насколько он стал похож на эталонный.

untitled3.thumb.jpg.ac3bbe01565ae7768671da8abc9117c4.jpg

Вот на графике ниже показаны три спектра. Синий - эталонный сигнал, красный - испорченный, желтый восстановленный.


Главный вопрос: Результат приемлем для 31 порядка эквалайзера?

 

Код скрипта:
 

clear;
FS = 1;

% Число отсчетов сигнала.
N = 1024;

%% В качастве тестового сигнала выбираем ЛЧМ чигнал в N отсчетов и занимающий
% всю рабочую полосу FS/2. 
% Здесь мы создаем эталонный сигнал.
df = FS/(2*N);
f = -0.5 : df : -df;
t = 0:1:N-1;
REF_SIGNAL = exp(1i*2*pi*f.*t) + (rand(1,N)-0.5)/10000 + 1i*(rand(1,N)-0.5)/10000;

figure;
subplot(3,1,1);
plot(t,real(REF_SIGNAL),t,imag(REF_SIGNAL),t,abs(REF_SIGNAL));
subplot(3,1,2);
plot(20*log10(abs(fftshift(fft(REF_SIGNAL,N)))));
ylim([0 40]);
subplot(3,1,3);
pspectrum(REF_SIGNAL,'spectrogram','OverlapPercent',99);


%% Портим наш эталонный сигнал.
A = 0.3*cos(2*pi*4/N*t) + 0.5;
BAD_SIGNAL = A.*REF_SIGNAL;

figure;
subplot(3,1,1);
plot(t,real(BAD_SIGNAL),t,imag(BAD_SIGNAL),t,abs(BAD_SIGNAL));
subplot(3,1,2);
plot(20*log10(abs(fftshift(fft(BAD_SIGNAL,N)))));
ylim([-100 40]);
subplot(3,1,3);
pspectrum(BAD_SIGNAL,'spectrogram','OverlapPercent',99);

%% Считаем корреляционную матрицу CM
L = length(BAD_SIGNAL);
CM = zeros(L,L);
a = BAD_SIGNAL;
b = BAD_SIGNAL;
for r = 1:L  
    for c = 1:L
        CM(r,c) = a*(b')/L;
        b = [b(L) b(1:L-1)];
    end
    b = BAD_SIGNAL;
    a = [a(L) a(1:L-1)];
end

%% Считаем матрицу кросскорреляции эталонного сигнала и испорченного.
R = zeros(L,1);
a = BAD_SIGNAL;
b = REF_SIGNAL;
for r = 1:L
    R(r) = b*(a')/L;
    a = [a(L) a(1:L-1)];
end

%% Считаем коеффициенты фильтра
H = inv(CM)*(R);

%% Ограничиваем порядок фильтра 
O = 31;
H = [H(end-(O-1)/2 + 1:end).' H(1:(O-1)/2+1).'];

%% Применяем эквалайзер и получаем восстановленный сигнал
REC = filter(conj(H),1,BAD_SIGNAL);


figure;
subplot(2,1,1)
t = 1 : 1 : length(H);
plot(t,real(H),t,imag(H),t, abs(H))
subplot(2,1,2)
t = 1:1:N;
plot(t, 20*log10(abs(fftshift(fft(REF_SIGNAL,N)))), t, 20*log10(abs(fftshift(fft(BAD_SIGNAL,N)))), t, 20*log10(abs(fftshift(fft(REC,N)))));

 

Share this post


Link to post
Share on other sites

Собственно, вот второй эксперимент. В качестве BAD_SIGNAL принимаю REF_SIGNAL.

git.png.50896fcb86bcd317270220b14923022c.png

И модель, вроде как отрабатывает эту ситуацию, но вносит какие-то колебания. Я думаю, что в расчетах где - то ошибка.

Screenshot2025-12-26101735.thumb.png.e6b36a050e14f4316a148482954852ab.png

Share this post


Link to post
Share on other sites

1 час назад, Caruso сказал:

Я думаю, что в расчетах где - то ошибка.

Несколько замечаний:

1. Образцовый сигнал берете строго прямоугольный, с бесконечным спектром.

2. При фильтрации, ограничении спектра, безусловно возникнут пульсации.

3. Почему рассматриваете только амплитудные искажения? Что с фазовыми? Допустим исходный сигнал проходит через БИХ фильтр с неравномерным ГВЗ в полосе прозрачности.

Share this post


Link to post
Share on other sites

В 26.12.2025 в 10:20, Caruso сказал:

И модель, вроде как отрабатывает эту ситуацию, но вносит какие-то колебания. Я думаю, что в расчетах где - то ошибка.

Что там у Вас в расчетах особо не смотрел, думаю, что скорее всего все правильно. У Вас "ошибка" в анализе результатов:

 

1. Смотреть нужно в первую очередь не спектр, а разность исходного и восстановленного сигнала. И смотреть разумеется с учетом того, что у фильтра есть задержка. Вот для Вашего второго примера, когда BAD_SIGNAL = REF_SIGNAL, верхние два графика - действительная часть для самих сигналов (сливаются), нижний - их разность:

 image.png.729b6daa534136269f3521a1715a36b0.png image.png.3646dac6d60aab8a3f10952e4c10b8d8.png

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

 

2. Если же говорить про спектр, то на нем безусловно будут колебания. Во-первых, как уже говорил, фильтр вносит задержку, а спектр Вы смотрите без ее учета, т.е. уже будут возникать разные веселые эффекты из-за того, что вначале идут нули, а в конце сигнал обрезается. Но и с учетом задержки фильтра колебания спектра будут, т.к. конкретно для Вашего ЛЧМ на всю полосу, обрезая сигнал по времени, мы обрезаем его и по частоте, но это уже будут "правильные" колебания, в полной соответствии с теорией частотной модуляции:

image.png.9c1add918adc4b474f35e9e818800098.png

Share this post


Link to post
Share on other sites

В 25.12.2025 в 16:38, Caruso сказал:

Главный вопрос: Результат приемлем для 31 порядка эквалайзера?

Главный ответ: Порядок определяется каналом.

Share this post


Link to post
Share on other sites

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

Модель канала у вас, скажем так, довольно необычная. Было бы интересно оценить power-delay profile для такого канала и полосу когерентности, чтобы говорить о числе коэффициентов.

Share this post


Link to post
Share on other sites

Всех с наступившим новым годом!

Проблема колебаний спектра восстановленного сигнала была вызвана задержкой фильтра.

Screenshot2025-12-26101735.thumb.png.784df0c3047ae4b82ac8323412be0cfa.png

Теперь ЛЧМ сигнал восстановлен.

git.thumb.png.236e65e9b26313295bd14c38f032a44e.png

 

Но остались некоторые вопросы.

On 12/26/2025 at 11:07 AM, rloc said:

Почему рассматриваете только амплитудные искажения? Что с фазовыми? Допустим исходный сигнал проходит через БИХ фильтр с неравномерным ГВЗ в полосе прозрачности.

Правильно ли я понимаю, что меняя углы (НО НЕ МОДУЛИ) комплексных коэффициентов эквалайзера я могу восстановить фчх испорченного сигнала к эталонному?

Share this post


Link to post
Share on other sites

5 часов назад, Caruso сказал:

комплексных коэффициентов эквалайзера я могу восстановить фчх испорченного сигнала к эталонному?

Можно и нужно.

Share this post


Link to post
Share on other sites

Caruso

Начать надо с канала, который искажения вносит, он не так работает, на косинус не умножается, берёте простейший наихудший случай - два луча равной амплитуды с произвольными фазами, один относительно другого задержан, моделируете всё в комплексном виде на нулевой частоте, шум прибавляется после свёртки с каналом, в жизни отсчёт за отсчётом с АЦП непрерывно поступают, никаких гигантских блоков с высоты птичьего полёта нет, окажется что канал вносит спектральные нули, там шум, шум бессмысленно усиливать, эквалайзер из книжки не работает.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...