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

    

Матричный анализ кодов

Всем привет. Пишу диплом. Нужна помощь следующего характера. Мой руководитель дал мне запись ЦИФРОВОГО ПОТОКА после демодуляции QPSK сигнала. Видна структура на периоде. Путем перебора удалось подобрать правильную фазу для устранения фазовой неоднозначности. Уровень сигнала при приеме 22 дБ - ошибок быть просто не должно!

 

Теперь собственно вопрос - как получить проверочную или порождающую матрицу LDPC-кода из имеющегося потока?

 

Я знаю, как определять параметры кодов Хэмминга - заполнить матрицу и получить диагональную. Это канает для всех блочных циклических кодов - для LDPC тоже?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Теперь собственно вопрос - как получить проверочную или порождающую матрицу LDPC-кода из имеющегося потока?

 

То есть вам априори ничего неизвестно о коде? Например, его скорость, длина блока и т.д. Это задача слепой идентификации кода. Смотреть статьи по темам "Blind Identification of LDPC Codes", "Identification of LDPC Codes" и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
То есть вам априори ничего неизвестно о коде? Например, его скорость, длина блока и т.д. Это задача слепой идентификации кода. Смотреть статьи по темам "Blind Identification of LDPC Codes", "Identification of LDPC Codes" и т.д.

Спасибо, что откликнулись!

Совсем забыл про это написать! Скорость кода известна - 0.5. Длина кодового слова тоже известна, но так как у меня все данные в академии я не помню точно сколько - но длина блока известна.

Соответственно мне надо написать декодер этого кода, а чтобы его написать надо получить матрицу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спасибо, что откликнулись!

Совсем забыл про это написать! Скорость кода известна - 0.5. Длина кодового слова тоже известна, но так как у меня все данные в академии я не помню точно сколько - но длина блока известна.

 

Так уже лучше, но все равно таких матриц может быть очень много. Задача идентификации, как вы понимаете, весьма непростая.

 

Кстати, про фазу. У вас после демодуляции должен быть битовый поток - последовательность 0 и 1. Как вы могли подбирать фазу?

 

В случае мягкой демодуляции на выходе последовательность LLR. Здесь тоже непонятно, как вы что-то делали с фазой.

Изменено пользователем Grizzzly

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Кстати, про фазу. У вас после демодуляции должен быть битовый поток - последовательность 0 и 1. Как вы могли подбирать фазу?

Наверное, по преамбуле

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Теперь собственно вопрос - как получить проверочную или порождающую матрицу LDPC-кода из имеющегося потока?

 

Вопрос не очень корректен по двум причинам:

1. Существует много линейных кодов, соответствующих одному и тому же набору кодовых слов (см. эквивалентные коды). Их порождающие матрицы могут быть получены линейными преобразованиями друг из друга.

2. В потоке может быть недостаточно кодовых слов, чтобы получить порождающую матрицу (на сколько я это представляю, должно быть как минимум n/2 линейно независимых кодовых слов в Вашем случае)

 

Если 2 выполняется, то можно выписать кодовые слова в строки и с помощью линейных преобразований привести полученную матрицу к виду [i -P], I - единичная, размером n/2. Получите порождающую матрицу эквивалентного кода в стандартной форме. Ирония в том, что у LDPC в строках и столбцах должно быть не больше определенного количества единиц (ну или четко определенное количество, если код регулярный). Полученная матрица этому условию скорее всего удовлетворять не будет, так как про систематические LDPC коды что-то не слышно. Мало того, даже если и удастся найти матрицу, удовлетворяющую этому условию (для этого надо знать макcимальную связность (parity and chеck node degree)), то не факт, что найденный эквивалентный код соответствует исходному (он, например, может быть получен из исходного простой перестановкой строк порождающей матрицы).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Вопрос не очень корректен по двум причинам:

1. Существует много линейных кодов, соответствующих одному и тому же набору кодовых слов (см. эквивалентные коды). Их порождающие матрицы могут быть получены линейными преобразованиями друг из друга.

2. В потоке может быть недостаточно кодовых слов, чтобы получить порождающую матрицу (на сколько я это представляю, должно быть как минимум n/2 линейно независимых кодовых слов в Вашем случае)

 

Если 2 выполняется, то можно выписать кодовые слова в строки и с помощью линейных преобразований привести полученную матрицу к виду [i -P], I - единичная, размером n/2. Получите порождающую матрицу эквивалентного кода в стандартной форме. Ирония в том, что у LDPC в строках и столбцах должно быть не больше определенного количества единиц (ну или четко определенное количество, если код регулярный). Полученная матрица этому условию скорее всего удовлетворять не будет, так как про систематические LDPC коды что-то не слышно. Мало того, даже если и удастся найти матрицу, удовлетворяющую этому условию (для этого надо знать макcимальную связность (parity and chеck node degree)), то не факт, что найденный эквивалентный код соответствует исходному (он, например, может быть получен из исходного простой перестановкой строк порождающей матрицы).

на мой взгляд это не реально из потока софт LLR восстановить H матрицу, особенно для больших матриц (количество chack node более тысячи), к тому же irregular

Честно не могу представить как это будет выглядеть, если H матрица изначальна не известна

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
на мой взгляд это не реально из потока софт LLR восстановить H матрицу, особенно для больших матриц (количество chack node более тысячи), к тому же irregular

Честно не могу представить как это будет выглядеть, если H матрица изначальна не известна

 

Ну так и я про это. ТСу хочется странного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Кстати, про фазу. У вас после демодуляции должен быть битовый поток - последовательность 0 и 1. Как вы могли подбирать фазу?

 

В случае мягкой демодуляции на выходе последовательность LLR. Здесь тоже непонятно, как вы что-то делали с фазой.

Сигнал записан простым спутниковым модемом, кажется CDM какой-то, на его выходе БИТОВЫЙ поток. Код оказался систематическим - явно можно отделить проверочную часть от информационной. Так как модуляция 4-х позиционная, то путем перебора удалось подобрать фазу путем проворота созвездия, отсюда же и удалось выяснить истинную преамбулу (уникальное слово). Конец повествованию.

 

Вопрос не очень корректен по двум причинам:

1. Существует много линейных кодов, соответствующих одному и тому же набору кодовых слов (см. эквивалентные коды). Их порождающие матрицы могут быть получены линейными преобразованиями друг из друга.

2. В потоке может быть недостаточно кодовых слов, чтобы получить порождающую матрицу (на сколько я это представляю, должно быть как минимум n/2 линейно независимых кодовых слов в Вашем случае)

 

Если 2 выполняется, то можно выписать кодовые слова в строки и с помощью линейных преобразований привести полученную матрицу к виду [i -P], I - единичная, размером n/2. Получите порождающую матрицу эквивалентного кода в стандартной форме. Ирония в том, что у LDPC в строках и столбцах должно быть не больше определенного количества единиц (ну или четко определенное количество, если код регулярный). Полученная матрица этому условию скорее всего удовлетворять не будет, так как про систематические LDPC коды что-то не слышно. Мало того, даже если и удастся найти матрицу, удовлетворяющую этому условию (для этого надо знать макcимальную связность (parity and chеck node degree)), то не факт, что найденный эквивалентный код соответствует исходному (он, например, может быть получен из исходного простой перестановкой строк порождающей матрицы).

На практике нам давали записанный цифровой поток, который являл собой турбокод на базе компонентных кодов Хэмминга. К сожалению это было достаточно давно и параметры кода я не помню. Так вот что мы делали, коротко говоря мы выписали кодовые слова (не турбокода, а одного из кодов Хэмминга), зная длину кодового слова мы заполнили матрицу шириною, равной длине кодового слова и очень большой высоты. Затем складывая различные строки мы получили матрицу с диагональной информационной частью - это была порождающая матрица. Из нее мы получили порождающий полином и из него - проверочный. Подставив полученный полином в программу для декодирования - мы получили поток после декодирования.

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

Почему же LDPC код так нельзя сделать? Получить матрицу с диагональной информационной частью можно или нельзя?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема в том что даже если вы получите матрицу в систематическом виде, с учётом сигнал шум 22 db это наверно даже возможно, вы как приведёте проверочную матрицу к низкоплотностному виду? А используя проверочную матрицу в систематическом виде о декодирование ldpc кода говорить сложно, поскольку исходные свойства графа будут полностью разрушены. Турбо-коды и правда легко ломаются подобным образом. Наверно это как то можно сделать, но я навскидку не знаю, надо идти читать)

Да ещё один нюанс, проверочные матрицы квазициклических ldpc, часто бывают с линейно зависимыми строками, то есть, появляется ещё одна неопределённость. Правда интересно, если сделаете это ссылками на инфу поделитесь, пожалуйста.

Изменено пользователем smoke_111

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как это бывает в России. Преподаватель вынес на диплом задачку уровня кандидата наук, если не доктора... Авось, ТС выплывет и чтото придумает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Как это бывает в России. Преподаватель вынес на диплом задачку уровня кандидата наук, если не доктора...

А что в этом плохого, или лучше когда все темы из года в год повторяются и весь процесс написания диплома сводится к банальной распечатке предыдущих лет? Понятно, что уровень кандидатской на порядок выше дипломной работы, но никто, думаю, не будет требовать со студента невозможного, можно решить проблему частично и вдруг эти материалы затем лягут в основу будущей диссертации, чем черт не шутит. Другое дело, если руководитель какой-то свой шкурный интерес в этом преследует...

Изменено пользователем Serg76

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Как это бывает в России. Преподаватель вынес на диплом задачку уровня кандидата наук, если не доктора... Авось, ТС выплывет и чтото придумает.

Лучше помоги советом или просто направь в нужном направлении

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вопрос в дипломе именно в такой постановке, то всё, что требуется - это

- указать метод - например, constrained brute force attack (простой перебор по ограниченному множеству)

- приблизительно оценить ограничения

- оценить, сколько времени потребуется на нахождение матрицы на современном уровне техники и при разумных затратах.

 

Это будет исчерпывающим ответом на вопрос "как": указан метод получения результата, указаны ресурсы.

 

Пишу диплом.

 

Теперь собственно вопрос - как получить проверочную или порождающую матрицу LDPC-кода из имеющегося потока?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация