В телекоммуникациях код Бергера представляет собой однонаправленный код обнаружения ошибок, названный в честь его изобретателя, Дж. М. Бергера. Коды Бергера могут обнаруживать все однонаправленные ошибки. Однонаправленные ошибки - это ошибки, которые переводят только единицы в нули или только нули в единицы, например, в асимметричных каналах. Контрольные биты кодов Бергера вычисляются путем подсчета всех нулей в информационном слове и выражения этого числа в натуральном двоичном формате. Если информационное слово состоит из бит, то для кода Бергера требуется «проверочные биты», дающие код Бергера длины k + n. (Другими словами, проверочных битов достаточно для проверки информационные биты). Коды Бергера могут обнаруживать любое количество ошибок преобразования битов «один к нулю» до тех пор, пока в одном и том же кодовом слове не возникнет ошибок преобразования нуля в один. Точно так же коды Бергера могут обнаруживать любое количество ошибок переворота битов от нуля до единицы при условии, что в том же кодовом слове не возникает ошибок переворота один к нулю. Коды Бергера не могут исправить ни одной ошибки.
Как и все однонаправленные коды обнаружения ошибок, коды Бергера также могут использоваться в нечувствительных к задержке схемах.
Как указано выше, коды Бергера обнаруживают любое количество однонаправленных ошибок. Для данного кодового слова, если единственные ошибки, которые произошли, заключаются в том, что некоторые (или все) биты со значением 1 изменились на значение 0, то это преобразование будет обнаружено реализацией кода Бергера. Чтобы понять почему, рассмотрим три таких случая:
Для случая 1 количество 0-значных битов в информационной части будет по определению ошибки увеличиваются. Следовательно, наш проверочный код Бергера будет ниже фактического 0-битного счетчика данных, и поэтому проверка не удастся.
Для случая 2 количество 0-значных битов в разделе информации осталось прежним, но значение контрольных данных изменилось. Поскольку мы знаем, что некоторые единицы превратились в нули, но никакие нули не превратились в единицы (именно так мы определили модель ошибки в этом случае), закодированное двоичное значение контрольных данных будет уменьшаться (например, с двоичного 1011 на 1010 или на 1001 или 0011). Поскольку информационные данные остались прежними, они имеют то же количество нулей, что и раньше, и это больше не будет соответствовать измененному контрольному значению.
Для случая 3, когда биты изменились как в разделе информации, так и в разделе проверки, обратите внимание, что количество нулей в разделе информации увеличилось, как описано для случая 1, и двоичное значение, сохраненное в контрольная часть снизилась, как описано для случая 2. Следовательно, нет шансов, что они в конечном итоге изменятся таким образом, чтобы стать другим допустимым кодовым словом.
Подобный анализ может быть выполнен, и он совершенно верен в случае, когда возникают единственные ошибки, когда некоторые 0-значные биты меняются на 1. Следовательно, если все ошибки, возникающие в конкретном кодовом слове все происходят в одном направлении, эти ошибки будут обнаружены. Для следующего передаваемого кодового слова (например) ошибки могут идти в противоположном направлении, и они все равно будут обнаруживаться, пока все они идут в одном направлении друг с другом.
В определенных ситуациях часто встречаются однонаправленные ошибки. Например, в флэш-памяти биты легче запрограммировать на 0, чем на 1.