Какие методы вы можете использовать для кодирования данных в одностороннем канале с потерями? - PullRequest
5 голосов
/ 05 августа 2009

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

Но вам нужно отправлять данные через него независимо от того. Какие методы вы можете использовать для отправки чисел и текста по этому каналу?

  1. Можно ли кодировать числа так, чтобы даже при случайном перевороте битов их можно было интерпретировать как значения, близкие к оригиналу ( с потерями передача)?

  2. Есть ли способ отправить строку символов (скажем, ASCII) без потерь способом?

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

Ответы [ 9 ]

9 голосов
/ 09 августа 2009

В зависимости от некоторых деталей, которые вы не предоставляете о своем канале с потерями, я бы рекомендовал сначала использовать код Грея , чтобы гарантировать, что однобитовые ошибки приводят к небольшим различиям (чтобы удовлетворить ваше желание уменьшение потерь при передаче с потерями), а затем возможно также кодирование результирующего потока с помощью некоторого «без потерь» (== пытается быть кодированием без потерь ;-).

Рид-Соломон и его варианты особенно хороши, если ваши шумовые эпизоды могут возникать в небольших пакетах (несколько битовых ошибок, скажем, в одном байте), которые должны хорошо взаимодействовать с кодированием Грея ( так как многоразрядные ошибки являются убийцами для аспекта Грея «уменьшения потерь», предназначенного для постепенного ухудшения качества однобитовых ошибок в проводной сети). Это связано с тем, что R-S по своей сути является блочной схемой, и множественные ошибки в одном блоке в основном совпадают с одной ошибкой в ​​нем, с точки зрения R-S; -).

RS особенно замечателен, если многие из ошибок стирают - проще говоря, стирание - это символ, который, скорее всего, был искажен при передаче, НО для которого вы действительно знаете решающий факт что это было искалечено. Физический уровень, в зависимости от того, как он спроектирован, часто может иметь подсказки об этом факте, и, если есть способ сообщить об этом верхним уровням, это может оказать решающую помощь. Позвольте мне немного пояснить стирание ...:

Скажем упрощенный пример, что 0 посылается как уровень -1 вольт и 1, посылают как уровень +1 вольт (WRT некоторая опорная волна), но есть шум (физический уровень шума часто может быть хорошо по образцу, спросите любого компетентного инженера связи ;-); в зависимости от модели шума, декодирование может быть таким, что все -0,7 В и ниже считается 0 битом, все +0,7 В и выше считается 1 битом, все промежуточное считается стиранием, т. е. высшему уровню сообщается что рассматриваемый бит, вероятно, был искажен при передаче и поэтому должен игнорироваться. (Иногда я привожу это в качестве одного из примеров моего тезиса о том, что иногда абстракции ДОЛЖНЫ «просачиваться» - контролируемым и спроектированным образом: следствие Мартелли к закону Сполски об утечках ! -).

Код RS с любым заданным коэффициентом избыточности может быть примерно в два раза эффективнее при исправлении стираний (ошибок, о которых говорится в декодере), чем при исправлении неизвестных в противном случае ошибок - также возможно смешивать оба аспекта, исправляя оба некоторые стирания И некоторые другие неизвестные ошибки.

Как вершина, пользовательские коды RS могут (разумно легко) разрабатываться и адаптироваться для уменьшения вероятности не исправленных ошибок ниже любого необходимого порогового значения θ с учетом точной модели характеристик физического канала с точки зрения как стираний, так и необнаружений. ошибки (включая как вероятность, так и всплески).

На самом деле я бы не назвал всю эту область "компьютерной наукой": когда я закончил (MSEE, 30 лет назад), я в основном пытался избегать "CS" в пользу чип-дизайна, системы. дизайн, продвинутые радиосистемы и т. д. - все же меня учили этому материалу (ну, подмножество, которое уже находилось в области практического инженерного использования ;-) довольно хорошо.

И, просто для того, чтобы подтвердить, что за одно поколение все не так сильно изменилось: моя дочь только что получила степень магистра в области телекоммуникаций (строго сосредоточена на продвинутых радиосистемах) - она ​​не может разработать ни одну серьезную программу , алгоритм или структура данных (хотя она отлично справлялась на обязательных курсах по C и Java, в этих курсах и в других местах учебной программы не было абсолютно никакой глубины CS - ее ежедневный рабочий язык - matlab ...! -) - тем не менее, она знает больше о теории информации и кодирования, чем я когда-либо изучал, и это до любого исследования уровня PhD (она остаётся для своей степени PhD, но это еще не началось) .

Итак, я утверждаю, что эти поля более EE-y, чем CS-y (хотя, конечно, границы всегда размыты - засвидетельствуйте тот факт, что после нескольких лет разработки чипов я оказался более или менее случайным парнем SW Как и многие мои современники; -).

4 голосов
/ 05 августа 2009

Этот вопрос является предметом теории кодирования .

3 голосов
/ 05 августа 2009

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

2 голосов
/ 13 августа 2009

Либо Турбокоды или Коды проверки на четность с низкой плотностью для общих данных, поскольку они ближе всего подходят к приближению к пределу Шеннона - см. Википедию.

2 голосов
/ 05 августа 2009
  • Существует резервная кодировка , используемая на оптических носителях , которая может восстановить потерю битов.
    • ECC также используется в жестких дисках и оперативной памяти
  • Протокол TCP может справиться с большой потерей данных при повторных передачах.
1 голос
/ 15 августа 2009

Как говорит Алекс Мартелли, в мире существует множество теорий кодирования, но коды Рида-Соломона - определенно приятное место. Если вы действительно хотите что-то построить, Джим Планк написал хорошее руководство по кодированию Рида-Соломона . Планк профессионально интересуется кодированием и обладает большим практическим опытом для его поддержки.

1 голос
/ 05 августа 2009

См. Также Протокол скользящего окна (который используется TCP).

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

1 голос
/ 05 августа 2009

Вы можете использовать коды Рида-Соломона .

0 голосов
/ 15 августа 2009

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

...