mlseeq

Выравнивание линейно модулированного сигнала с помощью MLSE

Описание

y = mlseeq(x,chcffs,const,tblen,opmode) выравнивает вектор сгенерированного модулированного сигнала частот x использование оценки последовательности максимальных правдоподобий (MLSE). chcffs обеспечивает оцененные коэффициенты канала. const обеспечивает идеальные точки сигнального созвездия. tblen задает глубину трассировки. opmode задает режим работы эквалайзера. MLSE реализован с использованием алгоритма Viterbi.

пример

y = mlseeq(___,nsamp) задает количество выборок на символ в x, в дополнение к аргументам в предыдущем синтаксисе.

пример

y = mlseeq(___,nsamp,preamble,postamble) задает количество выборок на символ в x, преамбула и postamble, в дополнение к аргументам в первом синтаксисе. Этот синтаксис применяется при opmode является 'rst' только. Для получения дополнительной информации смотрите Преамбулу и Постамб в режиме сброса Операции.

y = mlseeq(___,nsamp,init_metric,init_states,init_inputs)задает количество выборок на символ в x, начальные метрики состояния правдоподобия, начальные состояния трассировки и начальные входы трассировки для эквалайзера, в дополнение к аргументам в первом синтаксисе. Эти три входа обычно являются final_metric, final_states, и final_inputs формирует выходные параметры от предыдущего вызова этой функции. Этот синтаксис применяется при opmode является 'cont' только. Для получения дополнительной информации смотрите Инициализация в режиме непрерывной операции.

пример

[y,final_metric,final_states,final_inputs] = mlseeq(___) возвращает нормированные метрики окончательного состояния правдоподобия, окончательные состояния трекбэка и окончательные входы трекбэка в конце процесса декодирования трекбэка, используя любой из предыдущих синтаксисов входных аргументов. Этот синтаксис применяется при opmode является 'cont' только. Для получения дополнительной информации смотрите Инициализация в режиме непрерывной операции.

Примеры

свернуть все

Используйте режим сброса mlseeq эквалайзер. Демодулируйте сигнал и проверьте вероятность битовой ошибки.

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

M = 2;
tblen =  10; 
nsamp = 2;
msgLen = 1000;

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

const = pammod([0:M-1],M);

Сгенерируйте сообщение со случайными данными. Модулируйте и улучшайте сигнал.

msgData = randi([0 M-1],msgLen,1); 
msgSym = pammod(msgData,M);
msgSymUp = upsample(msgSym,nsamp); 

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

chanest = [0.986; 0.845; 0.237; 0.12345+0.31i]; 
msgFilt = filter(chanest,1,msgSymUp); 
msgRx = awgn(msgFilt,5,'measured');

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

eqSym = mlseeq(msgRx,chanest,const,tblen,'rst',nsamp);
eqMsg = pamdemod(eqSym,M);

[nerrs ber] = biterr(msgData, eqMsg)
nerrs = 1
ber = 1.0000e-03

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

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

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

Используйте непрерывный режим работы mlseeq эквалайзер. Демодулируйте полученные пакеты сигнала и проверьте статистику ошибок символа.

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

M = 4;
tblen =  10; 
nsamp = 1;
msgLen = 1000; 
numPkts = 25;

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

const = pskmod(0:M-1,M);

Установите начальные входные параметры для метрики, состояний и входов эквалайзера в пустые векторы. Эти начальные назначения представляют параметры для первого переданного пакета.

eq_metric = [];
eq_states = [];
eq_inputs = [];

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

ttlSymbErrs = 0;
aggrPktSER = 0;

Отправляйте и получайте несколько пакетов сообщений в цикле симуляции. Между передачей пакета и приемом фильтруют каждый пакет через канал искажения и добавляют Гауссов шум.

for jj = 1:numPkts

Сгенерируйте сообщение со случайными данными. Модулируйте сигнал.

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

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

    chanest = [.986; .845; .237; .12345+.31i]; 
    msgFilt = filter(chanest,1,msgMod);
    msgRx = awgn(msgFilt,10,'measured');

Выравнивание полученных символов. Чтобы сконфигурировать эквалайзер, предоставьте оценку канала, ссылочное созвездие, глубину отслеживания эквалайзера, режим работы, количество выборок на символ и информацию инициализации эквалайзера. Для эквалайзера задан непрерывный режим работы. В непрерывном рабочем режиме информация инициализации эквалайзера (метрика, состояния и входы) возвращается и используется как входы в следующей итерации for цикл.

    [eqSym,eq_metric,eq_states,eq_inputs] = ...
        mlseeq(msgRx,chanest,const,tblen,'cont',nsamp, ...
        eq_metric,eq_states,eq_inputs);

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

    [nsymerrs,ser] = symerr(msgMod(1:end-tblen),eqSym(tblen+1:end));
    ttlSymbErrs = ttlSymbErrs + nsymerrs;
    aggrPktSER = aggrPktSER + ser;
end
printTtlErr = 'A total of %d symbol errors over the %d packets received.\n';
fprintf(printTtlErr,ttlSymbErrs,numPkts);
A total of 155 symbol errors over the 25 packets received.

Отобразите совокупную вероятность ошибки символа.

printAggrSER = 'The aggregate symbol error rate was %6.5d.\n';
fprintf(printAggrSER,aggrPktSER/numPkts);
The aggregate symbol error rate was 6.26263e-03.

Входные параметры

свернуть все

Входной сигнал, заданный как вектор модулированных символов. Длина вектора x должно быть целым числом, кратным nsamp.

Типы данных: double
Поддержка комплексного числа: Да

Коэффициенты канала, заданные как вектор. Коэффициенты канала обеспечивают оценку отклика канала. Когда nsamp > 1, chcffs вход задает коэффициенты канала с избыточной дискретизацией.

Типы данных: double
Поддержка комплексного числа: Да

Ссылочное созвездие, заданное как вектор с M элементами. M - порядок модуляции. const приводит идеальные точки сигнального созвездия в последовательности, используемой модулятором.

Типы данных: double
Поддержка комплексного числа: Да

Глубина трассировки, заданная как положительное целое число. Эквалайзер отследит состояние вероятности с максимальной метрикой.

Типы данных: double

Операция, заданный как 'rst' или 'cont'.

ЗначениеИспользование
'rst'

Запустите эквалайзер, используя режим сброса. Позволяет вам задать preamble и postamble которые сопровождают входной сигнал. Функция обрабатывает входной сигнал, xнезависимо от входного сигнала от любых других вызовов этой функции. Этот режим работы не приводит к выходу. Для получения дополнительной информации смотрите Преамбулу и Постамб в режиме сброса Операции.

'cont'

Запустите эквалайзер, используя непрерывный режим работы. Позволяет вам сохранить информацию о внутреннем состоянии эквалайзера для использования в последующем вызове этой функции. Непрерывный режим работы полезен, если входной сигнал разделен на поток пакетов, обрабатываемых в цикле. Этот режим работы несет выход задержку tblen символы. Для получения дополнительной информации смотрите Инициализация в режиме непрерывной операции.

Типы данных: char

Количество выборок на символ, заданное в виде положительного целого числа. nsamp - коэффициент избыточной дискретизации.

Зависимости

Входной сигнал, x, должно быть целым числом, кратным nsamp.

Типы данных: double

Преамбула входного сигнала, заданная как вектор из целых чисел между 0 и M -1, где M является порядком модуляции. Чтобы опустить преамбулу, задайте [].

Для получения дополнительной информации смотрите Преамбулу и Постамб в режиме сброса Операции.

Зависимости

Этот входной параметр применяется только когда opmode установлено в 'rst'.

Типы данных: double

Входной сигнал postamble, заданный как вектор из целых чисел между 0 и M -1, где M является порядком модуляции. Чтобы опустить постамбл, задайте [].

Для получения дополнительной информации смотрите Преамбулу и Постамб в режиме сброса Операции.

Зависимости

Этот входной параметр применяется только когда opmode установлено в 'rst'.

Типы данных: double

Метрики начального состояния, заданные как вектор-столбец с элементами N состояний. Описание N состояний см. в разделе «Количество состояний вероятности».

Для получения дополнительной информации смотрите Инициализация в режиме непрерывной операции.

Зависимости

Этот входной параметр применяется только когда opmode установлено в 'cont'. Если задается [] для init_metric, вы также должны задать [] для init_states и init_inputs.

Типы данных: double

Начальные состояния трассировки, заданные как N состояния-by- tblen матрица целых чисел со значениями между 0 и N состояниями-1. Описание N состояний см. в разделе «Количество состояний вероятности».

Для получения дополнительной информации смотрите Инициализация в режиме непрерывной операции.

Зависимости

Этот входной параметр применяется только когда opmode установлено в 'cont'. Если задается [] для init_states, вы также должны задать [] для init_metric и init_inputs.

Типы данных: double

Начальные входы трассировки, заданная как N состояний by- tblen матрица целых чисел со значениями от 0 до M -1. Описание N состояний см. в разделе «Количество состояний вероятности».

Для получения дополнительной информации смотрите Инициализация в режиме непрерывной операции.

Зависимости

Этот входной параметр применяется только когда opmode установлено в 'cont'. Если задается [] для init_inputs, вы также должны задать [] для init_metric и init_states.

Типы данных: double

Выходные аргументы

свернуть все

Выходной сигнал, возвращенный как вектор модулированных символов.

Окончательные нормированные метрики состояния, возвращенные как вектор с N элементами состояний. final_metric соответствует метрикам конечного состояния в конце процесса декодирования traceback. Описание N состояний см. в разделе «Количество состояний вероятности».

Для получения дополнительной информации смотрите Инициализация в режиме непрерывной операции.

Окончательные состояния трассировки, возвращенные как N состояния-by- tblen матрица целых чисел со значениями между 0 и N состояниями-1. final_states соответствует конечным состояниям traceback в конце процесса декодирования traceback. Описание N состояний см. в разделе «Количество состояний вероятности».

Для получения дополнительной информации смотрите Инициализация в режиме непрерывной операции.

Итоговые входы трассировки, возвращенная как N состояний by- tblen матрица целых чисел со значениями от 0 до M -1. final_inputs соответствует конечным входам traceback в конце процесса декодирования traceback. M - порядок модуляции. Описание N состояний см. в разделе «Количество состояний вероятности».

Для получения дополнительной информации смотрите Инициализация в режиме непрерывной операции.

Подробнее о

свернуть все

Алгоритм Viterbi

Этот Алгоритм Viterbi является последовательным алгоритмом поиска шпалеры, используемым для выполнения максимального обнаружения последовательности правдоподобия.

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

Для получения дополнительной информации см. [1] и [2].

Преамбула и постамб в режиме сброса Операции

При работе эквалайзера MLSE в режиме сброса можно задать преамбулу и постамбл как входные параметры. Задайте preamble и postamble как векторы, равные преамбуле и postamble, которые подготовлены и присоединены, соответственно, к входному сигналу. The preamble и postamble векторы состоят из целых чисел от 0 до M -1, где M - количество элементов в const. Чтобы опустить preamble или postamble входной параметр, задайте [].

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

  • Если preamble не пуст, функция декодирует преамбулу и присваивает метрику 0 декодированному состоянию. Если преамбула не декодируется в уникальное состояние (то есть если длина преамбулы меньше, чем память канала), декодер присваивает метрику 0 всем состояниям, которые представлены преамбулой. Путь трассировки заканчивается в одном из состояний, представленных преамбулой.

  • Если preamble является []декодер инициализирует метрики всех состояний в 0.

  • Если postamble не пуст, путь трассировки начинается с наименьшего из всех возможных декодированных состояний, которые представлены постамблом.

  • Если postamble является []путь трассировки начинается в состоянии с наименьшей метрики.

Инициализация в режиме непрерывной операции

При работе эквалайзера MLSE в непрерывном режиме можно инициализировать эквализацию на основе значений, возвращенных в предыдущем вызове функции.

В конце процесса декодирования traceback функция возвращается final_metric, final_states, и final_inputs. Когда opmode является 'cont', присвойте эти выходы init_metric, init_states, и init_inputs, соответственно для следующего вызова функции. Эти назначения инициализируют эквалайзер, чтобы начать с метрик окончательного состояния, окончательных состояний трассировки и окончательных входов трассировки от предыдущего вызова функции.

Каждое действительное число в init_metric представляет метрику начального состояния соответствующего состояния. init_states и init_inputs совместно задайте начальную память отката эквалайзера.

Выходной аргументВходной параметрЗначениеРазмер матрицыОбласть значений значений
final_metricinit_metricМетрики состояния1-by- N состоянияДействительные числа
final_statesinit_statesСостояния трассировкиN состояний by- tblenЦелые числа от 0 до N состояний-1
fianl_inputsinit_inputsВходы трассировкиN состояний by- tblenЦелые числа от 0 до M -1

Чтобы использовать значения по умолчанию для init_metric, init_states, и init_inputs, задайте каждый как []. Описание N состояний см. в разделе «Количество состояний вероятности».

Количество состояний вероятности

Количество состояний вероятности, N состояний, является количеством коррелятивных состояний фазы в решетке. N состояния равны ML-1, где M количество элементов в const и L количество символов в неотвернутой импульсной характеристике канала.

Ссылки

[1] Proakis, John G. Digital Communications, Fourth Edition. Нью-Йорк: McGraw-Hill, 2001.

[2] Steele, Raymond, Ed. Mobile Radio Communications. Chichester, England: John Wiley & Sons, 1996.

Представлено до R2006a