Адаптивные эквалайзеры

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

Разделите обзор

В Communications Toolbox™, comm.LinearEqualizer и Системных объектах comm.DecisionFeedbackEqualizer и Линейном Эквалайзере Обратной связи Эквалайзера и Решения блокирует сетевые фильтры задержки касания использования, чтобы компенсировать линейно модулируемый сигнал через дисперсионный канал. Эти функции выводят оценку сигнала, с помощью оценки канала, смоделированного как фильтр конечного входного ответа (FIR).

Декодирование полученного сигнала использует эти шаги:

  1. Примените КИХ-фильтр, соответствуя оценке канала, к символам во входном сигнале.

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

Адаптивные опции структуры эквалайзера линейны или обратная связь решения. Адаптивные опции алгоритма являются наименьшее количество среднего квадратичного (LMS), рекурсивным средним квадратичным (RMS) или постоянным алгоритмом модуля (CMA). Для справочного материала об адаптивных эквалайзерах смотрите работы, перечисленные в Выбранной Библиографии для Эквалайзеров.

Интервал касания символа

Можно сконфигурировать эквалайзер, чтобы действовать в качестве расположенного с интервалами символом эквалайзера или в качестве дробного расположенного с интервалами символом эквалайзера.

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

  • Чтобы управлять эквалайзером на дробном расположенном с интервалами символом уровне, задайте количество входных выборок на символ как целое число, больше, чем 1, и обеспечьте входной сигнал, сверхдискретизированный на том уровне выборки. Дробные расположенные с интервалами символом эквалайзеры имеют касания, расположенные с интервалами в целочисленной части длительности вводимого символа. Дробные расположенные с интервалами символом эквалайзеры не чувствительны к синхронизации фазы.

Примечание

Эквалайзер MLSE поддерживает дробный интервал символа, но использование его не рекомендуется. Вычислительная сложность MLSE и нагрузка растут экспоненциально с длиной дисперсии времени канала. Сверхдискретизация входа означала бы умножать экспоненциальный термин на количество выборок на символ.

Линейные эквалайзеры

Линейные эквалайзеры могут удалить интерференцию межсимвола (ISI), когда частотная характеристика канала не имеет никакого пустого указателя. Если пустой указатель существует в частотной характеристике канала, линейные эквалайзеры имеют тенденцию улучшать шум. В этом случае используйте эквалайзеры обратной связи решения, чтобы не улучшать шум.

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

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

  • Для расположенного с интервалами символом эквалайзера количество выборок на символ, K, равняется 1. Выходная частота дискретизации равняется входной частоте дискретизации.

  • Для дробного расположенного с интервалами символом эквалайзера количество выборок на символ, K, является целым числом, больше, чем 1. Как правило, K 4 для незначительно расположенных с интервалами эквалайзеров. Выходная частота дискретизации является 1/T, и входной частотой дискретизации является K/T, где T является периодом символа. Обновление веса касания происходит при норме выработки.

Это схематические показы линейный эквалайзер с весами L, периодом символа T и выборками K на символ. Если K равняется 1, результатом является расположенный с интервалами символом линейный эквалайзер вместо дробного расположенного с интервалами символом линейного эквалайзера.

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

Эквалайзеры обратной связи решения

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

DFEs может быть расположен с интервалами символом или дробный расположенный с интервалами символом.

  • Для расположенного с интервалами символом эквалайзера количество выборок на символ, K, равняется 1. Выходная частота дискретизации равняется входной частоте дискретизации.

  • Для дробного расположенного с интервалами символом эквалайзера количество выборок на символ, K, является целым числом, больше, чем 1. Как правило, K 4 для дробных расположенных с интервалами символом эквалайзеров. Выходная частота дискретизации является 1/T, и входной частотой дискретизации является K/T. Коснитесь обновление веса происходит при норме выработки.

Это схематические показы дробный расположенный с интервалами символом DFE в общей сложности с весами N, периодом символа T и выборками K на символ. Фильтр имеет L прямые веса и N-L веса обратной связи. Прямой фильтр наверху, и фильтр обратной связи в нижней части. Если K равняется 1, результатом является расположенный с интервалами символом DFE вместо дробного расположенного с интервалами символом DFE.

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

Примечание

Алгоритм для блока Adaptive Algorithm в схематическом совместно оптимизирует веса обратной связи и форвард. Объединенная оптимизация особенно важна для алгоритма RLS.

Ссылочные и рабочие режимы сигнала

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

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

  • Когда эквалайзер действует в направленном на решение режиме, ссылочный сигнал является обнаруженной версией выходного сигнала, обозначенного y d в схематическом.

Примечание

Алгоритм CMA не имеет никакого учебного режима. Учебный режим только применяется при использовании LMS или алгоритма RLS.

Ошибочное вычисление

Ошибочная операция вычисления производит сигнал, данный этим выражением, где R является константой, связанной с сигнальным созвездием.

e={dy  LMS или RLSy(R|y|2)CMA

Обновление весов касания

Для линейного и структур эквалайзера обратной связи решения, выбор LMS, RLS или CMA определяет алгоритмы, используемые, чтобы установить веса касания и выполнить ошибочное вычисление. Новый набор весов касания зависит от

  • Текущий набор весов касания

  • Входной сигнал

  • Выходной сигнал

  • Ссылочный сигнал, d, для LMS и адаптивных алгоритмов RLS только. Ссылочные характеристики сигнала зависят от рабочего режима эквалайзера.

Наименьшее количество среднеквадратического алгоритма

Для LMS-алгоритма, относясь к предыдущему схематическому, w является вектором всех весов wi, и u является вектором всех входных параметров ui. На основе текущего набора весов LMS-алгоритм создает новый набор весов как

w, новый = w, текущий + (StepSize) u *e.

Размер шага, используемый адаптивным алгоритмом, задан как положительная скалярная величина. Увеличение размера шага уменьшает время сходимости эквалайзера, но заставляет компенсируемый выходной сигнал быть менее стабильным. Чтобы определить максимальный размер шага, позволенный при использовании адаптивного алгоритма LMS, используйте функцию объекта maxstep. Оператор * обозначает сопряженное комплексное число и ошибочное вычисление e = d - y.

Рекурсивный алгоритм наименьшего квадрата

Для алгоритма RLS, относясь к предыдущему схематическому, w является вектором всех весов wi, и u является вектором всех входных параметров ui. На основе текущего набора входных параметров, u, и матрицы обратной корреляции, P, алгоритм RLS сначала вычисляет вектор усиления Кальмана, K, как

K=Pu(ForgettingFactor)+uHPu.

Фактор упущения, используемый адаптивным алгоритмом, задан как скаляр в области значений (0, 1]. Уменьшение фактора упущения уменьшает время сходимости эквалайзера, но заставляет компенсируемый выходной сигнал быть менее стабильным. H обозначает, что Эрмитовы транспонируют. На основе текущей матрицы обратной корреляции новая матрица обратной корреляции

Pновый=Pтекущий(1KuH)ForgettingFactor.

На основе текущего набора весов алгоритм RLS создает новый набор весов как

w, новый = w current+K*e.

Оператор * обозначает сопряженное комплексное число и ошибочное вычисление e = d - y.

Постоянный алгоритм модуля

Для CMA адаптивный алгоритм, относясь к предыдущему схематическому, w является вектором всех весов wi, и u является вектором всех входных параметров ui. На основе текущего набора весов CMA адаптивный алгоритм создает новый набор весов как

w, новый = w, текущий + (StepSize) u *e.

Размер шага, используемый адаптивным алгоритмом, задан как положительная скалярная величина. Увеличение размера шага уменьшает время сходимости эквалайзера, но заставляет компенсируемый выходной сигнал быть менее стабильным. Чтобы определить максимальный размер шага, позволенный CMA адаптивный алгоритм, используйте функцию объекта maxstep. Оператор * обозначает сопряженное комплексное число и ошибочное вычисление e = y (R - |y|2), где R является константой, связанной с сигнальным созвездием.

Конфигурирование адаптивных эквалайзеров

Выберите линейное или структуру эквалайзера обратной связи решения. Решите который адаптивный алгоритм использовать — LMS, RLS или CMA. Задайте настройки для структуры и специфичных для алгоритма режимов работы.

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

Лучший выбор адаптивного алгоритма зависит от вашей отдельной ситуации. Рассмотрите эти обобщения при решении, какой адаптивный алгоритм лучше всего соответствует потребностям:

  • LMS-алгоритм выполняется быстро, но медленно сходится, и его сложность растет линейно с количеством весов.

  • Алгоритм RLS сходится быстро, но его сложность растет с квадратом количества весов, примерно говоря. Этот алгоритм может также быть нестабильным, когда количество весов является большим.

  • Постоянный алгоритм модуля (CMA) полезен, когда никакой учебный сигнал не доступен, и работает лучше всего на постоянные модуляции модуля, такие как PSK.

    Примечание

    Если CMA не имеет никакой дополнительной информации о стороне, он может ввести неоднозначность фазы. Например, веса, найденные CMA, могут произвести совершенную совокупность QPSK, но ввести вращение фазы 90, 180, или 270 градусов. В этом случае или используйте алгоритм исправления неоднозначности фазы или выберите дифференциальную схему модуляции, потому что дифференциальные схемы модуляции нечувствительны к неоднозначности фазы.

Чтобы просмотреть или изменить любые свойства адаптивного эквалайзера, используйте синтаксис, описанный для объектов канала в Отображении и Изменении Свойств объектов.

Для получения дополнительной информации об адаптивных алгоритмах, смотрите ссылки, перечисленные в Выбранной Библиографии для Эквалайзеров.

Задайте адаптивный эквалайзер

Чтобы создать адаптивный объект эквалайзера для использования в MATLAB®, выберите comm.LinearEqualizer или comm.DecisionFeedbackEqualizer System object™. Для Simulink® используйте блок Linear Equalizer или Decision Feedback Equalizer. На основе характеристик канала распространения в вашей симуляции используйте критерии в Коррекции, чтобы выбрать структуру эквалайзера.

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

  • Структура эквалайзера, такого как количество касаний.

  • Адаптивный алгоритм, который эквалайзер использует, такие как размер шага в алгоритме CMA или LMS.

  • Информация о текущем состоянии эквалайзера. Объект эквалайзера может вывести значения весов.

Чтобы просмотреть или изменить любые свойства объекта эквалайзера, используйте синтаксис, описанный для объектов канала в Отображении и Изменении Свойств объектов.

Определение объекта эквалайзера

Этот код создает объекты эквалайзера для трех настроек.

  • Расположенный с интервалами символом линейный эквалайзер RLS с 10 весами.

  • Незначительно расположенный с интервалами линейный эквалайзер RLS с 10 весами, совокупностью BPSK и двумя выборками на символ.

  • Обратная связь решения эквалайзер RLS с тремя весами в фильтре feedforward и двумя весами в фильтре обратной связи.

  • Все три объекта эквалайзера задают адаптивный алгоритм RLS с фактором упущения 0,3.

Создайте объекты эквалайзера различных типов. Отметьте настройки по умолчанию, используемые свойствами, которые не установлены с помощью пар 'Name,Value'.

eqlin = comm.LinearEqualizer('Algorithm','RLS','NumTaps',10,'ForgettingFactor',0.3)
eqlin = 
  comm.LinearEqualizer with properties:

                          Algorithm: 'RLS'
                            NumTaps: 10
                   ForgettingFactor: 0.3000
    InitialInverseCorrelationMatrix: 0.1000
                      Constellation: [1x4 double]
                       ReferenceTap: 3
                         InputDelay: 0
              InputSamplesPerSymbol: 1
              TrainingFlagInputPort: false
                 AdaptAfterTraining: true
               InitialWeightsSource: 'Auto'
                 WeightUpdatePeriod: 1

eqfrac = comm.LinearEqualizer('Algorithm','RLS','NumTaps',10,'ForgettingFactor',0.3, ...
    'Constellation',[-1 1],'InputSamplesPerSymbol',2)
eqfrac = 
  comm.LinearEqualizer with properties:

                          Algorithm: 'RLS'
                            NumTaps: 10
                   ForgettingFactor: 0.3000
    InitialInverseCorrelationMatrix: 0.1000
                      Constellation: [-1 1]
                       ReferenceTap: 3
                         InputDelay: 0
              InputSamplesPerSymbol: 2
              TrainingFlagInputPort: false
                 AdaptAfterTraining: true
               InitialWeightsSource: 'Auto'
                 WeightUpdatePeriod: 1

eqdfe = comm.DecisionFeedbackEqualizer('Algorithm','RLS','NumForwardTaps',3, ...
    'NumFeedbackTaps',2,'ForgettingFactor',0.3)
eqdfe = 
  comm.DecisionFeedbackEqualizer with properties:

                          Algorithm: 'RLS'
                     NumForwardTaps: 3
                    NumFeedbackTaps: 2
                   ForgettingFactor: 0.3000
    InitialInverseCorrelationMatrix: 0.1000
                      Constellation: [1x4 double]
                       ReferenceTap: 3
                         InputDelay: 0
              InputSamplesPerSymbol: 1
              TrainingFlagInputPort: false
                 AdaptAfterTraining: true
               InitialWeightsSource: 'Auto'
                 WeightUpdatePeriod: 1

Адаптивное присвоение алгоритма

Присвойте адаптивный алгоритм, используемый эквалайзером со свойством Algorithm. Сделайте присвоение с помощью Имени, пар Значения при создании объекта или со встроенным выражением после создания объекта.

Присвоение алгоритма

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

eqlms = comm.LinearEqualizer('Algorithm','LMS');

Создайте эквалайзер, возражают и присваивают желаемый адаптивный алгоритм со встроенным выражением после создания объекта.

eqrls = comm.LinearEqualizer;
eqrls.Algorithm
ans = 
'LMS'

Когда eqrls создается, настройки свойства по умолчанию используются. LMS является адаптивным алгоритмом по умолчанию. Обновите eqrls, чтобы использовать адаптивный алгоритм RLS.

eqrls.Algorithm = 'RLS';
eqrls.Algorithm
ans = 
'RLS'

Клонирование и дублирование объектов

Создайте адаптивный объект алгоритма путем клонирования существующего объекта эквалайзера, и затем изменения его свойств. Клонируйте eqlms, чтобы создать независимый эквалайзер, eqcma, затем обновите алгоритм к 'CMA'.

eqcma = clone(eqlms);
eqcma.Algorithm
ans = 
'LMS'
eqcma.Algorithm = 'CMA';
eqcma.Algorithm
ans = 
'CMA'

Если вы хотите независимую копию, используйте команду clone вместо того, чтобы копировать объект с помощью равного оператора, c2 = c1.

eqlms.NumTaps
ans = 5
eq2 = eqlms;
eq2.NumTaps = 6;
eq2.NumTaps
ans = 6
eqlms.NumTaps
ans = 6

Команда clone создает копию eqlms, который независим от eqlms. В отличие от этого, команда, eqB = eqA создает eqB как ссылку на eqA, так, чтобы eqB и eqA всегда имели идентичные настройки свойства.

Обучение эквалайзера

Линейно компенсируйте систему Используя различные планы подготовки

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

Системный Setup

Моделируйте модулируемую QPSK систему, подвергающуюся AWGN. Передайте пакеты, состоявшие из 200 учебных символов и 1 800 случайных символов данных. Сконфигурируйте линейный эквалайзер LMS, чтобы восстановить пакетные данные.

M = 4;
numTrainSymbols = 200;
numDataSymbols = 1800;
SNR = 20;
trainingSymbols = pskmod(randi([0 M-1],numTrainSymbols,1),M,pi/4);
numPkts = 10;
lineq = comm.LinearEqualizer('Algorithm','LMS', ...
    'NumTaps',5,'ReferenceTap',3,'StepSize',0.01);

Обучите эквалайзер в начале каждого пакета со сбросом

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

jj = 1;
figure
for ii = 1:numPkts
    b = randi([0 M-1],numDataSymbols,1);
    dataSym = pskmod(b,M,pi/4);
    packet = [trainingSymbols;dataSym];
    rx = awgn(packet,SNR);
    [~,err] = lineq(rx,trainingSymbols);
    reset(lineq)
    if (ii ==1 || ii == 2 ||ii == numPkts)
        subplot(3,1,jj)
        plot(abs(err))
        title(['Packet # ',num2str(ii)])
        xlabel('Symbols')
        ylabel('Error Magnitude')
        axis([0,length(packet),0,1])
        grid on;
        jj = jj+1;
    end
end

Обучите эквалайзер в начале каждого пакета без сброса

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

release(lineq)
jj = 1;
figure
for ii = 1:numPkts
    b = randi([0 M-1],numDataSymbols,1);
    dataSym = pskmod(b,M,pi/4);
    packet = [trainingSymbols;dataSym];
    channel = 1;
    rx = awgn(packet*channel,SNR);
    [~,err] = lineq(rx,trainingSymbols);
    if (ii ==1 || ii == 2 ||ii == numPkts)
        subplot(3,1,jj)
        plot(abs(err))
        title(['Packet # ',num2str(ii)])
        xlabel('Symbols')
        ylabel('Error Magnitude')
        axis([0,length(packet),0,1])
        grid on;
        jj = jj+1;
    end
end

Обучайте эквалайзер периодически

Системы с сигналами, подвергающимися изменяющимся во времени каналам, требуют, чтобы периодическое обучение эквалайзера поддержать соединило изменения канала. Задайте систему, которая имеет 200 символов обучения каждым 1 800 символам данных. Между обучением эквалайзер не обновляет веса касания. Процессы эквалайзера 200 символов на пакет.

Rs = 1e6;
fd = 20;
spp = 200; % Symbols per packet
b = randi([0 M-1],numDataSymbols,1);
dataSym = pskmod(b,M,pi/4);
packet = [trainingSymbols; dataSym];
stream = repmat(packet,10,1);
tx = (0:length(stream)-1)'/Rs;
channel = exp(1i*2*pi*fd*tx);
rx = awgn(stream.*channel,SNR);

Установите свойство AdaptAfterTraining на false останавливать обновления веса касания эквалайзера после учебной фазы.

release(lineq)
lineq.AdaptAfterTraining = false
lineq = 
  comm.LinearEqualizer with properties:

                Algorithm: 'LMS'
                  NumTaps: 5
                 StepSize: 0.0100
            Constellation: [1x4 double]
             ReferenceTap: 3
               InputDelay: 0
    InputSamplesPerSymbol: 1
    TrainingFlagInputPort: false
       AdaptAfterTraining: false
     InitialWeightsSource: 'Auto'
       WeightUpdatePeriod: 1

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

[y,err] = lineq(rx,trainingSymbols);

figure
subplot(2,1,1)
plot(tx, unwrap(angle(channel)))
xlabel('Time (sec)')
ylabel('Channel Angle (rad)')
title('Angular Error Over Time')
subplot(2,1,2)
plot(abs(err))
xlabel('Symbols')
ylabel('Error Magnitude')
grid on
title('Time-Varying Channel Without Retraining')

scatterplot(y)

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

release(lineq)
lineq.TrainingFlagInputPort = true;
symbolCnt = 0;
numPackets = length(rx)/spp;
trainFlag = true;
trainingPeriod = 2000;
eVec = zeros(size(rx));
yVec = zeros(size(rx));
for p=1:numPackets
    [yVec((p-1)*spp+1:p*spp,1),eVec((p-1)*spp+1:p*spp,1)] = ...
        lineq(rx((p-1)*spp+1:p*spp,1),trainingSymbols,trainFlag);
    symbolCnt = symbolCnt + spp;
    if symbolCnt >= trainingPeriod
        trainFlag = true;
        symbolCnt = 0;
    else
        trainFlag = false;
    end
end
figure
subplot(2,1,1)
plot(tx, unwrap(angle(channel)))
xlabel('t (sec)')
ylabel('Channel Angle (rad)')
title('Angular Error Over Time')
subplot(2,1,2)
plot(abs(eVec))
xlabel('Symbols')
ylabel('Error Magnitude')
grid on
title('Time-Varying Channel With Retraining')

scatterplot(yVec)

Линейно компенсируйте символы Используя основанное на EVM обучение

Восстановите символы QPSK с линейным эквалайзером, с помощью постоянного алгоритма модуля (CMA) и основанного на EVM обучения касаний. При использовании слепых алгоритмов эквалайзера, таких как CMA, можно обучить касания эквалайзера с помощью свойства AdaptWeights запустить и остановить обучение. Используйте функции помощника, чтобы сгенерировать графики и применить исправление фазы.

Инициализируйте системные переменные.

rng(123456);
M = 4; % QPSK
numSymbols = 100;
numPackets = 5000;
raylChan = comm.RayleighChannel('PathDelays',[0 1], ...
    'AveragePathGains',[0 -12],'MaximumDopplerShift',1e-5);
SNR = 50;
adaptWeights = true;

Создайте эквалайзер и Системные объекты EVM. Системный объект эквалайзера задает линейный эквалайзер с помощью CMA адаптивный алгоритм. Вызовите функцию помощника, чтобы инициализировать графики фигуры.

lineq = comm.LinearEqualizer('Algorithm','CMA', ...
    'NumTaps',5,'ReferenceTap',3, ...
    'StepSize',0.03,'AdaptWeightsSource','Input port')
lineq = 
  comm.LinearEqualizer with properties:

                Algorithm: 'CMA'
                  NumTaps: 5
                 StepSize: 0.0300
            Constellation: [1x4 double]
             ReferenceTap: 3
    InputSamplesPerSymbol: 1
       AdaptWeightsSource: 'Input port'
     InitialWeightsSource: 'Auto'
       WeightUpdatePeriod: 1

info(lineq)
ans = struct with fields:
    Latency: 2

evm = comm.EVM('ReferenceSignalSource', ...
    'Estimated from reference constellation');
[errPlot,evmPlot,scatSym,adaptState] = initFigures(numPackets,lineq);

Цикл коррекции

Выполните эти шаги, чтобы реализовать цикл коррекции.

  1. Сгенерируйте пакеты данных о PSK.

  2. Примените Релеевское замирание и AWGN к данным о передаче.

  3. Примените коррекцию к полученным данным и исправление фазы к эквалайзеру вывод.

  4. Оцените EVM и переключите флаг adaptWeights к true или false на основе уровня EVM.

  5. Обновите графики фигуры.

for p=1:numPackets
    data = randi([0 M-1],numSymbols,1);
    tx = pskmod(data,M,pi/4);
    rx = awgn(raylChan(tx),SNR);
    rxDelay = finddelay(rx,tx);
    [y,err,wts] = lineq(rx,adaptWeights);
    y = phaseCorrection(y);
    evmEst = evm(y);
    adaptWeights = (evmEst > 20);
    
    updateFigures(errPlot,evmPlot,scatSym,adaptState, ...
        wts,y(end),evmEst,adaptWeights,p,numPackets)
end

rxDelay
rxDelay = 0

Графики фигуры показывают, что, когда EVM отличается, переключатели эквалайзера в и из направленного на решение режима адаптации веса.

Функции помощника

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

function [errPlot,evmPlot,scatter,adaptState] = initFigures(numPkts,lineq)
yVec = nan(numPkts,1);
evmVec = nan(numPkts,1);
wVec = zeros(lineq.NumTaps,1);
adaptVec = nan(numPkts,1);

figure
subplot(2,2,1)
evmPlot = stem(wVec);
grid on; axis([1 lineq.NumTaps 0 1.8])
xlabel('Taps'); ylabel('|Weights|'); title('Tap Weight Magnitude')

subplot(2,2,2)
scatter = plot(yVec, '.');
axis square; axis([-1.2 1.2 -1.2 1.2]); grid on
xlabel('In-phase'); ylabel('Quadrature'); title('Scatter Plot');
subplot(2,2,3)
adaptState = plot(adaptVec);
grid on; axis([0 numPkts -0.2 1.2])
ylabel('Training'); xlabel('Symbols'); title('Adapt Weights Signal')
subplot(2,2,4)
errPlot = plot(evmVec);
grid on; axis([1 numPkts 0 100])
xlabel('Symbols'); ylabel('EVM (%)'); title('EVM')
end

Эта функция помощника обновляет фигуры.

function updateFigures(errPlot,evmPlot,scatSym, ...
    adaptState,w,y,evmEst,adaptWts,p,numFrames)
persistent yVec evmVec adaptVec

if p == 1
    yVec = nan(numFrames,1);
    evmVec = nan(numFrames,1);
    adaptVec = nan(numFrames,1);
end

yVec(p) = y;
evmVec(p) = evmEst;
adaptVec(p) = adaptWts;

errPlot.YData = abs(evmVec);
evmPlot.YData = abs(w);
scatSym.XData = real(yVec);
scatSym.YData = imag(yVec);
adaptState.YData = adaptVec;
drawnow limitrate
end

Эта функция помощника применяет исправление фазы.

function y = phaseCorrection(y)
a = angle(y((real(y) > 0) & (imag(y) > 0)));
a(a < 0.1) = a(a < 0.1) + pi/2;
theta = mean(a) - pi/4;
y = y * exp(-1i*theta);
end

Задержки Используя эквалайзеры

Для соответствующей коррекции необходимо определить и объяснить системные задержки. Как показано в следующем примере, можно использовать функцию finddelay, чтобы определить системную задержку. Этот пример использует линейную коррекцию LMS, но тот же подход допустим для RLS и CMS адаптивные алгоритмы и для эквалайзеров обратной связи решения.

Линейно компенсируйте задержанный сигнал

Моделируйте систему с задержкой между переданными символами и полученными выборками. Типичные системы имеют фильтры передатчика и получателя, которые приводят к задержке. Эта задержка должна составляться, чтобы синхронизировать систему. В этом примере системная задержка введена без передачи, и получите фильтры. Линейная коррекция, с помощью алгоритма наименьшее количество средних квадратичных (LMS), восстанавливает символы QPSK.

Инициализируйте переменные симуляции.

M = 4; % QPSK
numSymbols = 10000;
numTrainingSymbols = 1000;
mpChan = [1 0.5*exp(1i*pi/6) 0.1*exp(-1i*pi/8)];
systemDelay = dsp.Delay(20);
snr = 24;

Сгенерируйте модулируемые QPSK символы. Примените многопутевую фильтрацию канала, системную задержку и AWGN к переданным символам.

data = randi([0 M-1],numSymbols,1);
tx = pskmod(data,M,pi/4); % OQPSK
delayedSym = systemDelay(filter(mpChan,1,tx));
rx = awgn(delayedSym,snr,'measured');

Создайте эквалайзер и Системные объекты EVM. Системный объект эквалайзера задает линейный эквалайзер с помощью LMS-алгоритма.

lineq = comm.LinearEqualizer('Algorithm','LMS', ...
    'NumTaps',9,'ReferenceTap',5);
evm = comm.EVM('ReferenceSignalSource', ...
    'Estimated from reference constellation');

Компенсируйте, не настраивая входную задержку

Компенсируйте полученные символы.

[y1,err1,wts1] = lineq(rx,tx(1:numTrainingSymbols,1));

Найдите задержку между полученными символами и переданными символами при помощи функции finddelay.

rxDelay = finddelay(tx,rx)
rxDelay = 20

Отобразите информацию об эквалайзере. Значение задержки указывает на задержку, введенную эквалайзером. Вычислите общую задержку как сумму rxDelay и задержки эквалайзера.

eqInfo = info(lineq)
eqInfo = struct with fields:
    Latency: 4

totalDelay = rxDelay + eqInfo.Latency;

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

plot(abs(err1))
xlabel('Symbols')
ylabel('Error Magnitude')
title('Equalizer Error Signal')

График показывает чрезмерные ошибки вне этих 1 000 периодов подготовки символов. Когда демодуляция символов и вычислительных ошибок символа, чтобы составлять не сходившийся вывод и системную задержку между эквалайзером вывод и переданными символами, пропускает первые 2 000 символов.

dataRec1 = pskdemod(y1(2000+totalDelay:end),M,pi/4);
symErrWithDelay = symerr(data(2000:end-totalDelay),dataRec1)
symErrWithDelay = 5999
evmWithDelay = evm(y1)
evmWithDelay = 29.5795

Коэффициент ошибок и EVM высоки, потому что получить задержка не составлялась в Системном объекте эквалайзера.

Настройте входную задержку эквалайзера

Компенсируйте полученные данные при помощи значения задержки, чтобы установить свойство InputDelay. Поскольку InputDelay является ненастраиваемым свойством, необходимо выпустить Системный объект lineq, чтобы реконфигурировать свойство InputDelay. Компенсируйте полученные символы.

release(lineq)
lineq.InputDelay = rxDelay
lineq = 
  comm.LinearEqualizer with properties:

                Algorithm: 'LMS'
                  NumTaps: 9
                 StepSize: 0.0100
            Constellation: [1x4 double]
             ReferenceTap: 5
               InputDelay: 20
    InputSamplesPerSymbol: 1
    TrainingFlagInputPort: false
       AdaptAfterTraining: true
     InitialWeightsSource: 'Auto'
       WeightUpdatePeriod: 1

[y2,err2,wts2] = lineq(rx,tx(1:numTrainingSymbols,1));

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

subplot(2,1,1)
stem([real(wts1),real(wts2)])
xlabel('Taps')
ylabel('Tap Weight Real')
legend('rxDelayed','rxDelayRemoved')
grid on
subplot(2,1,2)
stem([imag(wts1),imag(wts2)])
xlabel('Taps')
ylabel('Tap Weight Imaginary')
legend('rxDelayed','rxDelayRemoved')
grid on

figure
plot([abs(err1),abs(err2)])
xlabel('Symbols')
ylabel('Error Magnitude')
legend('rxDelayed','rxDelayRemoved')
grid on

Постройте вывод ошибок компенсируемых сигналов, rxDelayed и rxDelayRemoved. Для сигнала, которому удалили задержку, эквалайзер сходится во время 1 000 периодов подготовки символа. Когда демодуляция символов и вычислительных ошибок символа, чтобы составлять не сходившийся вывод и системную задержку между эквалайзером вывод и переданными символами, пропускает первые 500 символов. Реконфигурирование эквалайзера, чтобы составлять системную задержку включает лучшую коррекцию сигнала и уменьшает ошибки символа и EVM.

eqInfo = info(lineq)
eqInfo = struct with fields:
    Latency: 4

totalDelay = rxDelay + eqInfo.Latency;
dataRec2 = pskdemod(y2(500+totalDelay:end),M,pi/4);
symErrDelayRemoved = symerr(data(500:end-totalDelay),dataRec2)
symErrDelayRemoved = 0
evmDelayRemoved = evm(y2(500+totalDelay:end))
evmDelayRemoved = 9.4435

Используя адаптивные эквалайзеры в Simulink

Адаптивная коррекция с фильтрацией и исчезающим каналом

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

Структура модели

  • Передатчик генерирует 16QAM случайные данные сигнала, который включает обучающую последовательность и применяется, корень повысил косинус фильтрация импульсной формы.

  • Нарушения канала включают многопутевое исчезновение, эффект Доплера, смещение несущей частоты, переменную целочисленную задержку, потерю пути к свободному пространству и AWGN.

  • Получатель применяется, корень повысил косинус фильтрация импульсной формы, AGC, включает управление режимом эквалайзера, чтобы включить обучение и позволяет вам выбирать алгоритм эквалайзера из этого выбора:

  • Модель также использует осциллографы, которые могут помочь вам понять, как различные эквалайзеры и адаптивные алгоритмы ведут себя.

Исследуйте модель в качестве примера

Экспериментирование с моделью

Эта модель обеспечивает несколько способов для вас изменить настройки и наблюдать результаты. InitFcn, найденный в File>Model Properties>Callbacks, вызывает slex_adaptive_eq_with_fading_init, чтобы инициализировать модель. Этот файл позволяет вам отличаться настройки по модели, включая:

  • Системные параметры, такие как ОСШ.

  • Импульсные параметры формирующий фильтра, такие как спад и длина фильтра

  • Значение пути потерь.

  • Условия канала: Rayleigh или исчезновение Rician, усиления пути к каналу, задержки пути к каналу, эффект Доплера.

  • Выбор эквалайзера и настройка.

Образцовые факторы

Эта нестандартизированная линия связи является представительной для современной системы связи.

  • Оптимальная настройка эквалайзера зависит от условий канала. Файл инициализации устанавливает эффект Доплера и многопутевые исчезающие параметры канала, которые подсвечивают возможности различных эквалайзеров.

  • Структура эквалайзера обратной связи решения выполняет лучше, чем линейная структура эквалайзера для более высокой интерференции межсимвола.

  • Алгоритм RLS выполняет лучше, чем LMS-алгоритм для более высоких Доплеровских частот.

  • LMS-алгоритм выполняется быстро, медленно сходится, и его сложность растет линейно с количеством весов.

  • Алгоритм RLS сходится быстро, его сложность растет примерно как квадрат количества весов и может быть нестабильной, когда количество весов является большим.

  • Канал, осуществленный для различных эквалайзеров, имеет следующие характеристики:

  • Начальные установки для других нарушений канала являются тем же самым для всех эквалайзеров. Значение смещения несущей частоты установлено к 50 Гц. Потеря пути к свободному пространству установлена в 60 дБ. Переменная целочисленная задержка установлена в 2 выборки, который требует, чтобы эквалайзеры выполнили некоторое восстановление синхронизации.

Глубокий канал исчезает, и потеря пути может заставить уровень входного сигнала эквалайзера быть намного меньше, чем желаемый уровень выходного сигнала и приводить к неприемлемо длинному времени сходимости эквалайзера. Блок AGC настраивает значение полученного сигнала уменьшать время сходимости эквалайзера. Оптимальный уровень выходной мощности AGC должен быть настроен на основе выбранной схемы модуляции. Для 16QAM, используется желаемая выходная мощность 10 Вт.

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

Выполнение симуляции

Выполнение симуляции вычисляет ошибочную статистику символа и производит эти фигуры:

  • Схема совокупности сигнала после получить фильтра.

  • Схема совокупности сигнала после AGC.

  • Схема совокупности сигнала после коррекции с показанными измерениями качества сигнала.

  • Диаграмма погрешностей эквалайзера.

Для графиков, показанных здесь, выбранным алгоритмом эквалайзера является RLS Linear. Контролируя эти фигуры, вы видите, что полученное качество сигнала колеблется, в то время как время симуляции прогрессирует.

После Фильтра Rx и После того, как графики совокупности AGC показывают сигнал перед коррекцией. После того, как AGC показывает влияние условий канала на переданном сигнале. После того, как график Eq показывает сигнал после коррекции. Сигнал, построенный в схеме совокупности после коррекции, показывает изменение в качестве сигнала на основе эффективности процесса коррекции. В течение симуляции, сигналы, построенные перед коррекцией, отклоняются заметно от 16QAM сигнальное созвездие. После того, как совокупность Eq улучшается или ухудшается, когда сигнал ошибки эквалайзера отличается. Узкий скачок в начале Диаграммы погрешностей Eq, указывает на плохую коррекцию в начале симуляции. Эквалайзер сходится быстро, но между 5 и 6 мс канал, исчезающий, условия ухудшаются и ошибочные увеличения эквалайзера.

Дальнейшее исследование

Дважды кликните блок Equalizer Selector и выберите различный эквалайзер. Запустите симуляцию, чтобы видеть производительность различных опций эквалайзера. Можно использовать регистратор сигнала, чтобы сравнить результаты этого экспериментирования. Щелкните правой кнопкой по сигнальным проводам в блок-схеме и выберите Log Selected Signals.

В командной строке MATLAB™ введите edit slex_adaptive_eq_with_fading_init.m, чтобы открыть файл инициализации, затем изменить параметр и повторно выполнить симуляцию. Если вы включили журналирование сигнала, после того, как симуляция запустит концы, откроет Инспектора Данных моделирования, чтобы просмотреть регистрируемые сигналы. Например:

  • Настройте характеристики канала (params.maxDoppler |, params.pathDelays и params.pathGains). Адаптивный алгоритм RLS выполняет лучше, чем адаптивный алгоритм LMS как максимум, Доплер увеличен.

Смотрите также

Системные объекты

Блоки

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте