Компенсируйте линейно модулируемый сигнал с помощью MLSE
компенсирует вектор сгенерированного модулированного сигнала y
= mlseeq(x
,chcffs
,const
,tblen
,opmode
)x
использование оценки последовательности наибольшего правдоподобия (MLSE). chcffs
обеспечивает оцененные коэффициенты канала. const
обеспечивает идеальные точки сигнального созвездия. tblen
задает traceback глубину. opmode
задает режим работы эквалайзера. MLSE реализован с помощью алгоритма Viterbi.
задает количество выборок на символ в y
= mlseeq(___,nsamp
,init_metric
,init_states
,init_inputs
)x
, начальные метрики состояния вероятности, начальная буква traceback состояния и начальная буква traceback вводят для эквалайзера, в дополнение к аргументам в первом синтаксисе. Этими тремя входными параметрами обычно является final_metric
, final_states
, и final_inputs
выходные параметры от предыдущего вызова до этой функции. Этот синтаксис применяется когда opmode
'cont'
только. Для получения дополнительной информации смотрите Инициализацию в Непрерывном Режиме работы.
[
возвращает нормированные итоговые метрики состояния вероятности, финал traceback состояния и финал traceback входные параметры в конце traceback декодирование процесса, с помощью любого из предыдущих синтаксисов входного параметра. Этот синтаксис применяется когда y
,final_metric
,final_states
,final_inputs
] = mlseeq(___)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
. Поскольку система не использует постиноходь, пустой вектор задан как последний входной параметр в этом mlseeq
синтаксис.
Проверяйте коэффициент ошибок символа компенсируемого сигнала. Результаты запуска-к-управляемому варьируются из-за использования случайных чисел.
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
— Входной сигналВходной сигнал, заданный как вектор модулируемых символов. Длина вектора x
должно быть целочисленное кратное nsamp
.
Типы данных: double
Поддержка комплексного числа: Да
chcffs
— Коэффициенты каналаКоэффициенты канала, заданные как вектор. Коэффициенты канала обеспечивают оценку ответа канала. Когда nsamp
> 1, chcffs
введите задает сверхдискретизированные коэффициенты канала.
Типы данных: double
Поддержка комплексного числа: Да
const
— Ссылочное созвездиеСсылочное созвездие, заданное как вектор с элементами M. M является порядком модуляции. const
перечисляет идеальные точки сигнального созвездия в последовательности, используемой модулятором.
Типы данных: double
Поддержка комплексного числа: Да
tblen
— Глубина TracebackГлубина Traceback, заданная как положительное целое число. Эквалайзер прослеживает от состояния вероятности с максимальной метрикой.
Типы данных: double
opmode
— Режим работы'rst'
| 'cont'
Режим работы, заданный как 'rst'
или 'cont'
.
Значение | Использование |
---|---|
'rst' | Запустите эквалайзер с помощью рабочего режима сброса. Позволяет вам задать |
'cont' | Запустите эквалайзер с помощью непрерывного рабочего режима. Позволяет вам сохранить информацию внутреннего состояния эквалайзера для использования в последующем вызове этой функции. Непрерывный рабочий режим полезен, если входной сигнал разделен в поток пакетов, обработанных в цикле. Этот рабочий режим подвергается выходной задержке |
Типы данных: char
nsamp
— Количество выборок на символ
(значение по умолчанию) | положительное целое числоКоличество выборок на символ, заданный как положительное целое число. nsamp
фактор сверхдискретизации.
Входной сигнал, x
, должно быть целочисленное кратное nsamp
.
Типы данных: double
preamble
— Преамбула входного сигналаПреамбула входного сигнала, заданная как вектор целых чисел между 0 и M –1, где M является порядком модуляции. Чтобы не использовать преамбулу, задайте []
.
Для получения дополнительной информации см. Преамбулу и Постиноходь в Режиме работы Сброса.
Этот входной параметр применяется только когда opmode
установлен в 'rst'
.
Типы данных: double
postamble
— Постиноходь входного сигналаПостиноходь входного сигнала, заданная как вектор целых чисел между 0 и M –1, где M является порядком модуляции. Чтобы не использовать постиноходь, задайте []
.
Для получения дополнительной информации см. Преамбулу и Постиноходь в Режиме работы Сброса.
Этот входной параметр применяется только когда opmode
установлен в 'rst'
.
Типы данных: double
init_metric
— Метрики начального состоянияМетрики начального состояния, заданные как вектор-столбец с N, утверждают элементы. Для описания состояний N смотрите Количество состояний Вероятности.
Для получения дополнительной информации смотрите Инициализацию в Непрерывном Режиме работы.
Этот входной параметр применяется только когда opmode
установлен в 'cont'
. При определении []
для init_metric
, необходимо также задать []
для init_states
и init_inputs
.
Типы данных: double
init_states
— Начальная буква traceback состоянияНачальная буква traceback состояния, заданные как N states-by-tblen
матрица целых чисел со значениями между 0 и N утверждает 1. Для описания состояний N смотрите Количество состояний Вероятности.
Для получения дополнительной информации смотрите Инициализацию в Непрерывном Режиме работы.
Этот входной параметр применяется только когда opmode
установлен в 'cont'
. При определении []
для init_states
, необходимо также задать []
для init_metric
и init_inputs
.
Типы данных: double
init_inputs
— Начальная буква traceback входные параметры[]
(значение по умолчанию) | матрица целых чиселНачальная буква traceback входные параметры, заданные как N states-by-tblen
матрица целых чисел со значениями между 0 и M –1. Для описания состояний N смотрите Количество состояний Вероятности.
Для получения дополнительной информации смотрите Инициализацию в Непрерывном Режиме работы.
Этот входной параметр применяется только когда opmode
установлен в 'cont'
. При определении []
для init_inputs
, необходимо также задать []
для init_metric
и init_states
.
Типы данных: double
y
— Выходной сигналВыходной сигнал, возвращенный как вектор модулируемых символов.
final_metric
— Финал нормированные метрики состоянияФинал нормированные метрики состояния, возвращенные как вектор с N, утверждает элементы. final_metric
соответствует метрикам конечного состояния в конце traceback декодирование процесса. Для описания состояний N смотрите Количество состояний Вероятности.
Для получения дополнительной информации смотрите Инициализацию в Непрерывном Режиме работы.
final_states
— Финал traceback состоянияФинал traceback состояния, возвращенные как N states-by-tblen
матрица целых чисел со значениями между 0 и N утверждает 1. final_states
соответствует финалу traceback состояния в конце traceback декодирование процесса. Для описания состояний N смотрите Количество состояний Вероятности.
Для получения дополнительной информации смотрите Инициализацию в Непрерывном Режиме работы.
final_inputs
— Финал traceback входные параметрыФинал traceback входные параметры, возвращенные как N states-by-tblen
матрица целых чисел со значениями между 0 и M –1. final_inputs
соответствует финалу traceback входные параметры в конце traceback декодирование процесса. M является порядком модуляции. Для описания состояний N смотрите Количество состояний Вероятности.
Для получения дополнительной информации смотрите Инициализацию в Непрерывном Режиме работы.
Алгоритм Viterbi является последовательным алгоритмом поиска решетки, используемым, чтобы выполнить обнаружение последовательности наибольшего правдоподобия.
Эквалайзер MLSE использует алгоритм Viterbi, чтобы рекурсивно искать последовательности, которые максимизируют функцию правдоподобия. Используя алгоритм Viterbi сокращает количество последовательностей в поиске решетки путем устранения последовательностей, когда новые данные получены. Метрика, используемая, чтобы определить последовательность наибольшего правдоподобия, является корреляцией между полученным сигналом и предполагаемым сигналом для каждого полученного символа по Количеству состояний Вероятности.
При работе эквалайзером 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_metric | init_metric | Метрики состояния | 1 Nstates | Вещественные числа |
final_states | init_states | Трэсебэк утверждает | N states-by-tblen | Целые числа между 0 и N утверждают 1 |
fianl_inputs | init_inputs | Входные параметры Traceback | N 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.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.