|
|
  |
Коды для восстановления ошибок, какой алгоритм применить? |
|
|
|
Nov 7 2011, 19:23
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 17-06-10
Из: Киев
Пользователь №: 57 986

|
Цитата(GetSmart @ Nov 7 2011, 22:19)  Там же ясно написано, что проблема с помехами (шумом?) в канале. Если они на уровне 4-ого бита, то хоть 20 битный АЦП ставь, пользы не будет. Вопрос относительно "там" это где ?
|
|
|
|
|
Nov 7 2011, 19:26
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(i-mir @ Nov 8 2011, 00:23)  Вопрос относительно "там" это где ? Чукча не читатель  Цитата(777777 @ Nov 7 2011 @ 19:04) Но вследствие помех в канале измерение иногда дает результат, отличающийся на единицу. Очень предположительно, канал аналоговый. Или полуаналоговый. И ошибки аналоговые (+-1). Вообще, подробности ТС зажал. Возможно подошли бы и другие методы повышения помехоустойчивости в аналоговом канале.
Сообщение отредактировал GetSmart - Nov 7 2011, 19:28
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Nov 8 2011, 07:46
|
Профессионал
    
Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775

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

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
То, что описал ТС - это не ошибка в канале передачи, а ошибка измерения его телеметрии. Я так думаю. И кодируй их в чем попало, от этого ошибка не пропадет. Цитата ошибка в декодировании соседнего символа Что есть "соседний" символ, если передается некий результат измерений? Сейчас 1000, в следующий момент 1010, 1100... Или в коде Грэя - какие-нибудь 1000, 1011, 0001... Совершенно не зависящие от слова к слову последовательности. Если в канале часто случаются одиночные ошибки, эти ошибки могут появиться в любом бите слова (не обязательно в младшем, как написал ТС +-1). Они с равной вероятностью могут появиться в словах, закодированных в двоичном коде, или в коде Грэя. Есть коды, обнаруживающие такие одиночные ошибки. Есть коды, исправляющие.
|
|
|
|
|
Nov 8 2011, 08:11
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(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). Они с равной вероятностью могут появиться в словах, закодированных в двоичном коде, или в коде Грэя. читали тему не винимательно, автор пришет источник этих ошибок, метод формирования и приема сигнала.
--------------------
|
|
|
|
|
Nov 8 2011, 08:31
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(des00 @ Nov 8 2011, 10:11)  читали тему не винимательно, автор пришет источник этих ошибок, метод формирования и приема сигнала. Если сигнал действительно практически неизменный (к примеру 1000), а из-за ошибки измерения может измениться (0111, 1001), то, наверное, оба эти значения для автора считаются неправильными. Ему нужно их "исправить"? Так просто найти разность между текущим значением и предыдущим (или усредненным). Вот и получится разница в 1. Дальше делайте, что хотите - отбрасывайте или используйте. Могут ли такие ошибки (0111, 1001) с равной вероятностью появиться в самом канале связи? Сомнительно. Если передавать в коде Грэя, эти ошибки измерения будут отличаться на один бит, согласен. Но это никак не уменьшает саму ошибку, не приближает к "истинному" значению. И не позволяет ее исправить.
|
|
|
|
|
Nov 8 2011, 08:33
|
Профессионал
    
Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775

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

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(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 я измерить уже не могу, имеющаяся аппаратура не позволяет. Поэтому остаются чисто математические методы.
|
|
|
|
|
Nov 8 2011, 09:19
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(777777 @ Nov 8 2011, 11:12)  Сигнал оцифровывается 16 раз за 15.84 мкс и из суммы квадратов извлекается квадратный корень. А почему складываете квадраты, а не просто числа? А результат измерения всегда будет скакать на 1, никакими способами от этого не избавиться, можно только сделать реже или чаще. P.S. а про Грэя так и остался в непонятках.  Тоже считаю, что проблема не в связи, а в измерении. P.P.S. Добавьте бит четности, будете обнаруживать одиночную ошибку. И отбрасывать такой код.
|
|
|
|
|
Nov 8 2011, 09:23
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(777777 @ Nov 8 2011, 04:12)  Идея с переводом данных в код Грея + Хемминг конечно интересна, но сам код Хемминга требует большой избыточночти, с таким же успехом можно уменьшить число градаций амплитуды вдвое. Но обидно, что ошибка случаеся редко, одна на несколько десятков слов, а из-за этого не хочется уменьшать скорость в разы. Тогда уж лучше воспользоваться Ридом-Соломоном, для него даже есть исходники, настраивающиеся на разные размеры слов. Но я надеялся что если ошибка меняет значение слова на единицу, то может для такого случая есть коды с еще меньшей избыточностью. накройте данные БЧХ укороченным кодом 240/224/2 исправит 2 битовых ошибки на блок в 240 бит. и реализуется просто. ЗЫ. вот только синхронизацию декодера нужно будет сделать(в случае РС тоже самое). Цитата(ViKo @ Nov 8 2011, 04:19)  P.S. а про Грэя так и остался в непонятках.  любой учебник по теории связи почитайте.
--------------------
|
|
|
|
|
Nov 8 2011, 09:50
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(ViKo @ Nov 8 2011, 13:19)  А почему складываете квадраты, а не просто числа? Потому что только так можно измерить амплитуду синусоиды. Да еще чтобы полученное значение не зависело от положения первой точки. Цитата(ViKo @ Nov 8 2011, 13:19)  А результат измерения всегда будет скакать на 1, никакими способами от этого не избавиться, можно только сделать реже или чаще. С чего бы ему скакать, если амплитуды дискретны и отстоят далеко? Только помеха может исказить сигнал. Цитата(ViKo @ Nov 8 2011, 13:19)  P.S. а про Грэя так и остался в непонятках.  Если в кратце - код Хемминга позволяет исправить один испорченный бит. Код Грея позволяет превратить изменение числа на +-1 в изменение одного бита (и задача сводится к предыдущей как в анекдоте про чайник) Цитата(ViKo @ Nov 8 2011, 13:19)  P.P.S. Добавьте бит четности, будете обнаруживать одиночную ошибку. О отбрасывать такой код. Это понятно, до этого так и делали. Но жалко выбрасывать целый пакет если в нем всего одна-две ошибки, да еще и отличающиеся всего на единицу.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|