Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Коды для восстановления ошибок
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Страницы: 1, 2, 3
777777
Телеметрия для передачи данных такова, что ошибочные слова в 99% случаев отличаются от истинных на +-1. Отклонение на большее число крайне редко и такие случаи можно не восстанавливать, а лишь сообщать об ошибке.

Какой алгоритм лучше применить для такого случая?
Serg76
Цитата(777777 @ Nov 6 2011, 12:43) *
Телеметрия для передачи данных такова, что ошибочные слова в 99% случаев отличаются от истинных на +-1. Отклонение на большее число крайне редко и такие случаи можно не восстанавливать, а лишь сообщать об ошибке.

Какой алгоритм лучше применить для такого случая?

Расширенный Хемминга или, если понадобится по-мощнее, можно глянуть БЧХ.
777777
Цитата(Serg76 @ Nov 6 2011, 13:04) *
Расширенный Хемминга или, если понадобится по-мощнее, можно глянуть БЧХ.

Но они не используют тот факт, что ошибочное слово может отличаться от правильного на +-1. Может в этом случае можно использовать меньше проверочных слов?
Serg76
Цитата(777777 @ Nov 7 2011, 12:40) *
Но они не используют тот факт, что ошибочное слово может отличаться от правильного на +-1

Это как? Коды Хемминга исправляют однократную ошибку, а БЧХ и подавно.
777777
Цитата(Serg76 @ Nov 7 2011, 15:44) *
Это как? Коды Хемминга исправляют однократную ошибку, а БЧХ и подавно.

Да, но исправляется всё слово как бы сильно оно ни испортилось. Даже если все 0 превратятся во все 1. У меня же обычно если происходит ошибка, то это выражается в том, что число становится на 1 больше или меньше. То есть 1000 может превратиться в 0111, но в 0000 - практически исключено. Может есть коды, которые пользуются этим свойством?
SKov
Цитата(777777 @ Nov 7 2011, 16:15) *
Да, но исправляется всё слово как бы сильно оно ни испортилось. Даже если все 0 превратятся во все 1. У меня же обычно если происходит ошибка, то это выражается в том, что число становится на 1 больше или меньше. То есть 1000 может превратиться в 0111, но в 0000 - практически исключено. Может есть коды, которые пользуются этим свойством?

Есть специальные коды для исправления такого рода ошибок.
Называются арифметические коды. Искать в гугле.
i-mir
Интерес вызывает именно Ваш канал передачи данных.
Каким образом он может выполнить операцию "1000 -> 0111" ?
Т.е. ваш канал связи обладает своего рода интеллектом ?
Я у себя доказываю безопасность каналов связи постулируя отсутствие
"интеллекта" и невозможности внесения структурированных изменений ...

Возможно причина ошибок в чем-то другом?
777777
Цитата(i-mir @ Nov 7 2011, 19:31) *
Интерес вызывает именно Ваш канал передачи данных.
Каким образом он может выполнить операцию "1000 -> 0111" ?
Т.е. ваш канал связи обладает своего рода интеллектом ?

При чем тут интеллект? Код передается как амплитуда одного периода синусоиды. имеется 16 градаций амплитуды и таким образом один период кодирует 4 бита. Но вследствие помех в канале измерение иногда дает результат, отличающийся на единицу.
des00
Цитата(777777 @ Nov 7 2011, 07:15) *
Да, но исправляется всё слово как бы сильно оно ни испортилось. Даже если все 0 превратятся во все 1. У меня же обычно если происходит ошибка, то это выражается в том, что число становится на 1 больше или меньше. То есть 1000 может превратиться в 0111, но в 0000 - практически исключено. Может есть коды, которые пользуются этим свойством?

При чем тут интеллект? Код передается как амплитуда одного периода синусоиды. имеется 16 градаций амплитуды и таким образом один период кодирует 4 бита. Но вследствие помех в канале измерение иногда дает результат, отличающийся на единицу.

код грея даст вам расстояние до соседа +-1 а код хеминга требуемую вами защиту.
GetSmart
Цитата(des00 @ Nov 7 2011, 21:54) *
код грея даст вам расстояние до соседа +-1 а код хеминга требуемую вами защиту.

Я так понимаю, что здесь не цифровой формат данных, а псевдо-аналоговый. И видимо, кроме всего прочего, коды, исправляющие ошибки, нужно будет передавать в этом же аналоговом формате. Ну и они тоже могут исказиться.
des00
Цитата(GetSmart @ Nov 7 2011, 11:05) *
Я так понимаю, что здесь не цифровой формат данных, а псевдо-аналоговый. И видимо, кроме всего прочего, коды, исправляющие ошибки, нужно будет передавать в этом же аналоговом формате. Ну и они тоже могут исказиться.

автор молчит сильно, я предположил что у него есть какая то схема принятия решений (АЦП/компартор и т.д.), поэтому предложил ему грея, т.к. это даст максимальную ошибку в 1 бит. ну а дальше нужно оценить что будетм защищать : символ или пакет %)
paskal
Цитата(777777 @ Nov 7 2011, 15:15) *
Да, но исправляется всё слово как бы сильно оно ни испортилось. Даже если все 0 превратятся во все 1. У меня же обычно если происходит ошибка, то это выражается в том, что число становится на 1 больше или меньше. То есть 1000 может превратиться в 0111, но в 0000 - практически исключено. Может есть коды, которые пользуются этим свойством?

Вот как так происходит, что при прохождении через цифровой канал число 1000 может превратится в 0111, но не может в 0000? Не бывает такого. Поэтому и коды исправляют всё. Сдается мне, что вы на самом деле вы говорите не об ошибках, а о шумах. И задачу надо ставить как то по другому - искать не код исправления ошибок, а какой то фильтр например.
Serg76
Цитата(777777 @ Nov 7 2011, 16:15) *
Да, но исправляется всё слово как бы сильно оно ни испортилось. Даже если все 0 превратятся во все 1. У меня же обычно если происходит ошибка, то это выражается в том, что число становится на 1 больше или меньше. То есть 1000 может превратиться в 0111, но в 0000 - практически исключено. Может есть коды, которые пользуются этим свойством?

Так у вас действительно последовательный код. Примените Грея для начала как советовал des00 + Хемминг для исправления однократной ошибки
i-mir
Цитата(777777 @ Nov 7 2011, 19:04) *
При чем тут интеллект? Код передается как амплитуда одного периода синусоиды. имеется 16 градаций амплитуды и таким образом один период кодирует 4 бита. Но вследствие помех в канале измерение иногда дает результат, отличающийся на единицу.


Так отож. И при чем здесь кодирование? У вас проблемы с измерениями а не в канале связи.
Вы принципиально решаете не ту задачу. Лучше решить вопросы с 4-х битным АЦП.
А самый младший бит будет гулять - тут уж закон природы АЦП. Нужно 5 разрядов.
GetSmart
Цитата(i-mir @ Nov 8 2011, 00:03) *
Так отож. И при чем здесь кодирование? У вас проблемы с измерениями а не в канале связи.

Там же ясно написано, что проблема с помехами (шумом?) в канале. Если они на уровне 4-ого бита, то хоть 20 битный АЦП ставь, пользы не будет.
i-mir
Цитата(GetSmart @ Nov 7 2011, 22:19) *
Там же ясно написано, что проблема с помехами (шумом?) в канале. Если они на уровне 4-ого бита, то хоть 20 битный АЦП ставь, пользы не будет.

Вопрос относительно "там" это где ?
GetSmart
Цитата(i-mir @ Nov 8 2011, 00:23) *
Вопрос относительно "там" это где ?

Чукча не читатель sm.gif
Цитата(777777 @ Nov 7 2011 @ 19:04)
Но вследствие помех в канале измерение иногда дает результат, отличающийся на единицу.

Очень предположительно, канал аналоговый. Или полуаналоговый. И ошибки аналоговые (+-1).
Вообще, подробности ТС зажал. Возможно подошли бы и другие методы повышения помехоустойчивости в аналоговом канале.
ViKo
Про код Грэя не понял. В канале ж не передаются монотонные последовательности. Самые разные коды могут идти друг за другом. И кодировать разные состояния кодом Грэя не даст ничего.
А если не все коды используются (например, для 8-битовых, используются только 64), то можно, наоборот, увеличить кодовое расстояние, а не сводить его к 1.
des00
Цитата(ViKo @ Nov 8 2011, 01:25) *
Про код Грэя не понял. В канале ж не передаются монотонные последовательности. Самые разные коды могут идти друг за другом. И кодировать разные состояния кодом Грэя не даст ничего.

как не даст то ? в сабжевом примере, код из канала 1000, описывает 3 кода 0111/1000/1001 (4/0/1 битовая ошибка). в случае использования кода грея прием из канала 1000, даст 3 кода 0000/1000/1001 (всегда одна битовая ошибка или ошибок нет). и не важно что код немонотонный.
Serg76
Цитата(ViKo @ Nov 8 2011, 10:25) *
Про код Грэя не понял. В канале ж не передаются монотонные последовательности. Самые разные коды могут идти друг за другом. И кодировать разные состояния кодом Грэя не даст ничего.
А если не все коды используются (например, для 8-битовых, используются только 64), то можно, наоборот, увеличить кодовое расстояние, а не сводить его к 1.

Конечно же даст. Основное правило построения кода Грея и заключается в том, что ошибка в декодировании соседнего символа приведет, как правило, к одиночной ошибке в битовой комбинации. Код Грея и отличается своей уникальностью, что не надо вводить дополнительно никакой избыточности.
ViKo
То, что описал ТС - это не ошибка в канале передачи, а ошибка измерения его телеметрии. Я так думаю. И кодируй их в чем попало, от этого ошибка не пропадет.
Цитата
ошибка в декодировании соседнего символа

Что есть "соседний" символ, если передается некий результат измерений? Сейчас 1000, в следующий момент 1010, 1100... Или в коде Грэя - какие-нибудь 1000, 1011, 0001... Совершенно не зависящие от слова к слову последовательности.

Если в канале часто случаются одиночные ошибки, эти ошибки могут появиться в любом бите слова (не обязательно в младшем, как написал ТС +-1). Они с равной вероятностью могут появиться в словах, закодированных в двоичном коде, или в коде Грэя.
Есть коды, обнаруживающие такие одиночные ошибки. Есть коды, исправляющие.
des00
Цитата(ViKo @ Nov 8 2011, 03:03) *
Или в коде Грэя - какие-нибудь 1000, 1011, 0001... Совершенно не зависящие от слова к слову последовательности.

Код
#  0 0000
#  1 0001
#  2 0011
#  3 0010
#  4 0110
#  5 0111
#  6 0101
#  7 0100
#  8 1100
#  9 1101
# 10 1111
# 11 1110
# 12 1010
# 13 1011
# 14 1001
# 15 1000


Цитата
Если в канале часто случаются одиночные ошибки, эти ошибки могут появиться в любом бите слова (не обязательно в младшем, как написал ТС +-1). Они с равной вероятностью могут появиться в словах, закодированных в двоичном коде, или в коде Грэя.

читали тему не винимательно, автор пришет источник этих ошибок, метод формирования и приема сигнала.
ViKo
Цитата(des00 @ Nov 8 2011, 10:11) *
читали тему не винимательно, автор пришет источник этих ошибок, метод формирования и приема сигнала.

Если сигнал действительно практически неизменный (к примеру 1000), а из-за ошибки измерения может измениться (0111, 1001), то, наверное, оба эти значения для автора считаются неправильными. Ему нужно их "исправить"? Так просто найти разность между текущим значением и предыдущим (или усредненным). Вот и получится разница в 1. Дальше делайте, что хотите - отбрасывайте или используйте.

Могут ли такие ошибки (0111, 1001) с равной вероятностью появиться в самом канале связи? Сомнительно.
Если передавать в коде Грэя, эти ошибки измерения будут отличаться на один бит, согласен. Но это никак не уменьшает саму ошибку, не приближает к "истинному" значению. И не позволяет ее исправить.
Serg76
Цитата(ViKo @ Nov 8 2011, 11:03) *
То, что описал ТС - это не ошибка в канале передачи, а ошибка измерения его телеметрии. Я так думаю. И кодируй их в чем попало, от этого ошибка не пропадет.

Что есть "соседний" символ, если передается некий результат измерений? Сейчас 1000, в следующий момент 1010, 1100... Или в коде Грэя - какие-нибудь 1000, 1011, 0001... Совершенно не зависящие от слова к слову последовательности.

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

Сначала декодер демодулятора примет решение по переданным символам и при малом уровне шума в канале по максимальному правдоподобию с большой долей вероятности исказится ближайший к переданному символ. При этом неважно как кодировался сигнал - по амплитуде, частоте или фазе. Так вот в случае использования Грея эта ошибка в соседнем символе приведет уже к одиночной, а не групповой битовой ошибке, точно так как на рисунке des00. С одиночной ошибкой затем бороться проще.
777777
Цитата(i-mir @ Nov 7 2011, 23:03) *
Так отож. И при чем здесь кодирование? У вас проблемы с измерениями а не в канале связи.
Вы принципиально решаете не ту задачу. Лучше решить вопросы с 4-х битным АЦП.
А самый младший бит будет гулять - тут уж закон природы АЦП. Нужно 5 разрядов.

Не пытайтесь понять меня неправильно ©. Телеметрию канала я описал в сообщении #8. Амплитуда несущей синусоиды измеряется 14-разрдным АЦП с периодом 0.96 мкс, но в канале есть шумы, которые тоже измеряются в результате чего возникает ошибка.

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

Цитата(GetSmart @ Nov 7 2011, 23:26) *
Очень предположительно, канал аналоговый. Или полуаналоговый. И ошибки аналоговые (+-1).
Вообще, подробности ТС зажал.

Это не предположительно, это так и есть, написано об этом в сообщении #8
Цитата(GetSmart @ Nov 7 2011, 23:26) *
Возможно подошли бы и другие методы повышения помехоустойчивости в аналоговом канале.

Все резервы повышения на аналоговом уровне исчерпаны. Сигнал оцифровывается 16 раз за 15.84 мкс и из суммы квадратов извлекается квадратный корень. От количества отсчетов точность зависит очень сильно, но больше 16 я измерить уже не могу, имеющаяся аппаратура не позволяет. Поэтому остаются чисто математические методы.
ViKo
Цитата(777777 @ Nov 8 2011, 11:12) *
Сигнал оцифровывается 16 раз за 15.84 мкс и из суммы квадратов извлекается квадратный корень.

А почему складываете квадраты, а не просто числа?
А результат измерения всегда будет скакать на 1, никакими способами от этого не избавиться, можно только сделать реже или чаще.
P.S. а про Грэя так и остался в непонятках. sad.gif
Тоже считаю, что проблема не в связи, а в измерении.

P.P.S. Добавьте бит четности, будете обнаруживать одиночную ошибку. И отбрасывать такой код.
des00
Цитата(777777 @ Nov 8 2011, 04:12) *
Идея с переводом данных в код Грея + Хемминг конечно интересна, но сам код Хемминга требует большой избыточночти, с таким же успехом можно уменьшить число градаций амплитуды вдвое. Но обидно, что ошибка случаеся редко, одна на несколько десятков слов, а из-за этого не хочется уменьшать скорость в разы. Тогда уж лучше воспользоваться Ридом-Соломоном, для него даже есть исходники, настраивающиеся на разные размеры слов. Но я надеялся что если ошибка меняет значение слова на единицу, то может для такого случая есть коды с еще меньшей избыточностью.

накройте данные БЧХ укороченным кодом 240/224/2 исправит 2 битовых ошибки на блок в 240 бит. и реализуется просто.

ЗЫ. вот только синхронизацию декодера нужно будет сделать(в случае РС тоже самое).

Цитата(ViKo @ Nov 8 2011, 04:19) *
P.S. а про Грэя так и остался в непонятках. sad.gif

любой учебник по теории связи почитайте.
ViKo
Цитата(des00 @ Nov 8 2011, 11:23) *
любой учебник по теории связи почитайте.

конретно?
des00
Цитата(ViKo @ Nov 8 2011, 03:25) *
конретно?

скляр/прокис/феер "цифровая связь"
777777
Цитата(ViKo @ Nov 8 2011, 13:19) *
А почему складываете квадраты, а не просто числа?

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

Цитата(ViKo @ Nov 8 2011, 13:19) *
А результат измерения всегда будет скакать на 1, никакими способами от этого не избавиться, можно только сделать реже или чаще.

С чего бы ему скакать, если амплитуды дискретны и отстоят далеко? Только помеха может исказить сигнал.
Цитата(ViKo @ Nov 8 2011, 13:19) *
P.S. а про Грэя так и остался в непонятках. sad.gif

Если в кратце - код Хемминга позволяет исправить один испорченный бит. Код Грея позволяет превратить изменение числа на +-1 в изменение одного бита (и задача сводится к предыдущей как в анекдоте про чайник)

Цитата(ViKo @ Nov 8 2011, 13:19) *
P.P.S. Добавьте бит четности, будете обнаруживать одиночную ошибку. О отбрасывать такой код.

Это понятно, до этого так и делали. Но жалко выбрасывать целый пакет если в нем всего одна-две ошибки, да еще и отличающиеся всего на единицу.
Fast
в лоб
добавьте два бита, которые будут содержать результат par = (val mod 3), где val - измеренное значение
при приеме считаем par` = (val` mod 3), где val` - принятое значение
d = (par` - par) mod 3
d = 0 - ошибок нет
d= 1, val = val`-1
d= 3, val = val`+1
d = 2 - ошибка большая, чем +/-1
i-mir
Цитата(777777 @ Nov 8 2011, 12:12) *
Все резервы повышения на аналоговом уровне исчерпаны. Сигнал оцифровывается 16 раз за 15.84 мкс и из суммы квадратов извлекается квадратный корень.


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

Мало того посты №8 и №25 противоречат друг другу.
Вопрос - друзья вам не жалко времени ?
ViKo
Цитата(777777 @ Nov 8 2011, 11:50) *
Потому что только так можно измерить амплитуду синусоиды. Да еще чтобы полученное значение не зависело от положения первой точки.
С чего бы ему скакать, если амплитуды дискретны и отстоят далеко? Только помеха может исказить сигнал.

Там на картинке вы измеряете с интервалом 1/8 от периода, а пишете 1/4. Остальное правильно. А частота у вас известна точно?
Если амплитуды дискретны, и отстоят далеко, но попадают как раз на переход от одного кода к следующему (например, точно между 0111 и 1000), и от малейшего дуновения ветра выскакивает результат то один, то другой?
Усредните результат отдельных измерений амплитуды. Сложите 16 результатов и поделите на 16.

Еще раз про Грэя. sm.gif
Вы подменили двоичный код на код Грэя. Передали свой код Грэя. Вместо изменения (из-за ошибки, неважно какой, измерения, или в канале связи) 0111->1000 получили 0100->1100. И как вы обнаружите, что число неверное?

И вообще - ошибка на единицу младшего разряда - это и не ошибка даже, а основополагающее свойство цифровой природы!

Цитата(777777 @ Nov 8 2011, 11:50) *
Это понятно, до этого так и делали. Но жалко выбрасывать целый пакет если в нем всего одна-две ошибки, да еще и отличающиеся всего на единицу.

ЕМНИП, для исправления одиночной ошибки в 8-битовом слове нужно добавить еще 3 бита. Код Хэмминга.
Fast
p.s. аналогично, никогда не встречал, чтобы в цифровом канале наиболее вероятной была одиночная ошибка по основанию 10
явная путаница между измерением аналогового сигнала и передачей числа по цифровому каналу
Serg76
Цитата(Fast @ Nov 8 2011, 13:57) *
p.s. аналогично, никогда не встречал, чтобы в цифровом канале наиболее вероятной была одиночная ошибка по основанию 10
явная путаница между измерением аналогового сигнала и передачей числа по цифровому каналу

Канал с АБГШ, где вероятность появления однократной ошибки всегда будет выше групповой. Или я не о том канале думаю?

2 777777 Пакеты какой длины передаются?
777777
Цитата(i-mir @ Nov 8 2011, 14:24) *
Из этого поста делается вывод что ТС не корректно сформулировал задачу и
по сути смешал задачу защиты аналогового сигнала от шума в измерителе
и задачу передачи цифрового кода. Все рассуждения относительно
выбора способа кодирования - не имеют отношения к проблеме вообще.

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

Цитата(i-mir @ Nov 8 2011, 14:24) *
Мало того посты №8 и №25 противоречат друг другу.

Ээ-э-э... А в чем противоречие?
des00
Цитата(ViKo @ Nov 8 2011, 05:52) *
Вы подменили двоичный код на код Грэя. Передали свой код Грэя. Вместо изменения (из-за ошибки, неважно какой, измерения, или в канале связи) 0111->1000 получили 0100->1100. И как вы обнаружите, что число неверное?

уже раза 3 писали что грея нужно использовать с корректирующим кодом.

Цитата
И вообще - ошибка на единицу младшего разряда - это и не ошибка даже, а основополагающее свойство цифровой природы!

это вообще не к месту.

Поиграю в телепата. У автора есть система связи.

формирователь пакетов -> бинарный маппер -> модулятор -> канал с АБГШ + наводки -> демодулятор -> жесткое решение -> бинарный демаппер -> приемник пакетов.

Иногда у него случаются ошибки в жестоком решении, которые приводят к тому, что вместо символа принимается его сосед. Именно символа, а не бита, цифрового кода АЦП и т.д.

Маппер/демаппер осуществляют преобразование двоичного кода в символы канала и наоборот. Для кодов со спектральной эффективностью выше 1 бита на символ(у автора 4 бита на символ), в общем случае, символьная ошибка != битовой ошибке. При используемом автором методе формирования символа (бинарный маппер), одиночная символьная ошибка(у автора принятие соседа) может дать 4 битовых ошибки. Поэтому лучше использовать вместо бинарного отображения, отображение по грею(кодер грея). В этом случае, при приеме соседнего символа (символьная ошибка), всегда будет 1 битовая ошибка. Но если ошибка в символе будет такова, что будет использован не соседний символ, а какой либо другой, то кол-во битовых ошибок будет больше.

А вот затем, эти битовые ошибки корректируются в декодере, с определенной исправляющей способностью. Осталось только выбрать алгоритм декодера. Читайте классиков.
Fast
Цитата(Serg76 @ Nov 8 2011, 15:22) *
Канал с АБГШ, где вероятность появления однократной ошибки всегда будет выше групповой. Или я не о том канале думаю?
ага, двоичный симметричный канал. А не десятеричный
хотя про это история умалчивает, может там М-ичный ?
Serg76
To 777777
Так все-таки какой длины пакеты? Иначе можно гадать до второго пришествия sm.gif
ViKo
Цитата
Иногда у него случаются ошибки в жестоком решении, которые приводят к тому, что вместо символа принимается его сосед. Именно символа, а не бита, цифрового кода АЦП и т.д.

Вот это вы каким образом "стелепатировали", про соседа? Говорено было - ошибка на +-1. Именно про ошибку на единицу младшего разряда. "Число становится на единицу больше или меньше".
Вот если бы был канал связи, в котором наиболее вероятны ошибки, при которых принимается "сосед" из кодового множества, то ваши рассуждения имели бы правоту. Из постов топикстартера этого не видно.
По-моему, вы преувеличиваете техническую сложность канала связи 777777.
des00
Цитата(ViKo @ Nov 8 2011, 06:16) *
Вот это вы каким образом "стелепатировали", про соседа? Говорено было - ошибка на +-1. Именно про ошибку на единицу младшего разряда.

1. по описанию это классическая система связи с многопороговой амплитудной модуляцией.
2. вот первый пост ТС
Цитата
Телеметрия для передачи данных такова, что ошибочные слова в 99% случаев отличаются от истинных на +-1. Отклонение на большее число крайне редко и такие случаи можно не восстанавливать, а лишь сообщать об ошибке.

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

Цитата(Serg76 @ Nov 8 2011, 06:12) *
Иначе можно гадать до второго пришествия sm.gif

+ 100500, а то телепатические способности заканчиваются %)
GetSmart
Цитата(ViKo @ Nov 8 2011, 17:16) *
Говорено было - ошибка на +-1. Именно про ошибку на единицу младшего разряда. "Число становится на единицу больше или меньше".
Вот если бы был канал связи, в котором наиболее вероятны ошибки, при которых принимается "сосед" из кодового множества, то ваши рассуждения имели бы правоту.

sm.gif Не смог удержаться.
ViKo
Цитирую для телепатов дословно, сообщение №5:
"У меня же обычно если происходит ошибка, то это выражается в том, что число становится на 1 больше или меньше. То есть 1000 может превратиться в 0111".
Топикстартер здесь. Что ж вы молчите, как рыба? Опишите свой канал связи уже. sm.gif
GetSmart
Цитата(ViKo @ Nov 8 2011, 17:32) *
Цитирую для телепатов дословно, сообщение №5:
"У меня же обычно если происходит ошибка, то это выражается в том, что число становится на 1 больше или меньше. То есть 1000 может превратиться в 0111".

Это без Грея. С греем была бы ошибка в одном бите всегда.
777777
Цитата(Serg76 @ Nov 8 2011, 16:12) *
To 777777
Так все-таки какой длины пакеты? Иначе можно гадать до второго пришествия sm.gif

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

Длина передаваемого слова 4 бита, или 16 уровней амплитуды. Вначале надеялись получить 6 бит с помощью 64 уровней, но в этом случае количество ошибок превышает все разумные пределы.

Поскольку периоды идут подряд друг за другом, то имеется также влияние одного периода на следующий за ним, но они почти устраняются форсирующим цифровым фильтром. Хотя если после 0 идет F или наоборот, то иногда возникают ошибки.
des00
Цитата(777777 @ Nov 8 2011, 06:38) *
Вообще требуется передавать пакеты по 4 килобайта, но можно будет разбить их как будет удобно.

Длина передаваемого слова 4 бита, или 16 уровней амплитуды. Вначале надеялись получить 6 бит с помощью 64 уровней, но в этом случае количество ошибок превышает все разумные пределы.

если задержка устроит используйте байтовый RS 230/240 GF(2^8). в худшем случае исправит 5 символов на блок в 240*2 символов.

ЗЫ. сделали бы нормальный QAM16/QAM64 и не парились бы wink.gif Квадратурный модулятор, перенесли в цифре на ПЧ, снесли в 0, квадратурный демодулятор wink.gif
777777
Цитата(ViKo @ Nov 8 2011, 16:32) *
Что ж вы молчите, как рыба? Опишите свой канал связи уже. sm.gif

Что еще добавить к тому что написано в посте #8? Код передается как амплитуда одного периода синусоиды. Имеется 16 градаций амплитуды и таким образом один период кодирует 4 бита. Периоды следуют непрерывно друг за другом. Амплитуда F отличается от амплитуды 0 в два раза. При большой разнице становятся сильными влияния периодов друг на друга. При меньшей разница становится мало отличимой.
Serg76
Есть длинные БЧХ с достаточной для Вашего случая корректирующей способностью. Я имел дело с кодом (8191,8152) способного исправлять любую трехкратную ошибку. При этом избыточность всего 39 бит.
777777
Цитата(des00 @ Nov 8 2011, 16:43) *
если задержка устроит используйте байтовый RS 230/240 GF(2^8). в худшем случае исправит 5 символов на блок в 240*2 символов.

Скорее всего придется применять его. Здесь есть исходники, там можно простым изменением #define задать любое количество восстанавливаемых символов.

Цитата(des00 @ Nov 8 2011, 16:43) *
сделали бы нормальный QAM16/QAM64 и не парились бы wink.gif Квадратурный модулятор, перенесли в цифре на ПЧ, снесли в 0, квадратурный демодулятор wink.gif

Что это? А подробнее можно?
des00
Цитата(777777 @ Nov 8 2011, 06:52) *
Что это? А подробнее можно?

Квадратурная амплитудная модуляция позволяет более оптимально использовать частотный ресурс. Правда демодулятор и модулятор будут сложнее чем в вашем случае. Если интересно поищите по форуму симулинк модели petrov, позапускайте оцените что к чему. Это будет явно лучше вашей синусоиды (но вычислительный ресурс нужен).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.