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