mlseeq

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

Синтаксис

y = mlseeq(x,chcffs,const,tblen,opmode)
y = mlseeq(___,nsamp)
y = mlseeq(___,nsamp,preamble,postamble)
y = mlseeq(___,nsamp,init_metric,init_states,init_inputs)
[y,final_metric,final_states,final_inputs] = mlseeq(___)

Описание

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

пример

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

пример

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

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

пример

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

Примеры

свернуть все

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

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

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');

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

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

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

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

Задайте порядок модуляции, эквалайзер 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

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

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

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');

Компенсируйте полученные символы. Чтобы сконфигурировать эквалайзер, обеспечьте оценку канала, ссылочную совокупность, эквалайзер traceback глубина, рабочий режим, количество выборок на символ и информация об инициализации эквалайзера. Непрерывный рабочий режим задан для эквалайзера. В непрерывном рабочем режиме информация об инициализации эквалайзера (метрика, состояния и входные параметры) возвращается и используется в качестве входных параметров в следующей итерации цикла 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
Поддержка комплексного числа: Да

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

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

Режим работы, заданный как 'rst' или 'cont'.

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

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

'cont'

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

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

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

Зависимости

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

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

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

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

Зависимости

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

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

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

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

Зависимости

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

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

Метрики начального состояния, заданные как вектор-столбец с N, утверждают элементы. Для описания состояний N смотрите Количество состояний Вероятности.

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

Зависимости

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

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

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

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

Зависимости

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

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

Начальная буква traceback входные параметры, заданные как N states-by-tblen матрица целых чисел со значениями между 0 и M –1. Для описания состояний N смотрите Количество состояний Вероятности.

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

Зависимости

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

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

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

свернуть все

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

Финал нормированные метрики состояния, возвращенные как вектор с N, утверждает элементы. final_metric соответствует метрикам конечного состояния в конце traceback декодирование процесса. Для описания состояний N смотрите Количество состояний Вероятности.

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

Финал traceback состояния, возвращенные как N states-by-tblen матрица целых чисел со значениями между 0 и N, утверждает 1. final_states соответствует финалу traceback состояния в конце traceback декодирование процесса. Для описания состояний N смотрите Количество состояний Вероятности.

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

Финал traceback входные параметры, возвращенные как N states-by-tblen матрица целых чисел со значениями между 0 и M –1. final_inputs соответствует финалу traceback входные параметры в конце traceback декодирование процесса. M является порядком модуляции. Для описания состояний N смотрите Количество состояний Вероятности.

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

Больше о

свернуть все

Алгоритм Viterbi

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

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

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

Преамбула и постиноходь в режиме работы сброса

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

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

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

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

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

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

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

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

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

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

Выходной аргументВходной параметрЗначениеMatrixSize Область значений значений
final_metricinit_metricМетрики состояния1 NstatesВещественные числа
final_statesinit_statesТрэсебэк утверждаетN states-by-tblenЦелые числа между 0 и N утверждают 1
fianl_inputsinit_inputsВходные параметры TracebackN states-by-tblenЦелые числа между 0 и M –1

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

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

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

Ссылки

[1] Proakis, цифровая связь Джона Г., четвертый выпуск. Нью-Йорк: McGraw-Hill, 2001.

[2] Стил, Рэймонд, Эд. Коммуникации рации. Чичестер, Англия: John Wiley & Sons, 1996.

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