У меня есть нечетный канал связи, и мне нужно обнаружить ошибки, а также исключить определенные последовательности в канале.Устранение последовательностей в сообщении
Каждое сообщение имеет длину 12 бит, разделенное на 3 куска (по 4 бита каждый). Мне нужно извлечь по меньшей мере 450 различных кодов из этого, так что я могу иметь расстояние от помех до 3.
Однако, у меня не может быть двух полубайтов в последовательности одинаковых, поэтому следующие последовательности недействительны:
0xf 0xf 0xf - Three of the same nibbles in sequence
0x8 0x8 0x0 - Two of the same nibbles in sequence
0xf 0x3 0x3 - Two of the same nibbles in sequence
Кроме того, сообщения могут следовать друг за другом без перерыва, поэтому начало одной последовательности не могут иметь один и тот же первый клев как конец последней последовательности:
0x327 0x743 - Even though they are not in the same message, two sequential nibbles are the same in the message stream
Но следующие последовательности штраф:
0x1 0x2 0x1 - Two nibbles same, but separated by another nibble
0x0 0x1 0x2 - All nibbles different
0xf 0x8 0x3 - All nibbles different
И следующая серия сообщений в порядке:
0x121 0x012 0xf83 - No two adjacent nibbles are the same is the stream of messages
Моя первая мысль заключается в использовании 9 бит для моего сообщения, разделить на три 3 битовых частей, как верхние биты каждого кусочкам:
mmmc mmmc mmmc - Each character is a bit, m bits are message, c bits are checksum/parity/etc
Затем создайте таблицу ввода 512, которая дает мне три бита, чтобы заполнить c
тем, что создаст расстояние для хамминга, устраняя неприятные последовательности.
Однако это будет работать на низкопробном встроенном процессоре, и если я смогу использовать арифметику для генерации бит «c
» на лету, это сэкономит память (взамен большего времени процессора), что является более ценным в этом дело.
Есть ли какая-то математика, которую я могу выполнить, чтобы решить эту проблему без таблицы?
С другой стороны, существует ли другой способ упаковки с математикой, отвечающий требованиям?
"По меньшей мере 450 кодов"? Сколько кодов вам нужно представить максимум? –
@MarkAdler Нет верхней границы - я возьму столько кодов, сколько могу получить, которые все еще соответствуют требованиям. –
Я не считаю, что существует набор из 450 12-битных кодовых слов с расстоянием Хэмминга не менее трех для любой пары. Поэтому, если это ваше требование, я думаю, что это невозможно. –