Эквалайзеры Оценки последовательности наибольшего правдоподобия (MLSE) обеспечивают оптимальную коррекцию изменений времени в характеристиках канала распространения, но иногда менее привлекательны, потому что их вычислительная сложность выше, чем Адаптивные Эквалайзеры.
В Communications Toolbox™ функция mlseeq
, Система comm.MLSEEqualizer
object™, и блок MLSE Equalizer использует алгоритм Viterbi, чтобы компенсировать линейно модулируемый сигнал через дисперсионный канал. Эти функции выводят оценку последовательности наибольшего правдоподобия сигнала, с помощью оценки канала, смоделированного как фильтр конечного входного ответа (FIR).
Декодировать полученный сигнал, алгоритм Viterbi:
Применяет КИХ-фильтр, соответствуя оценке канала, к символам во входном сигнале.
Использует алгоритм Viterbi, чтобы вычислить traceback пути и метрику состояния, которые являются номерами, присвоенными символам на каждом шаге алгоритма Viterbi. Метрики основаны на Евклидовом расстоянии.
Выводит оценку последовательности наибольшего правдоподобия сигнала, как последовательность комплексных чисел, соответствующих точкам совокупности модулируемого сигнала.
Эквалайзер MLSE приводит к лучшей теоретически возможной производительности, но в вычислительном отношении интенсивен.
Для справочного материала об эквалайзерах MLSE смотрите работы, перечисленные в Выбранной Библиографии для Эквалайзеров.
Можно использовать функцию mlseeq
или Системный объект comm.MLSEEqualizer
для коррекции MLSE в MATLAB®. Примеры в этом разделе вызывают функцию mlseeq
. Подобный рабочий процесс применяется при использовании Системного объекта comm.MLSEEqualizer
. Для примеров, которые используют Системный объект, смотрите страницу с описанием Системного объекта comm.MLSEEqualizer
.
Функция 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
в цикле.
Инициализируйте переменные
Задайте динамические переменные.
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 Equalizer использует алгоритм Viterbi, чтобы компенсировать линейно модулируемый сигнал через дисперсионный канал. Блок выводит оценку последовательности наибольшего правдоподобия (MLSE) сигнала, с помощью оценки канала, смоделированного как фильтр конечного входного ответа (FIR). При использовании блока MLSE Equalizer вы задаете оценку канала и сигнальное созвездие входного сигнала. Можно также задать ожидаемую преамбулу входного сигнала и постгулять как входные параметры к блоку MLSE Equalizer.
Используйте эквалайзер Оценки последовательности наибольшего правдоподобия (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