i-mir 0 November 7, 2011 Posted November 7, 2011 · Report post Там же ясно написано, что проблема с помехами (шумом?) в канале. Если они на уровне 4-ого бита, то хоть 20 битный АЦП ставь, пользы не будет. Вопрос относительно "там" это где ? Quote Share this post Link to post Share on other sites More sharing options...
GetSmart 0 November 7, 2011 Posted November 7, 2011 (edited) · Report post Вопрос относительно "там" это где ? Чукча не читатель :) Но вследствие помех в канале измерение иногда дает результат, отличающийся на единицу. Очень предположительно, канал аналоговый. Или полуаналоговый. И ошибки аналоговые (+-1). Вообще, подробности ТС зажал. Возможно подошли бы и другие методы повышения помехоустойчивости в аналоговом канале. Edited November 7, 2011 by GetSmart Quote Share this post Link to post Share on other sites More sharing options...
ViKo 0 November 8, 2011 Posted November 8, 2011 · Report post Про код Грэя не понял. В канале ж не передаются монотонные последовательности. Самые разные коды могут идти друг за другом. И кодировать разные состояния кодом Грэя не даст ничего. А если не все коды используются (например, для 8-битовых, используются только 64), то можно, наоборот, увеличить кодовое расстояние, а не сводить его к 1. Quote Share this post Link to post Share on other sites More sharing options...
des00 27 November 8, 2011 Posted November 8, 2011 · Report post Про код Грэя не понял. В канале ж не передаются монотонные последовательности. Самые разные коды могут идти друг за другом. И кодировать разные состояния кодом Грэя не даст ничего. как не даст то ? в сабжевом примере, код из канала 1000, описывает 3 кода 0111/1000/1001 (4/0/1 битовая ошибка). в случае использования кода грея прием из канала 1000, даст 3 кода 0000/1000/1001 (всегда одна битовая ошибка или ошибок нет). и не важно что код немонотонный. Quote Share this post Link to post Share on other sites More sharing options...
Serg76 0 November 8, 2011 Posted November 8, 2011 · Report post Про код Грэя не понял. В канале ж не передаются монотонные последовательности. Самые разные коды могут идти друг за другом. И кодировать разные состояния кодом Грэя не даст ничего. А если не все коды используются (например, для 8-битовых, используются только 64), то можно, наоборот, увеличить кодовое расстояние, а не сводить его к 1. Конечно же даст. Основное правило построения кода Грея и заключается в том, что ошибка в декодировании соседнего символа приведет, как правило, к одиночной ошибке в битовой комбинации. Код Грея и отличается своей уникальностью, что не надо вводить дополнительно никакой избыточности. Quote Share this post Link to post Share on other sites More sharing options...
ViKo 0 November 8, 2011 Posted November 8, 2011 · Report post То, что описал ТС - это не ошибка в канале передачи, а ошибка измерения его телеметрии. Я так думаю. И кодируй их в чем попало, от этого ошибка не пропадет. ошибка в декодировании соседнего символа Что есть "соседний" символ, если передается некий результат измерений? Сейчас 1000, в следующий момент 1010, 1100... Или в коде Грэя - какие-нибудь 1000, 1011, 0001... Совершенно не зависящие от слова к слову последовательности. Если в канале часто случаются одиночные ошибки, эти ошибки могут появиться в любом бите слова (не обязательно в младшем, как написал ТС +-1). Они с равной вероятностью могут появиться в словах, закодированных в двоичном коде, или в коде Грэя. Есть коды, обнаруживающие такие одиночные ошибки. Есть коды, исправляющие. Quote Share this post Link to post Share on other sites More sharing options...
des00 27 November 8, 2011 Posted November 8, 2011 · Report post Или в коде Грэя - какие-нибудь 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). Они с равной вероятностью могут появиться в словах, закодированных в двоичном коде, или в коде Грэя. читали тему не винимательно, автор пришет источник этих ошибок, метод формирования и приема сигнала. Quote Share this post Link to post Share on other sites More sharing options...
ViKo 0 November 8, 2011 Posted November 8, 2011 · Report post читали тему не винимательно, автор пришет источник этих ошибок, метод формирования и приема сигнала. Если сигнал действительно практически неизменный (к примеру 1000), а из-за ошибки измерения может измениться (0111, 1001), то, наверное, оба эти значения для автора считаются неправильными. Ему нужно их "исправить"? Так просто найти разность между текущим значением и предыдущим (или усредненным). Вот и получится разница в 1. Дальше делайте, что хотите - отбрасывайте или используйте. Могут ли такие ошибки (0111, 1001) с равной вероятностью появиться в самом канале связи? Сомнительно. Если передавать в коде Грэя, эти ошибки измерения будут отличаться на один бит, согласен. Но это никак не уменьшает саму ошибку, не приближает к "истинному" значению. И не позволяет ее исправить. Quote Share this post Link to post Share on other sites More sharing options...
Serg76 0 November 8, 2011 Posted November 8, 2011 · Report post То, что описал ТС - это не ошибка в канале передачи, а ошибка измерения его телеметрии. Я так думаю. И кодируй их в чем попало, от этого ошибка не пропадет. Что есть "соседний" символ, если передается некий результат измерений? Сейчас 1000, в следующий момент 1010, 1100... Или в коде Грэя - какие-нибудь 1000, 1011, 0001... Совершенно не зависящие от слова к слову последовательности. Если в канале часто случаются одиночные ошибки, эти ошибки могут появиться в любом бите слова (не обязательно в младшем, как написал ТС +-1). Они с равной вероятностью могут появиться в словах, закодированных в двоичном коде, или в коде Грэя. Есть коды, обнаруживающие такие одиночные ошибки. Есть коды, исправляющие. Сначала декодер демодулятора примет решение по переданным символам и при малом уровне шума в канале по максимальному правдоподобию с большой долей вероятности исказится ближайший к переданному символ. При этом неважно как кодировался сигнал - по амплитуде, частоте или фазе. Так вот в случае использования Грея эта ошибка в соседнем символе приведет уже к одиночной, а не групповой битовой ошибке, точно так как на рисунке des00. С одиночной ошибкой затем бороться проще. Quote Share this post Link to post Share on other sites More sharing options...
777777 0 November 8, 2011 Posted November 8, 2011 · Report post Так отож. И при чем здесь кодирование? У вас проблемы с измерениями а не в канале связи. Вы принципиально решаете не ту задачу. Лучше решить вопросы с 4-х битным АЦП. А самый младший бит будет гулять - тут уж закон природы АЦП. Нужно 5 разрядов. Не пытайтесь понять меня неправильно ©. Телеметрию канала я описал в сообщении #8. Амплитуда несущей синусоиды измеряется 14-разрдным АЦП с периодом 0.96 мкс, но в канале есть шумы, которые тоже измеряются в результате чего возникает ошибка. Идея с переводом данных в код Грея + Хемминг конечно интересна, но сам код Хемминга требует большой избыточночти, с таким же успехом можно уменьшить число градаций амплитуды вдвое. Но обидно, что ошибка случаеся редко, одна на несколько десятков слов, а из-за этого не хочется уменьшать скорость в разы. Тогда уж лучше воспользоваться Ридом-Соломоном, для него даже есть исходники, настраивающиеся на разные размеры слов. Но я надеялся что если ошибка меняет значение слова на единицу, то может для такого случая есть коды с еще меньшей избыточностью. Очень предположительно, канал аналоговый. Или полуаналоговый. И ошибки аналоговые (+-1). Вообще, подробности ТС зажал. Это не предположительно, это так и есть, написано об этом в сообщении #8 Возможно подошли бы и другие методы повышения помехоустойчивости в аналоговом канале. Все резервы повышения на аналоговом уровне исчерпаны. Сигнал оцифровывается 16 раз за 15.84 мкс и из суммы квадратов извлекается квадратный корень. От количества отсчетов точность зависит очень сильно, но больше 16 я измерить уже не могу, имеющаяся аппаратура не позволяет. Поэтому остаются чисто математические методы. Quote Share this post Link to post Share on other sites More sharing options...
ViKo 0 November 8, 2011 Posted November 8, 2011 · Report post Сигнал оцифровывается 16 раз за 15.84 мкс и из суммы квадратов извлекается квадратный корень. А почему складываете квадраты, а не просто числа? А результат измерения всегда будет скакать на 1, никакими способами от этого не избавиться, можно только сделать реже или чаще. P.S. а про Грэя так и остался в непонятках. :( Тоже считаю, что проблема не в связи, а в измерении. P.P.S. Добавьте бит четности, будете обнаруживать одиночную ошибку. И отбрасывать такой код. Quote Share this post Link to post Share on other sites More sharing options...
des00 27 November 8, 2011 Posted November 8, 2011 · Report post Идея с переводом данных в код Грея + Хемминг конечно интересна, но сам код Хемминга требует большой избыточночти, с таким же успехом можно уменьшить число градаций амплитуды вдвое. Но обидно, что ошибка случаеся редко, одна на несколько десятков слов, а из-за этого не хочется уменьшать скорость в разы. Тогда уж лучше воспользоваться Ридом-Соломоном, для него даже есть исходники, настраивающиеся на разные размеры слов. Но я надеялся что если ошибка меняет значение слова на единицу, то может для такого случая есть коды с еще меньшей избыточностью. накройте данные БЧХ укороченным кодом 240/224/2 исправит 2 битовых ошибки на блок в 240 бит. и реализуется просто. ЗЫ. вот только синхронизацию декодера нужно будет сделать(в случае РС тоже самое). P.S. а про Грэя так и остался в непонятках. :( любой учебник по теории связи почитайте. Quote Share this post Link to post Share on other sites More sharing options...
ViKo 0 November 8, 2011 Posted November 8, 2011 · Report post любой учебник по теории связи почитайте. конретно? Quote Share this post Link to post Share on other sites More sharing options...
des00 27 November 8, 2011 Posted November 8, 2011 · Report post конретно? скляр/прокис/феер "цифровая связь" Quote Share this post Link to post Share on other sites More sharing options...
777777 0 November 8, 2011 Posted November 8, 2011 · Report post А почему складываете квадраты, а не просто числа? Потому что только так можно измерить амплитуду синусоиды. Да еще чтобы полученное значение не зависело от положения первой точки. А результат измерения всегда будет скакать на 1, никакими способами от этого не избавиться, можно только сделать реже или чаще. С чего бы ему скакать, если амплитуды дискретны и отстоят далеко? Только помеха может исказить сигнал. P.S. а про Грэя так и остался в непонятках. :( Если в кратце - код Хемминга позволяет исправить один испорченный бит. Код Грея позволяет превратить изменение числа на +-1 в изменение одного бита (и задача сводится к предыдущей как в анекдоте про чайник) P.P.S. Добавьте бит четности, будете обнаруживать одиночную ошибку. О отбрасывать такой код. Это понятно, до этого так и делали. Но жалко выбрасывать целый пакет если в нем всего одна-две ошибки, да еще и отличающиеся всего на единицу. Quote Share this post Link to post Share on other sites More sharing options...