Эквалайзеры MLSE

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

В Communications Toolbox™, mlseeq функция, comm.MLSEEqualizer Система object™, и блок MLSE Equalizer использует алгоритм Viterbi, чтобы компенсировать линейно модулируемый сигнал через дисперсионный канал. Эти функции выводят оценку последовательности наибольшего правдоподобия сигнала при помощи оценки канала, смоделированного как фильтр конечного входного ответа (FIR).

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

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

  2. Использует алгоритм Viterbi, чтобы вычислить traceback пути и метрику состояния. Эти значения присвоены символам на каждом шаге алгоритма Viterbi. Метрики основаны на Евклидовом расстоянии.

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

Эквалайзер MLSE дает к лучшей теоретически возможной производительности, но в вычислительном отношении интенсивен.

Для справочного материала на эквалайзерах MLSE смотрите Выбранные ссылки для Эквалайзеров.

Компенсируйте векторный сигнал в MATLAB

Можно использовать mlseeq функция или comm.MLSEEqualizer Системный объект для эквализации MLSE в MATLAB®. Примеры в этом разделе вызывают mlseeq функция. Подобный рабочий процесс применяется при использовании comm.MLSEEqualizer Системный объект. Для примеров, которые используют Системный объект, смотрите comm.MLSEEqualizer Страница с описанием системного объекта.

mlseeq функция имеет два режима работы:

  • Непрерывный режим работы позволяет вам обработать серию векторов при помощи повторных вызовов mlseeq. Функция сохраняет свою информацию внутреннего состояния от одного вызова до следующего. Чтобы узнать больше, смотрите Компенсацию в Непрерывном Режиме работы.

  • Режим работы сброса позволяет вам задать преамбулу и постиноходь, которые сопровождают ваши данные. Чтобы узнать больше, смотрите Используя Преамбулу или Постиноходь.

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

Используйте mlseeq, чтобы Компенсировать Векторный Сигнал

В его самой простой форме, mlseeq функция компенсирует вектор модулируемых данных, когда вы задаете:

  • Предполагаемые коэффициенты канала (смоделированный как КИХ-фильтр).

  • Сигнальное созвездие для типа модуляции.

  • Алгоритм Viterbi traceback глубина. Большие значения для traceback глубины могут улучшить результаты эквалайзера, но увеличить время вычисления.

Сгенерируйте PSK модулируемый сигнал с набором порядка модуляции к четыре.

M = 4; 
msg = pskmod([1 2 2 0 3 1 3 3 2 1 0 2 3 0 1]',M);

Пропустите модулируемый сигнал через канал искажения.

chcoeffs = [.986; .845; .237; .12345+.31i];
filtmsg = filter(chcoeffs,1,msg);

Задайте ссылочное созвездие, traceback длина и оценка канала для эквалайзера MLSE. В этом примере точный канал обеспечивается как оценка канала.

const = pskmod([0:M-1],M);
tblen = 10;
chanest = chcoeffs;

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

msgEq = mlseeq(filtmsg,chanest,const,tblen,'rst');
isequal(msg,msgEq)
ans = logical
   1

Компенсация сигналов в непрерывном режиме работы

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

Примечание

Непрерывный режим работы подвергается задержке, как описано в Задержках Непрерывного Режима работы. Этот режим не может разместить преамбулу или постиноходь.

Процедура для непрерывного режима работы

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

sm = [];
ts = [];
ti = [];
for ...
    [y,sm,ts,ti] = mlseeq(x,chcoeffs,const,tblen,'cont',nsamp,sm,ts,ti);
...
end

Используя sm, ts, и ti как входные параметры вызывает mlseeq продолжать действовать от того, где это закончилось в предыдущей итерации. Используя sm, ts, и ti как выходные аргументы вызывает mlseeq обновить информацию состояния в конце текущей итерации. В первой итерации, sm, ts, и ti запустите как пустые матрицы, таким образом, первый вызов mlseeq функция инициализирует метрики всех состояний к 0.

Задержки непрерывного режима работы

Непрерывный режим работы с traceback глубиной tblen подвергается выходной задержке tblen символы. Первый tblen выходные символы не связаны с входным сигналом и последним tblen вводимые символы не связаны с выходным сигналом. Например, эта команда использует traceback глубину 3. Первые три выходных символа не связаны с входным сигналом ones(1,10).

y = mlseeq(ones(1,10),1,[-7:2:7],3,'cont')
y =
    -7   -7   -7    1    1    1    1    1    1    1

Важно отслеживать задержки, введенные различными фрагментами системы связи. Использование mlseeq, чтобы Компенсировать Вектор в Непрерывном примере Режима работы иллюстрирует, как объяснить задержку при вычислении коэффициента ошибок.

Используйте mlseeq, чтобы Компенсировать Вектор в Непрерывном Режиме работы

Этот пример показывает процедуру для использования непрерывного режима работы mlseeq функция в цикле.

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

Задайте динамические переменные.

numsym = 200; % Number of symbols in each iteration
numiter = 25; % Number of iterations

M = 4; % Use 4-PSK modulation
qpskMod = comm.QPSKModulator('PhaseOffset',0);

chcoeffs = [1 ; 0.25]; % Channel coefficients
chanest = chcoeffs; % Channel estimate

Чтобы инициализировать эквалайзер, задайте параметры для ссылочного созвездия, traceback длина, количество выборок на символ и переменные состояния sm, ts, и ti.

const = qpskMod((0:M-1)');
tblen = 10;
nsamp = 1;
sm = [];
ts = [];
ti = [];

Задайте переменные, чтобы накопить результаты каждой итерации цикла.

fullmodmsg = [];
fullfiltmsg = [];
fullrx = [];

Симулируйте систему при помощи цикла

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

for jj = 1:numiter
    msg = randi([0 M-1],numsym,1); % Random signal vector
    modmsg = qpskMod(msg); % PSK-modulated signal
    filtmsg = filter(chcoeffs,1,modmsg); % Filtered signal
    % Equalize the signal.
    [rx,sm,ts,ti] = mlseeq(filtmsg,chanest,const, ...
        tblen,'cont',nsamp,sm,ts,ti);
    % Update vectors with cumulative results.
    fullmodmsg = [fullmodmsg; modmsg];
    fullfiltmsg = [fullfiltmsg; filtmsg];
    fullrx = [fullrx; rx];
end

Вычисление коэффициента ошибок и графический вывод результатов

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

При принятии задержки во внимание вычислите общее количество ошибок символа.

hErrorCalc = comm.ErrorRate('ReceiveDelay',10);
err = step(hErrorCalc, fullmodmsg, fullrx);
numsymerrs = err(1)
numsymerrs = 0

Постройте сигнальное созвездие до и после эквализации. Точки в компенсируемом сигнале совпадают с точками идеального сигнального созвездия для 4-PSK.

h = scatterplot(fullfiltmsg); 
hold on;
scatterplot(fullrx,1,0,'r*',h);
legend('Filtered signal before equalization','Equalized signal',...
   'Location','NorthOutside');
hold off; 

Используйте преамбулу или постиноходь

Некоторые системы включают последовательность известных символов вначале или конца набора данных. Известная последовательность вначале или конец называются преамбулой или постиноходью, соответственно. mlseeq функция может разместить преамбулу и постиноходь, которые уже включены в ее входной сигнал. Когда вы вызываете функцию, вы задаете преамбулу и постиноходь как целочисленные векторы, которые представляют последовательность известных символов путем индексации в вектор сигнального созвездия. Например, вектор преамбулы [1 4 4] и сигнальное созвездие 4-PSK [1 j -1 -j] указывает, что модулируемый сигнал начинается с [1 -j -j].

Если ваша система использует преамбулу без постиноходи, используйте вектор постиноходи [] при вызове mlseeq. Если ваша система использует постиноходь без преамбулы, используйте вектор преамбулы [].

Восстановите сообщение, содержащее преамбулу

Восстановите сообщение, которое включает преамбулу, компенсируйте сигнал и проверяйте коэффициент ошибок символа.

Задайте порядок модуляции, эквалайзер traceback глубина, количество выборок на символ, преамбулу и длину сообщения.

M = 4; 
tblen = 16;
nsamp = 1;
preamble = [3;1];
msgLen = 500;

Сгенерируйте ссылочное созвездие.

const = pskmod(0:3,4);

Сгенерируйте сообщение при помощи случайных данных и предварительно ожидайте преамбулу к сообщению. Модулируйте случайные данные.

msgData = randi([0 M-1],msgLen,1);
msgData = [preamble; msgData];
msgSym = pskmod(msgData,M);

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

chcoeffs = [0.623; 0.489+0.234i; 0.398i; 0.21];
chanest = chcoeffs;
msgFilt = filter(chcoeffs,1,msgSym);
msgRx = awgn(msgFilt,9,'measured');

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

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

eqSym = mlseeq(msgRx,chanest,const,tblen,'rst',nsamp,preamble,[]);
[nsymerrs,ser] = symerr(msgSym,eqSym)
nsymerrs = 8
ser = 0.0159

Используя эквалайзеры MLSE в Simulink

Блок MLSE Equalizer использует алгоритм Viterbi, чтобы компенсировать линейно модулируемый сигнал через дисперсионный канал. Блок выводит оценку последовательности наибольшего правдоподобия (MLSE) сигнала при помощи вашей оценки канала, смоделированного как фильтр конечного входного ответа (FIR). При использовании блока MLSE Equalizer вы задаете оценку канала и сигнальное созвездие входного сигнала. Можно также задать ожидаемую преамбулу входного сигнала и постгулять как входные параметры с блоком MLSE Equalizer.

Эквализация MLSE с динамичным переключением канала

Используйте эквалайзер Оценки последовательности наибольшего правдоподобия (MLSE), чтобы компенсировать эффекты многопутевого Канала с релеевским замиранием. Эквалайзер MLSE вводит данные, которые прошли через время, варьируясь дисперсионный канал и оценка канала. Оценка канала содержит динамически развивающиеся коэффициенты канала Канала с релеевским замиранием 2D пути.

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

  • Передатчик генерирует QPSK случайные данные сигнала.

  • Нарушения канала включают многопутевое исчезновение и AWGN.

  • Получатель применяет эквализацию MLSE и демодуляцию QPSK.

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

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

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

Bernoulli Binary Generator блокируйтесь шаг расчета 5e-6 секунд соответствует небольшому уровню 200 Кбит/с и уровню символа QPSK 100 ksym/sec.

Multipath Rayleigh Fading Channel блокируйтесь настройки:

  • Максимальный эффект Доплера составляет 30 Гц.

  • Дискретная задержка пути является [0 1e-5], который соответствует двум последовательным шагам расчета данных о символе входа QPSK. Эта задержка отражает самый простой вектор задержки для канала 2D пути.

  • Среднее усиление пути [0 - 10].

  • Средние усиления пути нормированы к 0 дБ так, чтобы средняя входная мощность к AWGN блок составляет 1 Вт.

MLSE Equalizer блоку установили глубину Traceback на 10. Варьируйтесь эта глубина, чтобы изучить ее эффект на Частоте ошибок по битам (BER).

Демодулятор QPSK принимает входной кадр N-1 и генерирует 2N-1 выходная система координат. Эта выходная система координат и traceback глубина 10 результатов в задержке 20 битов. Модель выполняет основанную на системе координат обработку на системах координат, которые имеют 100 выборок на систему координат. Из-за основанной на системе координат обработки, существует свойственная задержка 100 битов в модели. Объединенные получают задержку 120, установлен в Получить параметре задержки блока Error Rate Calculation, выровняв выборки.

Вычисленный BER отображен. Графики созвездия показывают созвездие до и после эквализации.

BER = 0.033645

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

Объекты

Блоки

Похожие темы