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

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

В Communications Toolbox™, comm.LinearEqualizer и comm.DecisionFeedbackEqualizer Системные объекты и Linear Equalizer и Decision Feedback Equalizer блокируют сетевые фильтры задержки касания использования, чтобы компенсировать линейно модулируемый сигнал через дисперсионный канал. Эти функции выводят оценку сигнала при помощи оценки канала, смоделированного как фильтр конечного входного ответа (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 Система 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');

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

eqrls = comm.LinearEqualizer;
eqrls.Algorithm
ans = 
'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 команда.

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 и CMA адаптивные алгоритмы и для эквалайзеров обратной связи решения.

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

Симулируйте систему с задержкой между переданными символами и полученными выборками. Типичные системы имеют фильтры передатчика и получателя, которые приводят к задержке. Эта задержка должна составляться, чтобы синхронизировать систему. В этом примере системная задержка введена без передачи, и получите фильтры. Линейная эквализация, с помощью алгоритма наименьшее количество средних квадратичных (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

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

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

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

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

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

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

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

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

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

Эта модель обеспечивает несколько способов для вас изменить настройки и наблюдать результаты. InitFcn найденный в File>Model Properties>Callbacks вызовы cm_ex_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 error построенный в Диаграмме погрешностей Eq, указывает на плохую эквализацию в начале симуляции. Ошибка ухудшается, сначала затем улучшается, когда эквалайзер сходится.

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

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

В командной строке MATLAB™ введите edit cm_ex_adaptive_eq_with_fading_init.m чтобы открыть файл инициализации, затем измените параметр и повторно выполните симуляцию. Например, настройте характеристики канала (params.maxDoppler |, params.pathDelays, и params.pathGains). Адаптивный алгоритм RLS выполняет лучше, чем адаптивный алгоритм LMS как максимум, Доплер увеличен.

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

Объекты

Блоки

Похожие темы