Jump to content

    

Michael358

Участник
  • Content Count

    18
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Michael358

  • Rank
    Участник
  1. Декодер Витерби

    Делал на риск-ядре. Изменение разрядности особого прироста не дает. В дсп-ядре есть устройство сравнения, выбора и хранения. Если руки дойдут - попробую. Я вот ещё не понимаю по алгоритму. У меня метод registers exchange: в каждой итерации для каждого состояния из двух путей выбрал выживший, переписал его в выходной регистр, на следующем шаге сделал его входным и т.д. Метод trackback: для каждого состояния выбрали выживший путь, в регистр состояния записали номер состояния, из которого пришел выживший путь; достигнув нужной глубины, выбираем путь с лучшей метрикой, по запомненным переходам, следуя из конца в начало, восстанавливаем исходную последовательность. В литературе пишут, что trackback требует в два раза меньше памяти для путей, но в разы медленнее. Но, если входные данные идут непрерывным потоком: для кодера 1/2 (5,7) длина кодового ограничения К=3, пути сливаются на глубине примерно 5*К. Для метода registers exchange мне нужно для каждого пути 2 регистра (входной и выходной) размером 5*К. В каждой итерации в младшем разряде запоминаю декодированный бит, из старшего разряда выдаю результат декодирования. Т.к. на глубине 5*К все пути сливаются, то можно не искать из всех путей меньшую метрику, а всегда выдавать старший разряд первого пути. Итого для 4-х путей нужно 5*К*2*4= 120 бит. С trackback-ом: если в канале будут ошибки, то при выборе из четырех путей меньшего может быть несколько путей с одинаковой метрикой, которые до глубины 5*К не слились. Можно выбрать неправильно. Значит, надо уйти на глубину 2*(5*К)=10*К , запустить trackback, а результат выдать с 10*К по 5*К, где пути слились. Тут опять же получается, что можно не искать минимальный... Тогда для памяти путей нужно столько же бит, сколько при register exchange. 10*К*4=120 бит.
  2. Декодер Витерби

    На МК 1901ВЦ1Т при тактовой 80 МГц декодирование одной пары бит: - с поиском минимума = 9 микросекунд; - с модульной нормализацией = 7 мкс.
  3. Декодер Витерби

    Ну вот для своего декодера (1/2, К=3): разница метрик путей не превышает 3, и если взять на метрики только 4 бита, то сразу переполнения не происходит, и метрики бегают по кругу, и знаковое вычитание считается (проверил несолько значений...) видимо, надо... только из головы не идёт этот декодер
  4. Декодер Витерби

    Т.е. это для графического представления? И разве числа бегут не против часовой стрелки? Или это не имеет значения? UPD: а... 2 бита - это модуль = 2 * разрядность_метрик ?
  5. Декодер Витерби

    Спасибо большое. Практически всё понял, кроме следующих моментов: Беззнаковая - для жёсткого решения, знаковая - для мягкого? На 32-х битном проце можно ведь взять 8-битный тип? Не обязательно использовать 32 бита? Про квадранты не понял... как и для чего эти два бита используются?
  6. Декодер Витерби

    Спасибо. Мне уже стыдно, что никак не могу понять процесс. Но, если позволите, продолжу расспросы. Я вроде так и вибирал меньшую... Т.е. вычитаем М1-М2 и смотрим бит знака результата . Единица - верхний переход, ноль - нижний. Правильно? Когда надо считать по модулю? Я думал - складываем первую метрику с метрикой перехода и нормализуем результат по модулю, потом также со второй метрикой, а потом вычитаем нормализованные метрики и смотрим бит знака результата. Я, наверное, не понимаю, как работает сама модульная арифметика... 5 бит - это диапазон от 0 до 31... метрики будут бегать в этом диапазоне по кругу... дальше не понимаю, как их сравнивать при переполнениии одной из метрик...
  7. Декодер Витерби

    Что я делаю неправильно? (Это первый вариант с вычитанием)
  8. Декодер Витерби

    Спасибо. Правильно я понимаю, что: для кодера 1/2 (5,7) С=4. Метрика_i = (Метрика_пути + Метрика_ребра + С/2) (mod 4) - С/2; Если (Метрика_1 - Метрика_2) >= 0, то Метрика_состояния = Метрика_1; иначе Метрика_состояния = Метрика_2. ?
  9. Декодер Витерби

    А можете разъяснить, как именно? Или что почитать по этому поводу? Я начал читать про модульную арифметику. Но как её применить к метрикам - не соображу. Пишут, что надо брать метрики по модулю = 2 * максимальную разность метрик. Но что это даёт - не пойму.
  10. Декодер Витерби

    Спасибо. С этим разобрался. Скажите, а в чём выгода нормализации метрик по модулю? Разве вычитание не быстрее?
  11. Декодер Витерби

    Ну вот если передаются нули, то на каждом шаге декодирования в нулевое состояние приходит нулевой путь и путь с большей метрикой из другого состояния. Сначала выжившим будет выбираться нулевой путь, а метрики остальных состояний будут расти. Но когда метрика другого состояния переполнится, в этот момент в нулевое состояние придут два пути с метрикой = 0. И можно выбрать неправильный путь.
  12. Декодер Витерби

    Не разберусь, как правильно нормализовывать метрики. Допустим, всегда передаются нули. Тогда метрика нулевого состояния декодера всегда будет равна нулю, а остальные метрики будут постоянно увеличиваться. И если вычитать минимальную метрику (т.е. ноль) из всех, то переполнения метрик не избежать.
  13. Декодер Витерби

    Т.е. сообразить функцию моделирования шума для своего декодера и посчитать количество ошибок?
  14. Декодер Витерби

    Придётся. Спасибо. А как правильно оценить работу своего декодера(с чем сравнивать матлабовские результаты)?
  15. Декодер Витерби

    Не сравнивал. С матлабом дел не имел. Не могу разобраться, как оценить BER своего декодера.