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

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

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

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

  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. Поскольку система не использует постиноходи, пустой вектор iis заданный как последний входной параметр в этом синтаксисе mlseeq.

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

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.033656

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

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

Блоки

Похожие темы