|
|
  |
Golay (12,6,6) |
|
|
|
Feb 18 2015, 18:19
|
Профессионал
    
Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775

|
Цитата(andyp @ Feb 18 2015, 12:10)  Могу быть не прав, но у меня получается 2^2*nchoosek(12,2) + 2*12 = 288 исправляемых паттернов ошибок. nchoosek - биномиальный коэффициент C из 12. а почему основание - 2, код ведь троичный, т.е. все преобразования надо делать в поле GF(3)? Во-вторых, насколько я понимаю, для линейных кодов размер таблицы определяется как B^(n-k), где B - основание кода. Уменьшить размер таблицы и сложность декодера можно за счет свойств цикличности, в этом я с Вами согласен.
|
|
|
|
|
Feb 18 2015, 19:00
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Цитата Если ошибки барстами, то будет плохо. Интерливить придется Я сейчас не готов оценить характер распределения ошибок, собирался тщательно проверить на практике, т.к. теоретически нереально предсказать из-за нелинейности GSM-кодека и его внутренней памяти. На первый взгляд равномерно (не барстами). Кроме того, как минимум каждый третий (или второй) бит (знак пульса) значительно более устойчивый. Цитата Модуляция... Вот на неё все усилия и направить, чтобы не была чувствительна к искажениям кодека, исправлять недостатки модуляции кодированием плохая идея. Это понятно, вначале предполагалось использовать какую-либо устойчивую низкобитрейтную схему вообще без FEC, но вот подобрать ее оказалось непросто. Сперва показалось, что я просто плохо ориентируюсь в теме, но, изучив существующие варианты, понял, что большинство - по типу шаманства. Сапожников, например, вообще рассматривает кодек как "черный ящик" и использует методы стохастической оптимизации. Поэтому решил попробовать пойти другим путем: используя какую-либо более-менее приемлемую модуляцию с избыточным битрейтом, и попытаться найти хороший алгоритм оценки вероятности ошибки каждого бита, таким образом, реализовать эффективный FEC с мягким декодированием. Альтернативные пути (например, реализовать несколько копий блока с незначительными изменениями лишь части бит от копии к копии, и пускать их последовательно, эмулируя основной тон речи), тоже рассматриваются. PS: буду благодарен за любые, самые дикие, идеи.
|
|
|
|
|
Feb 18 2015, 19:38
|
Местный
  
Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163

|
Цитата(Serg76 @ Feb 18 2015, 21:19)  а почему основание - 2, код ведь троичный, т.е. все преобразования надо делать в поле GF(3)? Во-вторых, насколько я понимаю, для линейных кодов размер таблицы определяется как B^(n-k), где B - основание кода. Уменьшить размер таблицы и сложность декодера можно за счет свойств цикличности, в этом я с Вами согласен. Почему 2? Потому что компоненты вектора ошибки могут быть 1 и 2, но не 0, т.е. 3-1 = 2. Всего синдромов может быть действительно B^(n-k), но не каждому синдрому соответствует только один error pattern. Для исправления нужно использовать только те синдромы, которым соответствует один возможный вектор ошибки. Вот, в википедии про синдромное декодирование тоже самое написано для случая бинарного кода: http://en.wikipedia.org/wiki/Decoding_meth...ndrome_decodingВ случае тернарного кода биномиальные коэффициенты в формуле из википедии будут с весами (B-1)^i, i - количество ошибок в кодовом слове.
Сообщение отредактировал andyp - Feb 18 2015, 19:43
|
|
|
|
|
Feb 18 2015, 20:26
|
Местный
  
Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163

|
Цитата(GeGeL @ Feb 18 2015, 22:00)  Я сейчас не готов оценить характер распределения ошибок, собирался тщательно проверить на практике, т.к. теоретически нереально предсказать из-за нелинейности GSM-кодека и его внутренней памяти. На первый взгляд равномерно (не барстами). Кроме того, как минимум каждый третий (или второй) бит (знак пульса) значительно более устойчивый. Избыточности ~1/2, которая у Вас есть вроде бы вполне достаточно, чтобы получить выигрыш в 10 раз по BER при сыром BER 1%. Ну т.е. можно начать пробовать с бинарного Галея или БЧХ. Можно даже с жестким декодированием - исправляющей способности вроде должно хватать. Потом, когда втянетесь  , можно будет и о мягком декодере подумать. Снижать скорость передачи особого смысла нет - выигрыш от кодирования нормальным кодом всегда больше, чем просто выигрыш по энергетике при передаче некодированных бит. Цитата(Serg76 @ Feb 18 2015, 23:17)  это опять же исходя из свойств цикличности? Да нет. Просто ненулевые компоненты вектора ошибки могут иметь значения 1 или 2. Ну или 0, только это уже не ошибка  Пусть вектор ошибки из n компонент [000...x00..x..0], Вот x может быть 1 или 2 в случае тернарного кода. Если позиций с x в векторе i, то таких векторов всего может быть nchoosek(n,i) (С из n по i)
|
|
|
|
|
Feb 18 2015, 20:53
|
Профессионал
    
Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775

|
Цитата(andyp @ Feb 19 2015, 00:26)  Да нет. Просто ненулевые компоненты вектора ошибки могут иметь значения 1 или 2. Ну или 0, только это уже не ошибка  Пусть вектор ошибки из n компонент [000...x00..x..0], Вот x может быть 1 или 2 в случае тернарного кода. Если позиций с x в векторе i, то таких векторов всего может быть nchoosek(n,i) (С из n по i) Понятно, видимо я не правильно воспринял Вашу фразу: "Потому что компоненты вектора ошибки могут быть 1 и 2, но не 0, т.е. 3-1 = 2"
Сообщение отредактировал Serg76 - Feb 18 2015, 21:14
|
|
|
|
|
Feb 18 2015, 21:09
|
Местный
  
Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163

|
Цитата(Serg76 @ Feb 18 2015, 23:53)  Понятное дело, что сложение с нулем - это не исправление ошибки, но как я понял, Вы рассматриваете только те синдромы, для которых компоненты вектора ошибки все должны быть отличны от нуля? Что же тогда будет содержать таблица в случае двоичного кода, один вектор? Нет. Если какой-то компонент равен 0, то фактически это означает, что ошибок было меньше. Поэтому там получается сумма биномиальных коэффициентов. Т.е. в случае нашего тернарного Голея, который исправляет до 2 ошибок имеем 2*nchoosek(12,1) + 2^2*nchoosek(12,2) = 288 синдромов, которые стоит рассматривать. Всего возможных ненулевых синдромов 3^6 - 1 = 728 Для двоичного Голея, который (24, 12, 7) и исправляет 3 ошибки имеем nchooosek(24,1) + nchoosek(24,2) + nchoosek(24,3) = 2324 синдрома из 4095 ненулевых. Ну и еще для иллюстрации рассмотим не quasiperfect, а perfect код Хамминга (7, 4, 3), исправляющий одну ошибку. Для него количество рассматриваемых синдромов nchoosek(7,1) = 7. Всего ненулевых синдромов тоже 7 (2^(7-4)-1), что и следовало ожидать, так как код совершенный.
|
|
|
|
|
Feb 19 2015, 12:02
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Может. В соседней теме я давал ссылку на hermes-модем на основе BFSK. Но там двигали одну частоту и настолько быстро, на сколько возможно. Как я понял из отзывов, ничего хорошего из этого не получилось. Интересно попробовать MFSK, причем сдвигать можно не каждую частоту одномоментно, а последовательно, растягивая изменения во времени. Пульсы очень хорошо подходят для GSM FR кодека, который RTE и делает выборку, квантуя каждый третий сэмпл из последовательности с максимальной энергией. Сначала я хотел сделать универсальный модем, пригодный в том числе и для низкобитрейтного AMR, но потом понял, что это почти нереально. Учитывая, что все GSM сети и телефоны поддерживают GSM FR, и в большинстве случаем можно его включить принудительно (отключив другие варианты), пока сосредоточился на этом варианте, пытаясь его улучшить оптимальным кодированием.
|
|
|
|
|
Feb 19 2015, 13:47
|
Местный
  
Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163

|
Цитата(GeGeL @ Feb 19 2015, 15:02)  пока сосредоточился на этом варианте, пытаясь его улучшить оптимальным кодированием. Что-то подумалось, а что бы Вам обычный сверточный код не поиспользовать? Удобство заключается в том, что легко сделать нужную длину блока. К тому же, алгоритм витерби будет хорошо работать с битами разной надежности (как он нормально работает для pragmatic qam). Начать можно с обычного r =1/2; k = 7 кодера, блоков, скажем 2*81 бит, а затем, если лишняя помехоустойчивость будет, можно прикрутить выкалывание.
|
|
|
|
|
Feb 19 2015, 19:33
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Цитата(thermit @ Feb 19 2015, 16:54)  Скажем, если речь идет об amr-nb, то скорость в канале передачи информации Интересные обобщенные оценки, под таким углом я не смотрел. ECall делался с упором на универсальность, но для GSMFR гораздо лучше паттерн 4 позиции одного пульса в 12 сэмплах, чем 4 в 16: кодек использует RTE по каждому третьему сэмплу. Также очень низкий BER получается при двух позициях одного пульса в 6 сэмплах + знак Манчестерским кодом, паттерн не требует отбеливания, хорошо вписывается в полосу пропускания и подходит в т.ч. и для EFR. Пытался победить AMR475, изменил паттерн до 8 позиций одного пульса в 40 сэмплах (что хорошо вписывается в кодовую книгу - там 2 пульса на 40 сэмплов, т.о. никогда не будет превышения по количеству пульсов), но тогда искажается знак пульса: после кодека единичный пульс на осциллограмме вырождается в затухающую синусоиду ("звенит"). Похоже, для низкобитрейтных кодеков коррелятор в демодуляторе - не лучший вариант, надо пробовать другие техники. Отдельная история - VAD, с ним я пока не играл, позже отпишу. Цитата(andyp @ Feb 19 2015, 17:47)  Что-то подумалось, а что бы Вам обычный сверточный код не поиспользовать? Спасибо, сейчас почитаю о витерби. Я так понял, он использует 7-битные символы в виде блока произвольной длины? Вариант 2*12 блоков выглядит интересным. Что он может скорректировать? Можно ли на входе использовать мягкие биты (в моем случае соотношение энергий в предполагаемых позициях пульсов в виде float)?
|
|
|
|
|
Feb 19 2015, 20:52
|
Профессионал
    
Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775

|
Цитата(GeGeL @ Feb 19 2015, 23:33)  Спасибо, сейчас почитаю о витерби. Я так понял, он использует 7-битные символы в виде блока произвольной длины? Вариант 2*12 блоков выглядит интересным. Что он может скорректировать? Можно ли на входе использовать мягкие биты (в моем случае соотношение энергий в предполагаемых позициях пульсов в виде float)? Это сверточный несистематический код, 7- кодовое ограничение (длина регистра сдвига). Декодер строится довольно просто, как для жесткого, так и мягкого входа, разница лишь в блоке подсчета метрик (Хемминга для жестких решений, Эвклида для мягких). Выигрыш от кодирования примерно 5,5 дБ для 1е-6. Может стоит добавить циркулярности к коду, чтобы убрать терминирование.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|