реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Golay (12,6,6)
petrov
сообщение Feb 18 2015, 13:21
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(GeGeL @ Feb 18 2015, 15:01) *
Модуляция...


Вот на неё все усилия и направить, чтобы не была чувствительна к искажениям кодека, исправлять недостатки модуляции кодированием плохая идея.
Go to the top of the page
 
+Quote Post
Serg76
сообщение Feb 18 2015, 18:19
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 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 - основание кода. Уменьшить размер таблицы и сложность декодера можно за счет свойств цикличности, в этом я с Вами согласен.
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Feb 18 2015, 19:00
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Цитата
Если ошибки барстами, то будет плохо. Интерливить придется

Я сейчас не готов оценить характер распределения ошибок, собирался тщательно проверить на практике, т.к. теоретически нереально предсказать из-за нелинейности GSM-кодека и его внутренней памяти. На первый взгляд равномерно (не барстами). Кроме того, как минимум каждый третий (или второй) бит (знак пульса) значительно более устойчивый.

Цитата
Модуляция...
Вот на неё все усилия и направить, чтобы не была чувствительна к искажениям кодека, исправлять недостатки модуляции кодированием плохая идея.

Это понятно, вначале предполагалось использовать какую-либо устойчивую низкобитрейтную схему вообще без FEC, но вот подобрать ее оказалось непросто. Сперва показалось, что я просто плохо ориентируюсь в теме, но, изучив существующие варианты, понял, что большинство - по типу шаманства. Сапожников, например, вообще рассматривает кодек как "черный ящик" и использует методы стохастической оптимизации.
Поэтому решил попробовать пойти другим путем: используя какую-либо более-менее приемлемую модуляцию с избыточным битрейтом, и попытаться найти хороший алгоритм оценки вероятности ошибки каждого бита, таким образом, реализовать эффективный FEC с мягким декодированием.
Альтернативные пути (например, реализовать несколько копий блока с незначительными изменениями лишь части бит от копии к копии, и пускать их последовательно, эмулируя основной тон речи), тоже рассматриваются.

PS: буду благодарен за любые, самые дикие, идеи.
Go to the top of the page
 
+Quote Post
andyp
сообщение Feb 18 2015, 19:38
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Serg76
сообщение Feb 18 2015, 20:17
Сообщение #20


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(andyp @ Feb 18 2015, 23:38) *
Почему 2? Потому что компоненты вектора ошибки могут быть 1 и 2, но не 0, т.е. 3-1 = 2.

это опять же исходя из свойств цикличности?
Go to the top of the page
 
+Quote Post
andyp
сообщение Feb 18 2015, 20:26
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(GeGeL @ Feb 18 2015, 22:00) *
Я сейчас не готов оценить характер распределения ошибок, собирался тщательно проверить на практике, т.к. теоретически нереально предсказать из-за нелинейности GSM-кодека и его внутренней памяти. На первый взгляд равномерно (не барстами). Кроме того, как минимум каждый третий (или второй) бит (знак пульса) значительно более устойчивый.


Избыточности ~1/2, которая у Вас есть вроде бы вполне достаточно, чтобы получить выигрыш в 10 раз по BER при сыром BER 1%.

Ну т.е. можно начать пробовать с бинарного Галея или БЧХ. Можно даже с жестким декодированием - исправляющей способности вроде должно хватать. Потом, когда втянетесь sm.gif, можно будет и о мягком декодере подумать.

Снижать скорость передачи особого смысла нет - выигрыш от кодирования нормальным кодом всегда больше, чем просто выигрыш по энергетике при передаче некодированных бит.

Цитата(Serg76 @ Feb 18 2015, 23:17) *
это опять же исходя из свойств цикличности?


Да нет. Просто ненулевые компоненты вектора ошибки могут иметь значения 1 или 2. Ну или 0, только это уже не ошибка sm.gif

Пусть вектор ошибки из n компонент [000...x00..x..0], Вот x может быть 1 или 2 в случае тернарного кода. Если позиций с x в векторе i, то таких векторов всего может быть nchoosek(n,i) (С из n по i)
Go to the top of the page
 
+Quote Post
Serg76
сообщение Feb 18 2015, 20:53
Сообщение #22


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(andyp @ Feb 19 2015, 00:26) *
Да нет. Просто ненулевые компоненты вектора ошибки могут иметь значения 1 или 2. Ну или 0, только это уже не ошибка sm.gif

Пусть вектор ошибки из 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
Go to the top of the page
 
+Quote Post
andyp
сообщение Feb 18 2015, 21:09
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 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), что и следовало ожидать, так как код совершенный.
Go to the top of the page
 
+Quote Post
Serg76
сообщение Feb 18 2015, 21:22
Сообщение #24


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



ок, спасибо, уже сам понял, что имелось ввиду
Go to the top of the page
 
+Quote Post
petrov
сообщение Feb 19 2015, 11:18
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(GeGeL @ Feb 18 2015, 22:00) *
PS: буду благодарен за любые, самые дикие, идеи.


В качестве бреда, может лучше тональные сигналы по частоте двигать несколькими некогерентными MFSK, чем импульсы по времени?
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Feb 19 2015, 12:02
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Может. В соседней теме я давал ссылку на hermes-модем на основе BFSK. Но там двигали одну частоту и настолько быстро, на сколько возможно. Как я понял из отзывов, ничего хорошего из этого не получилось. Интересно попробовать MFSK, причем сдвигать можно не каждую частоту одномоментно, а последовательно, растягивая изменения во времени.
Пульсы очень хорошо подходят для GSM FR кодека, который RTE и делает выборку, квантуя каждый третий сэмпл из последовательности с максимальной энергией. Сначала я хотел сделать универсальный модем, пригодный в том числе и для низкобитрейтного AMR, но потом понял, что это почти нереально. Учитывая, что все GSM сети и телефоны поддерживают GSM FR, и в большинстве случаем можно его включить принудительно (отключив другие варианты), пока сосредоточился на этом варианте, пытаясь его улучшить оптимальным кодированием.
Go to the top of the page
 
+Quote Post
thermit
сообщение Feb 19 2015, 12:54
Сообщение #27


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Скажем, если речь идет об amr-nb, то скорость в канале передачи информации об огибающей спектра это 1150 - 1900 бит/с. (4.75 - 12.2 общая). Т е выше этой скорости на всяких угловых модуляциях едва ли можно получить. Да и есть проблема асинхронности нарезки на блоки кодеком и модулятора. Так что даже эти скорости два ли достижимы. Скорость в канале кодирования импульсного возбуждения 1800 - 7000 бит/с. Именно в этой связи используют модуляцию положения импульса с урезанной полосой. через 12.2 и 10.2 (7000 и 6200) ecall пролазит без проблем с 1-ой попытки (скорость данных 1245 бит/с). 7.95 (3400) и ниже уже начинаются проблемы. Скорость падает радикально. Ну и лучшесть гсм-фр перед амр-нб-12.2 вполне понятна. Ибо в гсм скорость канала кодирования положения импульсов 7800 бит/с.
Go to the top of the page
 
+Quote Post
andyp
сообщение Feb 19 2015, 13:47
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(GeGeL @ Feb 19 2015, 15:02) *
пока сосредоточился на этом варианте, пытаясь его улучшить оптимальным кодированием.


Что-то подумалось, а что бы Вам обычный сверточный код не поиспользовать? Удобство заключается в том, что легко сделать нужную длину блока. К тому же, алгоритм витерби будет хорошо работать с битами разной надежности (как он нормально работает для pragmatic qam). Начать можно с обычного r =1/2; k = 7 кодера, блоков, скажем 2*81 бит, а затем, если лишняя помехоустойчивость будет, можно прикрутить выкалывание.
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Feb 19 2015, 19:33
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 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)?
Go to the top of the page
 
+Quote Post
Serg76
сообщение Feb 19 2015, 20:52
Сообщение #30


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



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

Это сверточный несистематический код, 7- кодовое ограничение (длина регистра сдвига). Декодер строится довольно просто, как для жесткого, так и мягкого входа, разница лишь в блоке подсчета метрик (Хемминга для жестких решений, Эвклида для мягких). Выигрыш от кодирования примерно 5,5 дБ для 1е-6. Может стоит добавить циркулярности к коду, чтобы убрать терминирование.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 17:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.0151 секунд с 7
ELECTRONIX ©2004-2016