Перейти к содержанию

Tirend

Участник
  • Публикаций

    6
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Цитата(roman522 @ Jan 12 2016, 17:10) Приветствую. Решал данную задачу практически совсем недавно. У вас есть ошибки к подходу которые нужно устранить. 1. "подбор фазы" - просто так не возможен нужна образцовая последовательность. ну и конечно нудно демодулировать с корректором. и учесть LLR 2. вам представлен вариант записи с реального оборудования. Из этого можно получить ряд послаблений. 2.1 если это LDPC код - то он систематический. 2.2 если разработчики данной железки "не фанаты", то код регулярный или квази циклический. 2.3 число проверок в строке H мало (<=10). Первым шагом будет подготовка исходных данных. 1. демодулирование и получение soft bit 2. получение hard bit. анализ в битовом редакторе смещения кодовых слов и выделение кодовых слов в виде [data][check] LLR 3. удаление дубликатов кодовых слов. методом слияния. 4. удаление или корректировка кодовых слов с незначительными различиями. (<10 bit) 5. Выборка из полученного набора не менее 2*N кодовых слов с максимальным LLR. Второй шаг - по подготовленной выборке "тупым" перебором и статистикой нахождение строк H ;-) тут нужно задаться числом проверок k (обычно 5-10) длинна кодового слова n и получаем число возможных вариантов I =n!/( (n-k)! * k!) Эти варианты можно ещё сократить если учесть свойства кодов. и самым сложным является нахождение хотя бы одной строки, далее всё просто. В итоге я получил скорость перебора ~3000M итераций на cpu-i7-4770, на GPU перевести не успел задача решилась раньше :-) Решение задачи найдено часов за 5 вместо первоначальных ~30 суток. Нихрена себе! Моя программа ищет матрицу ну минут 5, может 6, но не 5 часов - это ваще капец Цитата(SKov @ Jan 29 2016, 01:07) Это правильно. Просто участники диспута, задающие вопрос об эквивалентных кодах, путают понятия эквивалентных кодов и эквивалентых проверочных матриц для одного и того же кода. Еще народ совершенно зря кошмарит бедного студента по поводу нахождения разреженной матрицы LDPC кода. На самом деле бедному студенту нафиг не нужен код в разреженном виде (хоть студень, возможно, об этом и не подозревает ). Похоже, что народ кроме BP и MIN-SUM алгоритмов уже ничего не может сделать с LDPC. Эх, молодежь.. ) Для данного случая вполне подойдет декодирование по информационным совокупностям с покрывающими полиномами небольшого веса. В простонародье этот метод называется OSD и он дает вполне приличные результаты именно в хорошем канале. (интересующимся - гугл в помощь). Сильно сомневаюсь в универсальности вашего метода для восстановления сколь-нибудь длинных и сколь-нибудь тяжелых разреженных матриц, пригодных для традиционных методов декодирования LDPC. На самом деле вам надо решать задачу нахождения слов минимального веса в двойственном коде, и из этих слов лепить матрицу. Это трудно.. Хотя, для малых длин и очень разреженных матриц... может быть. То что ты тут понаписал очень здорово, но на все отвечать нет времени. Не такой я глупый, чтобы не знать о разряженности. Матрицу получил пораждающую и прорядил, не переживай. По поводу алгоритма - ты можешь плеваться и понтоваться, на ПК для декодирования в лдпс в реальном времени подходит только один алгориьм и только с разряженной матрицей. Даде уточню - на процессоре. На 1. Да и нахрена использовать какие то гавеные алгоритмы если есть старые добрые? Цитата(SKov @ Jan 29 2016, 07:44) В первом сообщении : 2.1 если это LDPC код - то он систематический. Если исходный код был систематический (в классическом смысле, как я описал выше), то обязательно удастся Честно говоря, не встречал информационные биты, рассыпанные как попало по слову. Обычно или в начале или в конце. Ну, спорить не буду, всякое в жизни бывает Почитайте как строятся flex ldpc и fast link ldpc. Там инфа рассыпана по слову перемешана с проверками Цитата(andyp @ Jan 6 2016, 23:31) Ну так и я про это. ТСу хочется странного. Я все сделал ты не переживай, а что такое ТС? Тупой студент? Цитата(smoke_111 @ Jan 7 2016, 20:43) Проблема в том что даже если вы получите матрицу в систематическом виде, с учётом сигнал шум 22 db это наверно даже возможно, вы как приведёте проверочную матрицу к низкоплотностному виду? А используя проверочную матрицу в систематическом виде о декодирование ldpc кода говорить сложно, поскольку исходные свойства графа будут полностью разрушены. Турбо-коды и правда легко ломаются подобным образом. Наверно это как то можно сделать, но я навскидку не знаю, надо идти читать) Да ещё один нюанс, проверочные матрицы квазициклических ldpc, часто бывают с линейно зависимыми строками, то есть, появляется ещё одна неопределённость. Правда интересно, если сделаете это ссылками на инфу поделитесь, пожалуйста. Да все получилось, ссылок нету есть все на компе могу скинуть кусок потока и полученные матрицы g и h в каноне и разряженную h. Декодер написал жесткий bf. Пробовал abp, но он тока под плисину пошел, на pc ну очень уж долго хреначит
  2. Цитата(Cat-S @ Dec 6 2016, 19:10) Добрый день! В стандарте ETSI EN 302 307 V1.2.1 (2009-08) в пункте 5.3.2 приведен метод генерации проверочной матрицы H, но отсутствует метод генерации порождающей матрицы G. Проверочная матрица с двойной диагональю, т.е. метод конструирования порождающей матрицы, приведенный во всех книжках: H=[A I n-k ], G =[I k | A t ] не подходит. (I- единичная матрица) Саму порождающую матрицу удалось вытащить из МАТLAB, но нужен именно способ генерации порождающей матрицы G. Подскажите, пожалуйста, алгоритм или книги-статьи, в которых этот метод описан. Если еще актуально, то вкратце попробую... Проверочная матрица с двойной диагональю - это разряженная проверочная матрица, получается путем линейных операций над строками проверочной матрицы в каноническом виде. Делается это для того, чтобы уменьшить кол-во единиц в матрице. Так то можно проверять и по канонической матрице - но единиц там слишком много - кол-во операций возрастает прямо пропорционально кол-ву единиц. Получить из разряженной матрицы каноническую - не знаю как. Из цифрового потока можно получить порождающую матрицу в каноническом виде
  3. Цитата(Corner @ Jan 8 2016, 16:51) Как это бывает в России. Преподаватель вынес на диплом задачку уровня кандидата наук, если не доктора... Авось, ТС выплывет и чтото придумает. Лучше помоги советом или просто направь в нужном направлении
  4. Цитата(Grizzzly @ Jan 6 2016, 18:41) Кстати, про фазу. У вас после демодуляции должен быть битовый поток - последовательность 0 и 1. Как вы могли подбирать фазу? В случае мягкой демодуляции на выходе последовательность LLR. Здесь тоже непонятно, как вы что-то делали с фазой. Сигнал записан простым спутниковым модемом, кажется CDM какой-то, на его выходе БИТОВЫЙ поток. Код оказался систематическим - явно можно отделить проверочную часть от информационной. Так как модуляция 4-х позиционная, то путем перебора удалось подобрать фазу путем проворота созвездия, отсюда же и удалось выяснить истинную преамбулу (уникальное слово). Конец повествованию. Цитата(andyp @ Jan 6 2016, 21:17) Вопрос не очень корректен по двум причинам: 1. Существует много линейных кодов, соответствующих одному и тому же набору кодовых слов (см. эквивалентные коды). Их порождающие матрицы могут быть получены линейными преобразованиями друг из друга. 2. В потоке может быть недостаточно кодовых слов, чтобы получить порождающую матрицу (на сколько я это представляю, должно быть как минимум n/2 линейно независимых кодовых слов в Вашем случае) Если 2 выполняется, то можно выписать кодовые слова в строки и с помощью линейных преобразований привести полученную матрицу к виду [I -P], I - единичная, размером n/2. Получите порождающую матрицу эквивалентного кода в стандартной форме. Ирония в том, что у LDPC в строках и столбцах должно быть не больше определенного количества единиц (ну или четко определенное количество, если код регулярный). Полученная матрица этому условию скорее всего удовлетворять не будет, так как про систематические LDPC коды что-то не слышно. Мало того, даже если и удастся найти матрицу, удовлетворяющую этому условию (для этого надо знать макcимальную связность (parity and chеck node degree)), то не факт, что найденный эквивалентный код соответствует исходному (он, например, может быть получен из исходного простой перестановкой строк порождающей матрицы). На практике нам давали записанный цифровой поток, который являл собой турбокод на базе компонентных кодов Хэмминга. К сожалению это было достаточно давно и параметры кода я не помню. Так вот что мы делали, коротко говоря мы выписали кодовые слова (не турбокода, а одного из кодов Хэмминга), зная длину кодового слова мы заполнили матрицу шириною, равной длине кодового слова и очень большой высоты. Затем складывая различные строки мы получили матрицу с диагональной информационной частью - это была порождающая матрица. Из нее мы получили порождающий полином и из него - проверочный. Подставив полученный полином в программу для декодирования - мы получили поток после декодирования. Поэтому я точно знаю, что параметры турбокода так можно определить и я даже подозреваю, что наш препод иногда делает работу для государства. Тем не менее, как он говорил - так он колонул не один код и сам писал декодеры для взломанных кодов. Почему же LDPC код так нельзя сделать? Получить матрицу с диагональной информационной частью можно или нельзя?
  5. Цитата(Grizzzly @ Jan 6 2016, 01:13) То есть вам априори ничего неизвестно о коде? Например, его скорость, длина блока и т.д. Это задача слепой идентификации кода. Смотреть статьи по темам "Blind Identification of LDPC Codes", "Identification of LDPC Codes" и т.д. Спасибо, что откликнулись! Совсем забыл про это написать! Скорость кода известна - 0.5. Длина кодового слова тоже известна, но так как у меня все данные в академии я не помню точно сколько - но длина блока известна. Соответственно мне надо написать декодер этого кода, а чтобы его написать надо получить матрицу.
  6. Всем привет. Пишу диплом. Нужна помощь следующего характера. Мой руководитель дал мне запись ЦИФРОВОГО ПОТОКА после демодуляции QPSK сигнала. Видна структура на периоде. Путем перебора удалось подобрать правильную фазу для устранения фазовой неоднозначности. Уровень сигнала при приеме 22 дБ - ошибок быть просто не должно! Теперь собственно вопрос - как получить проверочную или порождающую матрицу LDPC-кода из имеющегося потока? Я знаю, как определять параметры кодов Хэмминга - заполнить матрицу и получить диагональную. Это канает для всех блочных циклических кодов - для LDPC тоже?