|
|
  |
Быстрое сжатие без потерь, реализация в FPGA |
|
|
|
Feb 14 2008, 06:56
|

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
Как Вам такой вариант? (работает для гладких сигналов) Исходные данные - 16 бит/отсчёт АЦП Измеренные значения (для 1 канала): N0, N1, N2, N3, N4, N5, N6, N7 Вычисляем dN1 = N1 - N0 смотрим - помещается ли результат в 7 бит (с учетом знака). Если dN1 не помещается, то округляем N1 до старших 7 бит N1 = r[N1; 15..9], приравниваем dN1 округлённому значению N1 и взводим для dN1 флаговый 8-ой бит абсолютного значения в единичку aN1 = 1. Вычисляем dN2 = N2 - N1 и так далее, причём здесь используем уже округлённое значение N1, если оно является таковым. Получаем последовательность: N0[15..0], aN1[15]..dN1[14..8]..aN2[7]..dN2[6..0], aN3[15]... и т.д. Вычисляем CRC8 для всего этого, если нужно, и помещаем его в слово: aN7[15]..dN7[14..8]..CRC8[7..0] Передаём эту последовательность. Приёмник получает данные: N0 - запомнил, aN1 - по нему смотрит что передано - приращение от N0 до N1 или старшая часть N1. Если aN1 == 0, то N1 = N0 + dN1 Иначе N1 = dN1 * 256 aN2... N2 = N1 + dN2 или N2 = dN2 * 256 и т.д. --- Если сигнал гладкий и приращения укладываются в 7 бит, то потерь не будет вообще. Если же на каком-то интервале есть резкий перепад сигнала, то будут потери только на округление этого отсчёта. Последующие данные будут переданы без потерь. Таким образом: исходные данные 128 бит. переданные (с учетом CRC8) 80 бит. Сжатие в 1,6 раза для 8 отсчетов по 16 бит.
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Feb 14 2008, 07:06
|
Знающий
   
Группа: Свой
Сообщений: 642
Регистрация: 15-11-07
Пользователь №: 32 353

|
Степень сжатия в существенной степени зависит от структуры сигнала. Если архиватором не удастся ничего сделать (а это скорее всего), то без потери ничего не получится. Все остальные методы приводят либо к потере качества (типа АДИКМ и т.п.) либо к расширению аппаратных средств (переход на PCI-E, распараллеливание на несколько устройств и т.п.). Необходим предварительный анализ сигнала. P.S.: Попробуйте сжать сигнал со входа звуковой карточки  ... Вывод: для сигнала со случайной структурой необходиомо дополнительное аппаратное расширение
--------------------
Правильно сформулированый вопрос содержит в себе половину ответа. P.S.: Некоторые модераторы в качестве ответа так навязчиво предлагают посетить свой сайт, что иначе как саморекламу такие действия интерпретировать сложно.
|
|
|
|
|
Feb 14 2008, 10:42
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Спасибо всем! Немного уточню - 62.5 Mhz 16 bit sample 2 chanel = 250 Mbyte/sec. Нереальное сжатие архиваторами дает в среднем ~25 % сжатия. Из этого и возникла эта задача. Переползти на PCIe проще но дороже, а у радиоастрономов (умище у них будь здоров, но уж больно специфичный  ) уже слюнки текут от превкушения лишних 500 гиг данных в час. И надо вроде чуть-чуть ужат, вот и просят слезно. Тем более из всего спектра 0-31 МНz рабочими есть 8-30. Была мысль сдвинуть чуток по частоте вниз и сделать ресемплинг - так нет, просять данные не "портить". Анализ показывает что данные представляют собой слабые шумоподобные сигналы на фоне сильных узкополосных помех. Полазив в инете нашел несколько названий упаковщиков wav формата без потерь - FLAC, WavePac, ... хочу попробовать на реальных данных, но разбиратся с эффективностью реализации всего долго. Поэтому и рад любой информации. Удачи! Rob.
|
|
|
|
|
Feb 14 2008, 11:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(RobFPGA @ Feb 14 2008, 13:42)  Анализ показывает что данные представляют собой слабые шумоподобные сигналы на фоне сильных узкополосных помех. А нельзя вырезать куски, где помеха, раз она полностью глушит сигнал? Это раз. После этого окажется, что слабый сигнал занимает не весь динамический диапазон, и его (динамического диапазона) сжатие даст дополнительный выигрыш. Думая так, конечно сразу появляется желание усилить сигнал до АЦП, чтобы полезный сигнал занял весь динамический диапазон, а помеха ушла в насыщение.  Сделав так, можно поставить АЦП уже на 10-12 бит, и все будет хорошо.
|
|
|
|
|
Feb 14 2008, 11:47
|

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
Если шумы узкополосные, то имеет смысл заложить 3-4 режекторных фильтра в ПЛИС со сменными коэффициентами. Коэффициенты для каждой частоты рассчитываются в МатЛабе. Загружаются в ПЛИСку программно по PCI. Сигнал фильтруется, помехи вырезаются, а всё, что осталось - ужимается и на выход. Привожу пример результата работы подобного фильтра. Кстати, фазовые задержки нетронутых фильтром компонент остались взаимно неизменными. Умными словами если, то время групповой задержки близко к нулю.
Эскизы прикрепленных изображений
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Feb 14 2008, 11:59
|

Эксперт
    
Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183

|
Цитата(RobFPGA @ Feb 14 2008, 13:42)  Приветствую! Спасибо всем! Немного уточню - 62.5 Mhz 16 bit sample 2 chanel = 250 Mbyte/sec. Нереальное сжатие архиваторами дает в среднем ~25 % сжатия. Из этого и возникла эта задача. Переползти на PCIe проще но дороже, а у радиоастрономов (умище у них будь здоров, но уж больно специфичный  ) уже слюнки текут от превкушения лишних 500 гиг данных в час. И надо вроде чуть-чуть ужат, вот и просят слезно. Тем более из всего спектра 0-31 МНz рабочими есть 8-30. Была мысль сдвинуть чуток по частоте вниз и сделать ресемплинг - так нет, просять данные не "портить". Анализ показывает что данные представляют собой слабые шумоподобные сигналы на фоне сильных узкополосных помех. Полазив в инете нашел несколько названий упаковщиков wav формата без потерь - FLAC, WavePac, ... хочу попробовать на реальных данных, но разбиратся с эффективностью реализации всего долго. Поэтому и рад любой информации. Удачи! Rob. Существует очень хороший компрессор аудио без потерь Monkey's audio в open source http://www.monkeysaudio.com/Однако, думаю, Вы попали... Во-первых без потерь можно сжимать сигнал с характерной статистикой - что хорошо для аудио, для астро - смерть. Даже для сверхзвука смерть. Только для музона и хорошо. Во-вторых, эти компрессоры слишком сложны алгоритмически для реализации типа в FPGA Кажется нужно смотреть какие именно потери допустимы
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|