Эквалайзеры оценки последовательности максимальных вероятностей (MLSE) обеспечивают оптимальную эквализацию временных изменений характеристик канала распространения. Однако эквалайзеры MLSE иногда менее привлекательны, потому что их вычислительная сложность выше, чем адаптивные эквалайзеры.
В Communications Toolbox™, mlseeq
функция, comm.MLSEEqualizer
Системный object™ и MLSE Equalizer блок используют алгоритм Viterbi, чтобы выровнять линейно модулированный сигнал через дисперсионный канал. Эти функции выводят максимальную оценку последовательности правдоподобия сигнала путем использования оценки канала, смоделированного как фильтр с конечной входной характеристикой (конечной импульсной характеристикой).
Чтобы декодировать принятый сигнал, эквалайзер MLSE:
Применяет конечная импульсная характеристика к символам входного сигнала. Веса отводов конечной импульсной характеристики соответствуют оценке канала.
Использует алгоритм Viterbi, чтобы вычислить пути трассировки и метрику состояния. Эти значения присваиваются символам на каждом шаге Алгоритма Viterbi. Метрики основаны на евклидовом расстоянии.
Выводит оценку максимальной последовательности правдоподобия сигнала как последовательность комплексных чисел, соответствующих точкам созвездия модулированного сигнала.
Эквалайзер MLSE приводит к наилучшей теоретически возможной эффективности, но является вычислительно интенсивным.
Фоновый материал эквалайзеров MLSE см. в разделе «Выбранные ссылки для эквалайзеров».
Вы можете использовать mlseeq
функция или comm.MLSEEqualizer
Системный объект для эквализации MLSE в MATLAB®. Примеры в этом разделе вызывают mlseeq
функция. Аналогичный рабочий процесс применяется при использовании comm.MLSEEqualizer
Системный объект. Для примеров, которые используют системный объект, смотрите comm.MLSEEqualizer
Системный объект страницы с описанием.
mlseeq
Функция имеет две операции:
Непрерывный режим работы позволяет вам обработать серию векторов, используя повторные вызовы к mlseeq
. Функция сохраняет информацию о своем внутреннем состоянии от одного вызова к следующему. Дополнительные сведения см. в разделе Уравнение в режиме непрерывной операции.
Режим операции сброса позволяет вам задать преамбулу и постамб, которые сопровождают ваши данные. Чтобы узнать больше, смотрите Использование преамбулы или Postamble.
Если вы не обрабатываете серию векторов и не должны задавать преамбулу или постамбл, рабочие режимы почти идентичны. Они отличаются тем, что непрерывный режим операции имеет задержку, в то время как режим сброса операции не имеет. В следующем примере используется режим сброса операции. Если вы измените пример, чтобы запустить его в режиме непрерывной операции, будет задержка в выравненном выходе. Дополнительные сведения об этой задержке см. в разделе Задержки в режиме непрерывной операции.
В самой простой форме mlseeq
функция выравнивает вектор модулируемых данных, когда вы задаете:
Оценочные коэффициенты канала (моделируются как конечная импульсная характеристика).
Сигнальное созвездие для типа модуляции.
Глубина следа алгоритма Viterbi. Большие значения глубины следа могут улучшить результаты эквалайзера, но увеличить время расчета.
Сгенерируйте 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);
Задайте созвездие ссылки, длину обратного вызова и оценку канала для эквалайзера 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'
как входной параметр.
Примечание
Режим непрерывной операции имеет задержку, как описано в разделе Задержки в режиме непрерывной операции. Этот режим не может включать преамбулу или постамб.
При использовании режима непрерывной операции в цикле предварительно выделите три пустые матричные переменные, чтобы сохранить метрики состояния, состояния трассировки и входы трассировки для эквалайзера перед началом цикла эквализации. Внутри цикла активируйте 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
start как пустые матрицы, поэтому первый вызов mlseeq
функция инициализирует метрики всех состояний в 0.
Непрерывный режим работы с глубиной обратного вызова tblen
несет выход задержку tblen
символы. Первый tblen
выходные символы не связаны с входным сигналом и последним tblen
Входы символы не связаны с сигналом выхода. Например, эта команда использует глубину трассировки 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
функция в цикле.
Инициализация переменных
Задайте переменные во время выполнения.
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
Чтобы инициализировать эквалайзер, задайте параметры для ссылки созвездия, длины обратного вызова, количества выборок на символ и переменных состояния sm
, ts
, и ti
.
const = qpskMod((0:M-1)'); tblen = 10; nsamp = 1; sm = []; ts = []; ti = [];
Задайте переменные, чтобы накопить результаты из каждой итерации цикла.
fullmodmsg = []; fullfiltmsg = []; fullrx = [];
Симулируйте систему при помощи цикла
Запустите симуляцию в цикле, который генерирует случайные данные, модулирует данные с помощью модуляции PSK основной полосы частот и фильтрует данные. The 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
Вычисление частоты ошибок и результаты построения графиков
Вычислите вероятность ошибки символа из всех итераций цикла. The symerr
функция сравнивает выбранные фрагменты принятых и переданных сигналов, а не целые сигналы. Потому что непрерывный режим работы несет задержку, чья длина в выборках является глубиной отслеживания (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
функция может включать преамбулу и постамб, которые уже включены в ее входной сигнал. Когда вы вызываете функцию, вы задаете преамбулу и postamble как целочисленные векторы, которые представляют последовательность известных символов путем индексации в вектор сигнального созвездия. Для примера - вектор преамбулы [1 4 4]
и 4-PSK сигнальное созвездие [1 j -1 -j]
указывает, что модулируемый сигнал начинается с [1 -j -j]
.
Если ваша система использует преамбулу без postamble, используйте вектор postamble of []
при вызове mlseeq
. Если ваша система использует postamble без преамбулы, используйте вектор преамбулы []
.
Восстановите сообщение, которое включает преамбулу, выровняйте сигнал и проверьте вероятность ошибки символа.
Задайте порядок модуляции, глубину отслеживания эквалайзера, количество выборок на символ, преамбулу и длину сообщения.
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');
Выравнивание принимаемого сигнала. Чтобы сконфигурировать эквалайзер, предоставьте оценку канала, ссылочное созвездие, глубину отслеживания эквалайзера, режим работы, количество выборок на символ и преамбулу. Те же символы преамбулы появляются в начале вектора сообщения и в синтаксисе mlseeq
. Поскольку система не использует postamble, пустой вектор задается в качестве последнего входного параметра в этой mlseeq
синтаксис.
Проверьте вероятность ошибки символа выравниваемого сигнала. Результаты прогона варьируются из-за использования случайных чисел.
eqSym = mlseeq(msgRx,chanest,const,tblen,'rst',nsamp,preamble,[]);
[nsymerrs,ser] = symerr(msgSym,eqSym)
nsymerrs = 8
ser = 0.0159
Блок MLSE Equalizer использует алгоритм Viterbi, чтобы выровнять линейно модулированный сигнал через дисперсионный канал. Блок выводит максимальную оценку последовательности правдоподобия (MLSE) сигнала путем использования вашей оценки канала, смоделированного как фильтр с конечной входной характеристикой (конечной импульсной характеристикой). При использовании блока MLSE Equalizer вы задаете оценку канала и сигнальное созвездие входного сигнала. Можно также задать ожидаемую преамбулу входного сигнала и postamble в качестве входных параметров для блока MLSE Equalizer.
Используйте эквалайзер оценки последовательности максимальных правдоподобий (MLSE), чтобы выровнять эффекты многолучевого Канала с релеевским замиранием. Эквалайзер MLSE вводит данные, которые прошли через изменяющийся во времени дисперсионный канал и оценку канала. Оценка канала содержит динамически изменяющиеся коэффициенты канала двухпутного Канала с релеевским замиранием.
Структура модели
Передатчик генерирует данные случайного сигнала QPSK.
Нарушения канала включают многолучевое замирание и AWGN.
Приемник применяет MLSE эквализацию и QPSK демодуляцию.
Модель использует возможности и вычисление BER, чтобы показать поведение системы.
Исследуйте модель примера
Эксперименты с моделью
The Bernoulli Binary Generator
блочный шаг расчета 5e-6 секунд соответствует скорости передачи битов 200 кбит/с и скорости символа QPSK 100 км/с.
The Multipath Rayleigh Fading Channel
настройки блоков:
Максимальный доплеровский сдвиг составляет 30 Гц.
Дискретная задержка пути составляет [0 1e-5], что соответствует двум последовательным шагам расчета входных данных символа QPSK. Эта задержка отражает самый простой вектор задержки для двухпутного канала.
Средний коэффициент усиления пути [0 -10].
Среднее усиление пути нормировано до 0 дБ, так что средний вход степени в AWGN
блок составляет 1 Вт.
The MLSE Equalizer
для блока задана глубина трассировки 10. Измените эту глубину, чтобы изучить ее эффект на вероятность битовой ошибки (BER).
Демодулятор QPSK принимает N-by-1 входной кадр и генерирует 2N-by-1 выход система координат. Эта выходная система координат и глубина трассировки 10 приводит к задержке 20 биты. Модель выполняет обработку на основе кадра для систем координат, которые имеют 100 выборки на систему координат. Из-за обработки на основе фрейма в модели присуща задержка в 100 биты. Комбинированная задержка приема 120 устанавливается в параметре Receive delay блока Error Rate Calculation, выравнивая выборки.
Отображается вычисленный BER. Графики созвездия показывают созвездие до и после эквализации.
BER = 0.033645