Как исправить свою ошибку алгоритм

Как исправить свою ошибку

Все совершают ошибки. Мы говорим необдуманные вещи, нарушаем обещания или выносим плохое суждение о ком-либо — и это лишь малая часть того, что может случиться в жизни и на рабочем месте. Немногие знают, как исправить собственную ошибку, даже если последствия будут крайне неприятны. Если вы не пытаетесь исправлять свои ошибки из-за неправильных поступков, ваши взаимоотношения и репутация могут серьезно пострадать. Хорошая новость в том, что признание своих ошибок и правильные выводы могут исправить ситуацию и даже сделать ее лучше.

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

1

Признайте свою роль в ситуации

Если конфликтная ситуация произошла только что, дайте себе время успокоиться. Даже если вы сразу осознали, что оскорбили человека, все равно должно пройти какое-то время.

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

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

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

2

Тщательно все продумайте

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

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

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

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

3

Начните разговор первым

  • В первую очередь признайте свою ошибку и будьте точны в датах, тщательно подбирайте слова: «Мне очень жаль что я нарушил свое обещание в прошлую пятницу».
  • Скажите о том, что понимаете, как ваши действия или слова обидели чувства этого человека. Как только захотите сказать, что это и его вина тоже, сдержитесь и следуйте своему плану: «Я поступил эгоистично и тебе пришлось остаться на работе допоздна. Я подвел тебя и понимаю, что ты чувствуешь. На твоем месте мне бы тоже было неприятно».
  • Скажите о том, насколько важен человек для вас: «Для меня важна наша дружба и я ценю то время, которое провожу с тобой».
  • Загладьте вину: «Знаю, ты просил моей помощи, а я тебе не помог. Давай я заглажу свою вину и возьму всю работу на себя».

4

Сделайте выводы из своей ошибки

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

Еще одним выводом может стать ваше решение научиться контролировать свои эмоции. Или грамотно справляться со стрессом. Задайте себе простой вопрос: «Что мне нужно сделать, чтобы такого не повторилось?». Если ответом будет «Я уверен, что не повторится», это плохой ответ, потому что не предполагает работы над собой.

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

Желаем вам удачи!

Все совершают ошибки. Мы говорим необдуманные вещи, нарушаем обещания или выносим плохое суждение о ком-либо — и это лишь малая часть того, что может случиться в жизни и на рабочем месте. Немногие знают, как исправить собственную ошибку, даже если последствия будут крайне неприятны. Если вы не пытаетесь исправлять свои ошибки из-за неправильных поступков, ваши взаимоотношения и репутация могут серьезно пострадать. Хорошая новость в том, что признание своих ошибок и правильные выводы могут исправить ситуацию и даже сделать ее лучше.

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

1

Признайте свою роль в ситуации

Если конфликтная ситуация произошла только что, дайте себе время успокоиться. Даже если вы сразу осознали, что оскорбили человека, все равно должно пройти какое-то время.

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

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

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

2

Тщательно все продумайте

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

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

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

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

3

Начните разговор первым

  • В первую очередь признайте свою ошибку и будьте точны в датах, тщательно подбирайте слова: «Мне очень жаль что я нарушил свое обещание в прошлую пятницу».
  • Скажите о том, что понимаете, как ваши действия или слова обидели чувства этого человека. Как только захотите сказать, что это и его вина тоже, сдержитесь и следуйте своему плану: «Я поступил эгоистично и тебе пришлось остаться на работе допоздна. Я подвел тебя и понимаю, что ты чувствуешь. На твоем месте мне бы тоже было неприятно».
  • Скажите о том, насколько важен человек для вас: «Для меня важна наша дружба и я ценю то время, которое провожу с тобой».
  • Загладьте вину: «Знаю, ты просил моей помощи, а я тебе не помог. Давай я заглажу свою вину и возьму всю работу на себя».

4

Сделайте выводы из своей ошибки

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

Еще одним выводом может стать ваше решение научиться контролировать свои эмоции. Или грамотно справляться со стрессом. Задайте себе простой вопрос: «Что мне нужно сделать, чтобы такого не повторилось?». Если ответом будет «Я уверен, что не повторится», это плохой ответ, потому что не предполагает работы над собой.

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

Желаем вам удачи!


Загрузить PDF


Загрузить PDF

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

  1. Изображение с названием Fix Your Mistakes Step 1

    1

    Распознайте свою ошибку. Чтобы что-то исправить, сначала нужно понять, что же вы сделали неправильно.

    • Определите ошибку. Вы что-то не то сказали? Случайно допустили ошибку в школьном или рабочем проекте? Забыли помыть ванную, как обещали?
    • Поймите, как и почему вы совершили ошибку. Вы сделали это нарочно, но позже пожалели об этом? Или же вы просто не были достаточно внимательным? Поразмышляйте над ситуацией, например: “Как же я забыл убраться в ванной? Я не хотел убираться там, хотел избежать этой работы? Я был слишком занят?”.
    • Если вы не уверены, что же сделали не так, спросите друга, члена семьи, учителя, сотрудника, начальника, чтобы этот человек помог вам узнать, в чем ошибка. Например, если кто-то зол на вас, можете спросить: “Я вижу, что ты зол на меня, можешь объяснить почему?”. Человек может ответить: “Я зол на тебя, потому что ты сказал, что уберешься в ванной, но ты этого не сделал”.
  2. Изображение с названием Fix Your Mistakes Step 2

    2

    Помните свои прошлые ошибки.[1]
    Обратите внимание на свои модели поведения и на то, какие подобные проблемы были у вас в прошлом. Было ли так, что вы и в прошлом забывали что-то сделать?

    • Запишите все паттерны и темы, которые, как вы заметили, продолжают возникать. Это поможет вам определить более крупную цель, над которой вам нужно работать (сосредоточение, определенные навыки, и так далее). Например, возможно, вы склонны забывать о тех задачах, которые не хотите выполнять, например, об уборке. Это будет признаком того, что вы уклоняетесь от задания или что вам нужно стать более организованным, чтобы не забывать выполнять определенные обязательства.
  3. Изображение с названием Fix Your Mistakes Step 3

    3

    Берите ответственность на себя. Поймите, что это ваша и только ваша ошибка. Берите на себя ответственность за собственные ошибки и не пытайтесь свалить вину на кого-то другого.[2]
    Если вы играете в поиски виноватого, то не сможете учиться на собственных промахах, так как можете продолжать совершать одни и те же ошибки снова и снова.

    • Запишите те части проблемы, которым вы посодействовали, или конкретную ошибку, которую совершили.
    • Определите, что конкретно вы могли бы сделать по-другому, чтобы получить лучший результат.

    Реклама

  1. Изображение с названием Fix Your Mistakes Step 4

    1

    Подумайте о прошлых решениях. [3]
    Один из лучших способов решить проблему или исправить ошибку – определить, как вы справлялись с подобными проблемами или ошибками в прошлом. Поразмышляйте над следующим: “В прошлом я не забывал, что мне нужно сделать, как у меня это получалось? Ах, точно, я записывал дела в календарь и заглядывал в него несколько раз в день!”.

    • Составьте список подобных совершенных вами ошибок. Определите, как вы обошлись с каждой из этих ошибок, и было ли это полезным для вас или нет. Если нет, то, вероятно, подобное решение не сработает и в этот раз.
  2. Изображение с названием Fix Your Mistakes Step 5

    2

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

    • Используйте свои навыки решения проблем, чтобы придумать возможные варианты решения текущей проблемы.
    • Составьте список плюсов и минусов для каждого возможного решения. Например, если вы определили, что одним из возможных вариантов решения вашей проблемы невымытой ванной будет “обязательно убраться в ванной завтра”, то список плюсов и минусов может выглядеть так: плюс – ванная в конечном итоге будет чистой, минусы – сегодня она будет неубранной, завтра я могу забыть об уборке (я не могу полностью гарантировать, что это будет сделано), это не поможет решить проблему того, что я забыл убраться в ванной. Основываясь на этой оценке, было бы лучше навести порядок в ванной в тот же день, а не следующий, если это возможно, и разработать план того, как в будущем не забывать убираться в этой комнате.
  3. Изображение с названием Fix Your Mistakes Step 6

    3

    Определитесь с порядком действий и выполняйте их. Чтобы решить проблему, вам нужен план. Определите наилучшее возможное решение, основываясь на прошлом и на возможных вариантах, и будьте привержены его осуществлению.[5]

    • Доводите дело до конца. Если вы пообещали исправить проблему, сделайте это. Надежность очень важна в построении доверительных отношений с людьми и формировании прочных связей.[6]
  4. Изображение с названием Fix Your Mistakes Step 7

    4

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

    • Определите другие возможные решения и запишите их от наиболее полезных до наименее полезных. Пройдитесь по списку сверху донизу. К возможным вариантам могут относиться: предложить убраться в другой комнате, искренне извиниться, спросить человека, как вы можете загладить вину, или предложить ему то, что ему нравится (еду, занятия, и так далее).
  5. Изображение с названием Fix Your Mistakes Step 8

    5

    Не допускайте ошибок в будущем. Если вы сможете успешно найти решение вашей ошибки, то вы начинаете процесс успеха в будущем избежании ошибок.[7]

    • Запишите, что, по-вашему, вы сделали неправильно. Затем запишите цель того, что вы хотите сделать в будущем. Например, если вы забыли убраться в ванной, у вас могут быть такие цели: записывать список заданий на каждый день, два раза в день проверять его, отмечать галочкой выполненные задания, наклеить на холодильник стикеры с напоминанием для наиболее приоритетных задач.

    Реклама

  1. Изображение с названием Fix Your Mistakes Step 9

    1

    Не будьте слишком строги к себе. Поймите, что все совершают ошибки, это нормально. Вы можете чувствовать себя виноватым, но необходимо принимать себя таким, какой вы есть, несмотря на свои слабости.[8]

    • Простите себя и двигайтесь дальше, вместо того чтобы зацикливаться на своей проблеме.
    • Сосредоточьтесь на том, чтобы сейчас и впредь поступать правильно.
  2. Изображение с названием Fix Your Mistakes Step 10

    2

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

  3. Изображение с названием Fix Your Mistakes Step 11

    3

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

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

    Реклама

  1. Изображение с названием Fix Your Mistakes Step 12

    1

    Будьте убедительны. Используйте навыки позитивного взаимодействия, говорите о своих мыслях и чувствах уместным образом и с уважением к собеседнику.[9]
    Когда вы утвердительны, вы признаете, что были неправы и берете на себя ответственность за собственную вину. Вы не обвиняете других в своих ошибках.

    • Не будьте пассивным: не стоит избегать разговоров о своей ошибке, прятаться, соглашаться с тем, чего хотят от вас другие, и не отстаивать себя.
    • Не проявляйте агрессии: не повышайте тон, не кричите, не унижайте людей, не проклинайте, не проявляйте насильственного поведения (не бросайтесь вещами, не распускайте руки).
    • Избегайте пассивно-агрессивного поведения. Это смешение пассивной и агрессивной форм общения, когда вы можете злиться, но не высказываете своих чувств. Поэтому вы можете сделать что-то у человека за спиной, чтобы отомстить, или устроить бойкот-молчанку. Это не лучшая форма общения, кроме того человек может не понять, о чем вы пытаетесь сообщить ему и почему вы так поступаете.
    • Посылайте положительные невербальные сообщения. Наше невербальное общение тоже посылает определенные сообщения людям вокруг нас. Улыбка, например, говорит: “Да, я должен хмуриться, но я могу быть храбрым и пройти через это”.
  2. Изображение с названием Fix Your Mistakes Step 13

    2

    Используйте навыки активного слушания. Позвольте расстроенному человеку излить свое разочарование и не торопитесь с ответом.[10]

    • Постарайтесь сосредоточиться только на том, чтобы слушать человека, вместо того чтобы думать о том, как ему ответить. Сосредоточьтесь на мыслях и чувствах человека, которого слушаете, а не на своих.
    • Сделайте краткие заявления и задайте уточняющие вопросы, например: “Я так понял, что ты был зол и расстроен из-за того, что я не убрался в ванной, правильно?”.
    • Сопереживайте. Проявите понимание и поставьте себя на место другого человека.
  3. Изображение с названием Fix Your Mistakes Step 14

    3

    Извинитесь. Иногда, когда мы делаем ошибки, мы можем причинить боль другим людям. Извинитесь перед человеком, так вы покажете, что сожалеете о совершенной ошибке, чувствуете вину за причиненный вред и хотите поступать лучше в будущем.[11]

    • Не пытайтесь найти оправдания и все объяснить. Просто признайте свой промах. Скажите: “Я признаю, что забыл убраться в ванной. Мне очень жаль ”.
    • Будьте осторожны, не обвиняйте других. Не стоит говорить что-то вроде: “Если бы ты напомнил мне, что нужно там убраться, то, может быть, я не забыл бы, и ванная была бы уже чистой”.
  4. Изображение с названием Fix Your Mistakes Step 15

    4

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

    • Постарайтесь разработать решение. Спросите человека, что вы можете для него сделать, чтобы компенсировать ошибку. Можете прямо сказать: “Могу ли я что-то для тебя сделать?”.
    • Поймите, как можно поступить по-другому в будущем. Можете спросить у человека: “Как ты думаешь, что может помочь мне избежать этой ошибки в будущем?”.
    • Скажите человеку, что вы готовы приложить свои усилия, чтобы снизить вероятность совершения этой ошибки в будущем. Можно сказать следующее: “Я не хочу, чтобы в будущем это произошло снова, поэтому я буду прилагать усилия, чтобы…”. Скажите, что конкретно вы будете делать, например: “Я обязательно составлю список домашних дел, чтобы не забыть об этом снова”.

    Реклама

Советы

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

Реклама

Предупреждения

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

Реклама

Об этой статье

Эту страницу просматривали 20 360 раз.

Была ли эта статья полезной?

Код Хэмминга. Пример работы алгоритма

Время на прочтение
4 мин

Количество просмотров 517K

Вступление.

Прежде всего стоит сказать, что такое Код Хэмминга и для чего он, собственно, нужен. На Википедии даётся следующее определение:

Коды Хэмминга — наиболее известные и, вероятно, первые из самоконтролирующихся и самокорректирующихся кодов. Построены они применительно к двоичной системе счисления.

Другими словами, это алгоритм, который позволяет закодировать какое-либо информационное сообщение определённым образом и после передачи (например по сети) определить появилась ли какая-то ошибка в этом сообщении (к примеру из-за помех) и, при возможности, восстановить это сообщение. Сегодня, я опишу самый простой алгоритм Хемминга, который может исправлять лишь одну ошибку.

Также стоит отметить, что существуют более совершенные модификации данного алгоритма, которые позволяют обнаруживать (и если возможно исправлять) большее количество ошибок.

Сразу стоит сказать, что Код Хэмминга состоит из двух частей. Первая часть кодирует исходное сообщение, вставляя в него в определённых местах контрольные биты (вычисленные особым образом). Вторая часть получает входящее сообщение и заново вычисляет контрольные биты (по тому же алгоритму, что и первая часть). Если все вновь вычисленные контрольные биты совпадают с полученными, то сообщение получено без ошибок. В противном случае, выводится сообщение об ошибке и при возможности ошибка исправляется.

Как это работает.

Для того, чтобы понять работу данного алгоритма, рассмотрим пример.

Подготовка

Допустим, у нас есть сообщение «habr», которое необходимо передать без ошибок. Для этого сначала нужно наше сообщение закодировать при помощи Кода Хэмминга. Нам необходимо представить его в бинарном виде.

На этом этапе стоит определиться с, так называемой, длиной информационного слова, то есть длиной строки из нулей и единиц, которые мы будем кодировать. Допустим, у нас длина слова будет равна 16. Таким образом, нам необходимо разделить наше исходное сообщение («habr») на блоки по 16 бит, которые мы будем потом кодировать отдельно друг от друга. Так как один символ занимает в памяти 8 бит, то в одно кодируемое слово помещается ровно два ASCII символа. Итак, мы получили две бинарные строки по 16 бит:

и

После этого процесс кодирования распараллеливается, и две части сообщения («ha» и «br») кодируются независимо друг от друга. Рассмотрим, как это делается на примере первой части.
Прежде всего, необходимо вставить контрольные биты. Они вставляются в строго определённых местах — это позиции с номерами, равными степеням двойки. В нашем случае (при длине информационного слова в 16 бит) это будут позиции 1, 2, 4, 8, 16. Соответственно, у нас получилось 5 контрольных бит (выделены красным цветом):

Было:

Стало:

Таким образом, длина всего сообщения увеличилась на 5 бит. До вычисления самих контрольных бит, мы присвоили им значение «0».

Вычисление контрольных бит.

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

Здесь знаком «X» обозначены те биты, которые контролирует контрольный бит, номер которого справа. То есть, к примеру, бит номер 12 контролируется битами с номерами 4 и 8. Ясно, что чтобы узнать какими битами контролируется бит с номером N надо просто разложить N по степеням двойки.

Но как же вычислить значение каждого контрольного бита? Делается это очень просто: берём каждый контрольный бит и смотрим сколько среди контролируемых им битов единиц, получаем некоторое целое число и, если оно чётное, то ставим ноль, в противном случае ставим единицу. Вот и всё! Можно конечно и наоборот, если число чётное, то ставим единицу, в противном случае, ставим 0. Главное, чтобы в «кодирующей» и «декодирующей» частях алгоритм был одинаков. (Мы будем применять первый вариант).
Высчитав контрольные биты для нашего информационного слова получаем следующее:

и для второй части:

Вот и всё! Первая часть алгоритма завершена.

Декодирование и исправление ошибок.

Теперь, допустим, мы получили закодированное первой частью алгоритма сообщение, но оно пришло к нас с ошибкой. К примеру мы получили такое (11-ый бит передался неправильно):

Вся вторая часть алгоритма заключается в том, что необходимо заново вычислить все контрольные биты (так же как и в первой части) и сравнить их с контрольными битами, которые мы получили. Так, посчитав контрольные биты с неправильным 11-ым битом мы получим такую картину:

Как мы видим, контрольные биты под номерами: 1, 2, 8 не совпадают с такими же контрольными битами, которые мы получили. Теперь просто сложив номера позиций неправильных контрольных бит (1 + 2 + 8 = 11) мы получаем позицию ошибочного бита. Теперь просто инвертировав его и отбросив контрольные биты, мы получим исходное сообщение в первозданном виде! Абсолютно аналогично поступаем со второй частью сообщения.

Заключение.

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

Примечание.

На написание этого топика меня подвигло то, что в поиске я не нашёл на Хабре статей на эту тему (чему я был крайне удивлён). Поэтому я решил отчасти исправить эту ситуацию и максимально подробно показать как этот алгоритм работает. Я намеренно не приводил ни одной формулы, дабы попытаться своими словами донести процесс работы алгоритма на примере.

Источники.

1. Википедия
2. Calculating the Hamming Code

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

Проблема в том, что у большинства людей «обучение на своих ошибках» происходит спонтанно и неосознанно. В результате многие совершенные ошибки ничего не добавляют в копилку их личного опыта: они воспринимаются исключительно как источник страданий, а потому очень часто повторяются снова и снова.

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

Дневник «Работа над ошибками»

Для использования этой техники вам потребуется завести специальный дневник, который будет называться «Работа над ошибками». Это может быть бумажная тетрадь, текстовый файл на компьютере или электронная таблица.

Обратите внимание на следующее:

1. Дневник должен быть по-настоящему тайным. Не показывайте его никому, даже друзьям и близким. Еще лучше, если никто вообще не будет знать о его существовании. Дело в том, что вам придется записывать в него довольно неприятные факты о себе. И если вы знаете, что эти записи кто-то будет читать, то невольно начнете все цензурировать и приукрашать, из-за чего эффективность техники упадет в разы.

Храните дневник там, где на него никто не сможет натолкнуться даже случайно. Если вы делайте записи в файл, уберите его в какую-нибудь неприметную папку и закройте паролем.

2. Работа с дневником должна быть регулярной. Лучше всего заполнять его вечером, пока свежи воспоминания, но можно это делать и по утрам (в этом случае вы будете разбирать вчерашний день). Также можно работать с дневником один раз в неделю, например, по воскресеньям. Имейте в виду: чем больший период времени вы рассматриваете, тем больше событий ускользает от вашего взора.

Дневник может быть как обычным текстом, так и таблицей — это дело вкуса.

Если вы решили работать с электронной таблицей, закрепите в ней верхнюю строку и установите в свойствах ячеек «перенос текста». Саму таблицу размечаем следующим образом:

 Разметка таблицы для "Работы над ошибками"

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

Итак, приступим. Анализ ошибок в дневнике состоит из 5 этапов:

Этап 1. Вспомнить и записать ошибки

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

Дело в том, что каждое такое событие — это всегда в какой-то степени следствие наших поступков. Если же мы воспринимаем неприятности как сугубо внешние явления, мы словно говорим себе, что не контролируем ситуацию. А поверив в это, мы становимся пассивными жертвами обстоятельств и уже ничего не можем изменить.

Безусловно, бывают такие ситуации, когда от нас действительно ничего не зависит. Но очень часто это не так.

Предположим, что сегодня на нас накричал начальник. Он хам, псих и самодур? Очень может быть. Но была ли у нас возможность предотвратить конфликт? Наверняка да. Например:

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

Если же мы снимаем с себя ответственность за эту ситуацию, мы отказываемся от активной жизненной позиции и начинаем пассивно плыть по течению.

Итак, записываем ошибки. Для этого мысленно «прокрутите» в голове весь прошедший день (или неделю) и попробуйте вспомнить следующее:

1. Какие явные промахи вы совершили?
2. Какие дела не удалось сделать? Какие планы сорвались?
3. Какие неприятности с вами произошли?
4. Из-за чего у вас портилось настроение?
5. С кем возникали конфликты и недопонимания?

Вот такой примерно список у вас может получиться:

Составляем список ошибок

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

Также полезно делать пометки в течение всего дня или недели. Формулировать сами ошибки не надо: просто запишите в блокнот или на диктофон пару слов, которые помогут вам вспомнить о событии. Например: «автобус», «продавец в магазине», «удалил файл», «забыл ключи» и т. д.

После того как вы записали все ошибки, посидите еще 2–3 минуты, прежде чем двигаться дальше. Часто в эти минуты в голову приходят всякие неприметные события, о которых мы сразу не вспомнили.

Этап 2. Выявить причины ошибок

Теперь мы должны найти причину каждой записанной ошибки. Этот этап поможет нам выявить свои «слабые места» и понять, что конкретно нужно исправить. Подумайте: почему произошло то, что произошло?

Вот что примерно должно у вас получиться:

Находим причины ошибок

При анализе причин важно придерживаться принципа «Mea culpa» (в переводе с латыни — «моя вина»). Иными словами, мы должны в первую очередь искать причину произошедшего в своих действиях. Еще раз: мы можем что-то изменить лишь тогда, когда берем на себя ответственность за то, что произошло.

Даже если у неприятного события есть явные внешние причины, подумайте: могли ли вы его предотвратить? Могли ли вы к нему как-то подготовиться? Если да, то именно это и следует записать как причину.

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

У некоторых событий может быть несколько причин — это нормально. В этом случае можно записать их все или же выбрать из них только самую главную.

Этап 3. Исправление ошибок

На этом этапе мы выясним: а нельзя ли эти ошибки хоть как-нибудь исправить? Подумайте:

  • Можно ли изменить то, что произошло?
  • Если нельзя, то можно ли минимизировать или компенсировать последствия этих ошибок?

Каждая ошибка — это всегда какой-то ущерб, нанесенный нашей жизни, нашим планам и нашему душевному равновесию. И в идеале было бы здорово этот ущерб если не ликвидировать, то хотя бы чуть-чуть «сгладить».

Вот как это может выглядеть:

Можно ли исправить ошибки?

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

Этап 4. Меры профилактики

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

Профилактика

Этот этап — «сердце» нашей техники. Каждая такое правило и каждая задача — это то, что помогает нам изменить свою жизнь к лучшему. Даже если сами изменения выглядят совсем небольшими, со временем они будут накапливаться и давать потрясающий результат.

Как разрабатывать меры профилактики? В первую очередь нужно смотреть в раздел «Причины»: именно там обычно и скрыт «корень проблем». Если мы устраняем причину ошибки, то исчезает и сама ошибка.

Например, я проспал на работу. У этой неприятности есть две причины: я поздно лег спать, а утром не услышал будильник на смартфоне. Теперь у меня появятся одно новое правило и одна регулярная задача:

  1. Ложиться спать не позднее 23–00.
  2. Устанавливать на смартфоне сразу два будильника с интервалом в 5 минут.

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

Этап 5. Внедрение улучшений

Недостаточно просто придумать правила: еще нужно сделать так, чтобы эти правила сразу же начали работать и менять жизнь к лучшему. Если не внедрять их специально, они будут мертвым грузом «пылиться» в нашем дневнике. Высока вероятность, что вскоре мы о них забудем и снова допустим уже проработанные ошибки.

Поэтому на последнем этапе нужно определить: с помощью какого инструмента мы будем внедрять эти правила? Вот как это выглядит:

Внедрение правил

Рассмотрим эти инструменты чуть более подробно.

1. Разовая задача. Это задача, которую нужно выполнить всего один раз, чтобы предотвратить дальнейшее повторение ошибки или проблемы. Например, если у нас есть проблема «тормозит компьютер», нам достаточно «купить дополнительный блок ОЗУ на 16 Гб».

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

Разовые задачи

2. Регулярная задача. Это задача, которую нам нужно периодически повторять: каждое день, каждую субботу, каждый месяц и т. д. Например, если мы по дороге с работы постоянно забываем купить продукты, нам потребуется создать регулярную задачу-напоминание «Не нужно ли зайти в магазин?».

Регулярные задачи

То же самое: создаем в органайзере новую задачу (можно привязать ее к конкретному времени) и настраиваем ее повторение. Подробнее о том, как работать с такими задачами, вы можете прочитать в нашей статье «Повторяющиеся задачи».

3. Рабочий чек-лист. Чек-листы — это очень удобный инструмент для организации любых повторяющихся процессов. Сюда относятся тренировки и занятия спортом, мероприятия по уборке, уход за питомцами, проверки, аудиты, создания типовых продуктов и т. д. Если вы регулярно пользуетесь чек-листами, вам будет легче предотвращать ошибки: допустив какой-нибудь промах, просто добавьте в чек-лист новый пункт для его профилактики.

Чек-лист

О создании рабочих чек-листов у нас была отдельная статья.

4. Трекер привычек. Некоторые правила потребуют от нас выработки новых привычек или изменения старых. Для этой цели в тайм-менеджменте используется несколько инструментов, из которых самым популярным является трекер привычек:

Трекер привычек

Работает он очень просто: каждую привычку, которую нам нужно выработать или изменить, мы добавляем в трекер и отслеживаем ее соблюдение.

5. Личный кодекс. Это еще один очень мощный инструмент саморазвития, о котором следует как-нибудь рассказать отдельно. Он представляет собой свод персональных правил и принципов на все случаи жизни: от общения с людьми, до ухода за домом.

Для создания кодекса можно использовать блокнот, общую тетрадь или текстовый файл.

Личный кодекс

Отрывок из личного кодекса

В кодексе может быть несколько разделов. Например:

  • Главные правила;
  • Мои моральные принципы;
  • Общение с людьми;
  • Бизнес;
  • Клиенты;
  • Здоровье;
  • Автомобиль и т. п.

Чтобы кодекс работал, его нужно регулярно и вдумчиво перечитывать. В этом случае правила будут «впитываться» и становиться неотъемлемой частью нашей личности.

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

Заключение

Алгоритм только на первый взгляд кажется большим и громоздким, но на практике он не отнимает много времени. Обычно «работа над ошибками» занимает не более 10–15 минут в день.

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

Наиболее частая проблема с дневником — это повторение ошибок. То есть, мы анализируем ошибку, внедряем профилактические меры, а она все равно повторяется. Здесь есть два варианта:

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

Лайфхак. У ошибки может быть много причин. Но есть и одна универсальная причина: мы совершаем ошибку потому, что у нас есть возможность ее совершать. И чтобы ошибка исчезла, достаточно устранить эту возможность.

Например, мы отвлекаемся на социальные сети во время работы. Как сделать, чтобы это стало невозможным? Тут много вариантов: выйти из всех аккаунтов, использовать другой профиль браузера или даже отключать интернет.

Вариант 2. Неправильно выбраны меры профилактики или способы их внедрения. Здесь, к сожалению, нет универсальных решений: вам придется немного поэкспериментировать.

Лайфхак. Лучше всего работают простые «механические» методы, которые не требуют размышлений и самоконтроля.

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

Еще одна частая ситуация с дневником — это отсутствие серьезных поводов для записи. В этом случае, если есть настроение, можно совершить «экскурсию в прошлое» и поразмышлять над старыми ошибками. Однако вполне допустимо просто наградить себя «выходным» за удачный день.

Поделиться:

Методы, обеспечивающие надежную доставку цифровых данных по ненадежным каналам связи Устранение ошибок передачи, вызванных атмосферой Земли ( слева), ученые Годдарда применили исправление ошибок Рида – Соломона (справа), которое обычно используется в компакт-дисках и DVD. Типичные ошибки включают отсутствие пикселей (белые) и ложные сигналы (черные). Белая полоса указывает на короткий период, когда передача была приостановлена.

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

Содержание

  • 1 Определения
  • 2 История
  • 3 Введение
  • 4 Типы исправления ошибок
    • 4.1 Автоматический повторный запрос (ARQ)
    • 4.2 Прямое исправление ошибок
    • 4.3 Гибридные схемы
  • 5 Схемы обнаружения ошибок
    • 5.1 Кодирование на минимальном расстоянии
    • 5.2 Коды повторения
    • 5.3 Бит четности
    • 5.4 Контрольная сумма
    • 5.5 Циклическая проверка избыточности
    • 5.6 Криптографическая хеш-функция
    • 5.7 Ошибка код исправления
  • 6 Приложения
    • 6.1 Интернет
    • 6.2 Связь в дальнем космосе
    • 6.3 Спутниковое вещание
    • 6.4 Хранение данных
    • 6.5 Память с исправлением ошибок
  • 7 См. также
  • 8 Ссылки
  • 9 Дополнительная литература
  • 10 Внешние ссылки

Определения

Обнаружение ошибок — это обнаружение ошибок, вызванных шумом или другими помехами во время передачи от передатчика к приемнику. Исправление ошибок — это обнаружение ошибок и восстановление исходных безошибочных данных.

История

Современная разработка кодов исправления ошибок приписывается Ричарду Хэммингу в 1947 году. Описание кода Хэмминга появилось в Математической теории коммуникации Клода Шеннона и было быстро обобщено Марселем Дж. Э. Голэем.

Введение

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

Хорошие характеристики контроля ошибок требуют, чтобы схема была выбрана на основе характеристик канала связи. Распространенные модели каналов включают в себя модели без памяти, в которых ошибки возникают случайно и с определенной вероятностью, и динамические модели, в которых ошибки возникают в основном в пакетах . Следовательно, коды обнаружения и исправления ошибок можно в целом различать между обнаружением / исправлением случайных ошибок и обнаружением / исправлением пакетов ошибок. Некоторые коды также могут подходить для сочетания случайных ошибок и пакетных ошибок.

Если характеристики канала не могут быть определены или сильно изменяются, схема обнаружения ошибок может быть объединена с системой для повторных передач ошибочных данных. Это известно как автоматический запрос на повторение (ARQ) и наиболее широко используется в Интернете. Альтернативный подход для контроля ошибок — это гибридный автоматический запрос на повторение (HARQ), который представляет собой комбинацию ARQ и кодирования с исправлением ошибок.

Типы исправления ошибок

Существует три основных типа исправления ошибок.

Автоматический повторный запрос (ARQ)

Автоматический повторный запрос (ARQ) — это метод контроля ошибок для передачи данных, который использует коды обнаружения ошибок, сообщения подтверждения и / или отрицательного подтверждения и тайм-ауты для обеспечения надежной передачи данных. Подтверждение — это сообщение, отправленное получателем, чтобы указать, что он правильно получил кадр данных.

Обычно, когда передатчик не получает подтверждения до истечения тайм-аута (т. Е. В течение разумного периода времени после отправки фрейм данных), он повторно передает фрейм до тех пор, пока он либо не будет правильно принят, либо пока ошибка не останется сверх заранее определенного количества повторных передач.

Три типа протоколов ARQ: Stop-and-wait ARQ, Go-Back-N ARQ и Selective Repeat ARQ.

ARQ is подходит, если канал связи имеет переменную или неизвестную пропускную способность, например, в случае с Интернетом. Однако ARQ требует наличия обратного канала, что приводит к возможному увеличению задержки из-за повторных передач и требует обслуживания буферов и таймеров для повторных передач, что в случае перегрузка сети может вызвать нагрузку на сервер и общую пропускную способность сети.

Например, ARQ используется на коротковолновых радиоканалах в форме ARQ-E, или в сочетании с мультиплексированием как ARQ-M.

Прямое исправление ошибок

Прямое исправление ошибок (FEC) — это процесс добавления избыточных данных, таких как исправление ошибок code (ECC) в сообщение, чтобы оно могло быть восстановлено получателем, даже если в процессе передачи или при хранении был внесен ряд ошибок (в зависимости от возможностей используемого кода). Так как получатель не должен запрашивать у отправителя повторную передачу данных, обратный канал не требуется при прямом исправлении ошибок, и поэтому он подходит для симплексной связи, например вещание. Коды с исправлением ошибок часто используются в нижнем уровне связи, а также для надежного хранения на таких носителях, как CD, DVD, жесткие диски и RAM.

Коды с исправлением ошибок обычно различают между сверточными кодами и блочными кодами. :

  • Сверточные коды обрабатываются побитно. Они особенно подходят для аппаратной реализации, а декодер Витерби обеспечивает оптимальное декодирование.
  • Блочные коды обрабатываются на поблочной основе. Ранними примерами блочных кодов являются коды повторения, коды Хэмминга и многомерные коды контроля четности. За ними последовал ряд эффективных кодов, из которых коды Рида – Соломона являются наиболее известными из-за их широкого распространения в настоящее время. Турбокоды и коды с низкой плотностью проверки четности (LDPC) — это относительно новые конструкции, которые могут обеспечить почти оптимальную эффективность.

Теорема Шеннона — важная теорема при прямом исправлении ошибок и описывает максимальную информационную скорость, на которой возможна надежная связь по каналу, имеющему определенную вероятность ошибки или отношение сигнал / шум (SNR). Этот строгий верхний предел выражается в единицах пропускной способности канала . Более конкретно, в теореме говорится, что существуют такие коды, что с увеличением длины кодирования вероятность ошибки на дискретном канале без памяти может быть сделана сколь угодно малой при условии, что кодовая скорость меньше чем емкость канала. Кодовая скорость определяется как доля k / n из k исходных символов и n кодированных символов.

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

Гибридные схемы

Гибридный ARQ — это комбинация ARQ и прямого исправления ошибок. Существует два основных подхода:

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

Последний подход особенно привлекателен для канала стирания при использовании код бесскоростного стирания.

.

Схемы обнаружения ошибок

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

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

Кодирование с минимальным расстоянием

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

Коды повторения

A код повторения — это схема кодирования, которая повторяет биты по каналу для достижения безошибочной связи. Учитывая поток данных, которые необходимо передать, данные делятся на блоки битов. Каждый блок передается определенное количество раз. Например, чтобы отправить битовую комбинацию «1011», четырехбитовый блок можно повторить три раза, таким образом получая «1011 1011 1011». Если этот двенадцатибитовый шаблон был получен как «1010 1011 1011» — где первый блок не похож на два других, — произошла ошибка.

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

Бит четности

Бит четности — это бит, который добавляется к группе исходные биты, чтобы гарантировать, что количество установленных битов (т. е. битов со значением 1) в результате будет четным или нечетным. Это очень простая схема, которую можно использовать для обнаружения одного или любого другого нечетного числа (т. Е. Трех, пяти и т. Д.) Ошибок в выводе. Четное количество перевернутых битов сделает бит четности правильным, даже если данные ошибочны.

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

Контрольная сумма

Контрольная сумма сообщения — это модульная арифметическая сумма кодовых слов сообщения фиксированной длины слова (например, байтовых значений). Сумма может быть инвертирована посредством операции дополнения до единиц перед передачей для обнаружения непреднамеренных сообщений с нулевым значением.

Схемы контрольных сумм включают биты четности, контрольные цифры и проверки продольным избыточным кодом. Некоторые схемы контрольных сумм, такие как алгоритм Дамма, алгоритм Луна и алгоритм Верхоффа, специально разработаны для обнаружения ошибок, обычно вносимых людьми при записи или запоминание идентификационных номеров.

Проверка циклическим избыточным кодом

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

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

. Бит четности может рассматриваться как 1-битный частный случай. CRC.

Криптографическая хеш-функция

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

Код исправления ошибок

Для обнаружения ошибок можно использовать любой код исправления ошибок. Код с минимальным расстоянием Хэмминга, d, может обнаруживать до d — 1 ошибок в кодовом слове. Использование кодов с коррекцией ошибок на основе минимального расстояния для обнаружения ошибок может быть подходящим, если требуется строгое ограничение на минимальное количество обнаруживаемых ошибок.

Коды с минимальным расстоянием Хэмминга d = 2 являются вырожденными случаями кодов с исправлением ошибок и могут использоваться для обнаружения одиночных ошибок. Бит четности является примером кода обнаружения одиночной ошибки.

Приложения

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

Приложения, в которых передатчик сразу же забывает информацию, как только она отправляется (например, большинство телекамер), не могут использовать ARQ; они должны использовать FEC, потому что при возникновении ошибки исходные данные больше не доступны.

Приложения, использующие ARQ, должны иметь канал возврата ; приложения, не имеющие обратного канала, не могут использовать ARQ.

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

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

Интернет

В типичном стеке TCP / IP ошибка управление осуществляется на нескольких уровнях:

  • Каждый кадр Ethernet использует CRC-32 обнаружение ошибок. Фреймы с обнаруженными ошибками отбрасываются оборудованием приемника.
  • Заголовок IPv4 содержит контрольную сумму , защищающую содержимое заголовка. Пакеты с неверными контрольными суммами отбрасываются в сети или на приемнике.
  • Контрольная сумма не указана в заголовке IPv6, чтобы минимизировать затраты на обработку в сетевой маршрутизации и поскольку предполагается, что текущая технология канального уровня обеспечивает достаточное обнаружение ошибок (см. также RFC 3819 ).
  • UDP, имеет дополнительную контрольную сумму, покрывающую полезную нагрузку и информацию об адресации в заголовки UDP и IP. Пакеты с неверными контрольными суммами отбрасываются сетевым стеком . Контрольная сумма не является обязательной для IPv4 и требуется для IPv6. Если не указано, предполагается, что уровень канала передачи данных обеспечивает желаемый уровень защиты от ошибок.
  • TCP обеспечивает контрольную сумму для защиты полезной нагрузки и адресной информации в заголовках TCP и IP. Пакеты с неверными контрольными суммами отбрасываются сетевым стеком и в конечном итоге повторно передаются с использованием ARQ либо явно (например, как через тройное подтверждение ) или неявно из-за тайм-аута .

Телекоммуникации в дальнем космосе

Разработка кодов исправления ошибок была тесно связана с историей полетов в дальний космос из-за сильного ослабления мощности сигнала на межпланетных расстояниях и ограниченной мощности на борту космических зондов. В то время как ранние миссии отправляли свои данные в незашифрованном виде, начиная с 1968 года, цифровая коррекция ошибок была реализована в форме (субоптимально декодированных) сверточных кодов и кодов Рида – Маллера. Код Рида-Мюллера хорошо подходил к шуму, которому подвергался космический корабль (примерно соответствуя кривой ), и был реализован для космического корабля Mariner и использовался в миссиях между 1969 и 1977 годами.

Миссии «Вояджер-1 » и «Вояджер-2 «, начатые в 1977 году, были разработаны для доставки цветных изображений и научной информации с Юпитера и Сатурна. Это привело к повышенным требованиям к кодированию, и, таким образом, космический аппарат поддерживался (оптимально Витерби-декодированный ) сверточными кодами, которые могли быть сцеплены с внешним Голеем (24,12, 8) код. Корабль «Вояджер-2» дополнительно поддерживал реализацию кода Рида-Соломона. Конкатенированный код Рида – Соломона – Витерби (RSV) позволил произвести очень мощную коррекцию ошибок и позволил космическому кораблю совершить длительное путешествие к Урану и Нептуну. После модернизации системы ECC в 1989 году оба корабля использовали кодирование V2 RSV.

Консультативный комитет по космическим информационным системам в настоящее время рекомендует использовать коды исправления ошибок, как минимум, аналогичные RSV-коду Voyager 2. Составные коды все больше теряют популярность в космических миссиях и заменяются более мощными кодами, такими как Турбо-коды или LDPC-коды.

Различные виды выполняемых космических и орбитальных миссий. предполагают, что попытки найти универсальную систему исправления ошибок будут постоянной проблемой. Для полетов вблизи Земли характер шума в канале связи отличается от того, который испытывает космический корабль в межпланетной миссии. Кроме того, по мере того как космический корабль удаляется от Земли, проблема коррекции шума становится все более сложной.

Спутниковое вещание

Спрос на пропускную способность спутникового транспондера продолжает расти, чему способствует желание предоставлять телевидение (включая новые каналы и телевидение высокой четкости ) и данные IP. Доступность транспондеров и ограничения полосы пропускания ограничили этот рост. Емкость транспондера определяется выбранной схемой модуляции и долей мощности, потребляемой FEC.

Хранение данных

Коды обнаружения и исправления ошибок часто используются для повышения надежности носителей данных. «Дорожка четности» присутствовала на первом устройстве хранения данных на магнитной ленте в 1951 году. «Оптимальный прямоугольный код», используемый в записи с групповым кодированием, не только обнаруживает, но и корректирует однобитовые записи. ошибки. Некоторые форматы файлов, особенно архивные форматы, включают контрольную сумму (чаще всего CRC32 ) для обнаружения повреждений и усечения и могут использовать избыточность и / или четность files для восстановления поврежденных данных. Коды Рида-Соломона используются в компакт-дисках для исправления ошибок, вызванных царапинами.

Современные жесткие диски используют коды CRC для обнаружения и коды Рида – Соломона для исправления незначительных ошибок при чтении секторов, а также для восстановления данных из секторов, которые «испортились», и сохранения этих данных в резервных секторах. Системы RAID используют различные методы исправления ошибок для исправления ошибок, когда жесткий диск полностью выходит из строя. Файловые системы, такие как ZFS или Btrfs, а также некоторые реализации RAID, поддерживают очистку данных и восстановление обновлений, что позволяет удалять поврежденные блоки. обнаружены и (надеюсь) восстановлены, прежде чем они будут использованы. Восстановленные данные могут быть перезаписаны точно в том же физическом месте, чтобы освободить блоки в другом месте на том же оборудовании, или данные могут быть перезаписаны на заменяющее оборудование.

Память с исправлением ошибок

Память DRAM может обеспечить более надежную защиту от программных ошибок, полагаясь на коды исправления ошибок. Такая память с исправлением ошибок, известная как память с защитой ECC или EDAC, особенно желательна для критически важных приложений, таких как научные вычисления, финансы, медицина и т. Д., А также для приложений дальнего космоса из-за повышенное излучение в космосе.

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

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

Помимо оборудования, обеспечивающего функции, необходимые для работы памяти ECC, операционные системы обычно содержат соответствующие средства отчетности, которые используются для предоставления уведомлений при прозрачном восстановлении программных ошибок. Увеличение количества программных ошибок может указывать на то, что модуль DIMM нуждается в замене, и такая обратная связь не была бы легко доступна без соответствующих возможностей отчетности. Одним из примеров является подсистема EDAC ядра Linux (ранее известная как Bluesmoke), которая собирает данные из компонентов компьютерной системы, поддерживающих проверку ошибок; Помимо сбора и отправки отчетов о событиях, связанных с памятью ECC, он также поддерживает другие ошибки контрольного суммирования, в том числе обнаруженные на шине PCI.

Некоторые системы также поддерживают очистку памяти.

См. также

Ссылки

Дополнительная литература

  • Шу Линь; Дэниел Дж. Костелло младший (1983). Кодирование с контролем ошибок: основы и приложения. Прентис Холл. ISBN 0-13-283796-X.

Внешние ссылки

Понравилась статья? Поделить с друзьями:
  • Как исправить свои ошибки рассказ
  • Как исправить свои ошибки перед человеком
  • Как исправить свои ошибки перед своим детям
  • Как исправить свои ошибки перед парнем
  • Как исправить свои ошибки перед мужем