Caruso 0 December 25, 2025 Posted December 25, 2025 · Report post Всем привет! Начал изучать адаптивную фильтрацию и по книге Джигана, в качестве упражнения, пытаюсь рассчитать коэффициенты эквалайзера. Модель построена в Matlab и вот как она работает. В качестве эталонного сигнала REF_SIGNAL выбрал комплексный ЛЧМ сигнал с частотой [0...FS/2]. Далее этот сигнала намеренно искажается и превращается уже в BAD_SIGNAL. Имея эти два сигнала, я рассчитываю коэффициенты эквалайзера и пытаюсь устранить внесенные искажения. Критерий решения - MSE, минимальная среднеквадратичная ошибка. Решаю уравнение Винера-Хопфа. Где первый множитель - корреляционная матрица входных сигналов, а второй - вектор взаимной корреляции между входными и требуемыми сигналами. Далее пропускаю испорченный сигнал через эквалайзер и сморю насколько он стал похож на эталонный. Вот на графике ниже показаны три спектра. Синий - эталонный сигнал, красный - испорченный, желтый восстановленный. Главный вопрос: Результат приемлем для 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))))); Quote Share this post Link to post Share on other sites More sharing options...
Caruso 0 December 26, 2025 Posted December 26, 2025 · Report post Собственно, вот второй эксперимент. В качестве BAD_SIGNAL принимаю REF_SIGNAL. И модель, вроде как отрабатывает эту ситуацию, но вносит какие-то колебания. Я думаю, что в расчетах где - то ошибка. Quote Share this post Link to post Share on other sites More sharing options...
rloc 100 December 26, 2025 Posted December 26, 2025 · Report post 1 час назад, Caruso сказал: Я думаю, что в расчетах где - то ошибка. Несколько замечаний: 1. Образцовый сигнал берете строго прямоугольный, с бесконечным спектром. 2. При фильтрации, ограничении спектра, безусловно возникнут пульсации. 3. Почему рассматриваете только амплитудные искажения? Что с фазовыми? Допустим исходный сигнал проходит через БИХ фильтр с неравномерным ГВЗ в полосе прозрачности. Quote Share this post Link to post Share on other sites More sharing options...
Самурай 13 December 27, 2025 Posted December 27, 2025 · Report post В 26.12.2025 в 10:20, Caruso сказал: И модель, вроде как отрабатывает эту ситуацию, но вносит какие-то колебания. Я думаю, что в расчетах где - то ошибка. Что там у Вас в расчетах особо не смотрел, думаю, что скорее всего все правильно. У Вас "ошибка" в анализе результатов: 1. Смотреть нужно в первую очередь не спектр, а разность исходного и восстановленного сигнала. И смотреть разумеется с учетом того, что у фильтра есть задержка. Вот для Вашего второго примера, когда BAD_SIGNAL = REF_SIGNAL, верхние два графика - действительная часть для самих сигналов (сливаются), нижний - их разность: Как-бы уже понятно, что тут все хорошо. Да и импульсная характеристика корректирующего фильтра это подтверждает (правый график). 2. Если же говорить про спектр, то на нем безусловно будут колебания. Во-первых, как уже говорил, фильтр вносит задержку, а спектр Вы смотрите без ее учета, т.е. уже будут возникать разные веселые эффекты из-за того, что вначале идут нули, а в конце сигнал обрезается. Но и с учетом задержки фильтра колебания спектра будут, т.к. конкретно для Вашего ЛЧМ на всю полосу, обрезая сигнал по времени, мы обрезаем его и по частоте, но это уже будут "правильные" колебания, в полной соответствии с теорией частотной модуляции: Quote Share this post Link to post Share on other sites More sharing options...
thermit 5 December 28, 2025 Posted December 28, 2025 · Report post В 25.12.2025 в 16:38, Caruso сказал: Главный вопрос: Результат приемлем для 31 порядка эквалайзера? Главный ответ: Порядок определяется каналом. Quote Share this post Link to post Share on other sites More sharing options...
FatRobot 6 December 28, 2025 Posted December 28, 2025 · Report post Попробуйте сперва провести моделирование с идеальным оценщиком, т.е. канал хоть и не идеальный, но полностью известен на стороне приемника в виде вектора коэффициентов конечной длины. Это ответит на ваш вопрос о порядке эквалайзера и о том, к чему должен стремиться оценщик. Модель канала у вас, скажем так, довольно необычная. Было бы интересно оценить power-delay profile для такого канала и полосу когерентности, чтобы говорить о числе коэффициентов. Quote Share this post Link to post Share on other sites More sharing options...
Caruso 0 January 12 Posted January 12 · Report post Всех с наступившим новым годом! Проблема колебаний спектра восстановленного сигнала была вызвана задержкой фильтра. Теперь ЛЧМ сигнал восстановлен. Но остались некоторые вопросы. On 12/26/2025 at 11:07 AM, rloc said: Почему рассматриваете только амплитудные искажения? Что с фазовыми? Допустим исходный сигнал проходит через БИХ фильтр с неравномерным ГВЗ в полосе прозрачности. Правильно ли я понимаю, что меняя углы (НО НЕ МОДУЛИ) комплексных коэффициентов эквалайзера я могу восстановить фчх испорченного сигнала к эталонному? Quote Share this post Link to post Share on other sites More sharing options...
rloc 100 January 12 Posted January 12 · Report post 5 часов назад, Caruso сказал: комплексных коэффициентов эквалайзера я могу восстановить фчх испорченного сигнала к эталонному? Можно и нужно. Quote Share this post Link to post Share on other sites More sharing options...
petrov 18 January 12 Posted January 12 · Report post Caruso Начать надо с канала, который искажения вносит, он не так работает, на косинус не умножается, берёте простейший наихудший случай - два луча равной амплитуды с произвольными фазами, один относительно другого задержан, моделируете всё в комплексном виде на нулевой частоте, шум прибавляется после свёртки с каналом, в жизни отсчёт за отсчётом с АЦП непрерывно поступают, никаких гигантских блоков с высоты птичьего полёта нет, окажется что канал вносит спектральные нули, там шум, шум бессмысленно усиливать, эквалайзер из книжки не работает. 1 Quote Share this post Link to post Share on other sites More sharing options...