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

 
 
9 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Быстрое сжатие без потерь, реализация в FPGA
RobFPGA
сообщение Feb 14 2008, 00:34
Сообщение #1


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Озадачили меня вот такой задачкой

Требуется в реалтайме, без потерь, ужать поток данных с двухканального АЦП с 250 Mb/sec
хотя бы до 200 Mb/sec. Так как на плате узкое место - PCI контроллер имеет максимум 240 Mb/sec.
Проблема усугубляется тем что сами данные - "музыка звездного неба" даные радиотелескопа с полосой 8-30 MHz (частота оцифровки 62 МНz).

Из доступных ресурсов - часть Virtex4, DSP 6416 плюс RAM на 2 секунды полета.

Беглый обзор вариантов компресии определенности не принес.
Подскажите - в какую сторону копать. Есть ли где примеры (реализации) подобного.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
eugen_pcad_ru
сообщение Feb 14 2008, 06:14
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 642
Регистрация: 15-11-07
Пользователь №: 32 353



Рекомендую:
Попробуйте сжать такой объем данных в постреальном режиме времени любым архиватором.
Если сжатие получится приличное, то имеет смысл рассматривать вопрос дальше.
Если нет (скажем, ужмет на 10-20%), то ничего без потери качества у Вас не выйдет.


--------------------
Правильно сформулированый вопрос содержит в себе половину ответа.
P.S.: Некоторые модераторы в качестве ответа так навязчиво предлагают посетить свой сайт, что иначе как саморекламу такие действия интерпретировать сложно.
Go to the top of the page
 
+Quote Post
slog
сообщение Feb 14 2008, 06:33
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



А не проще PCI заменить на PCI-E?


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Feb 14 2008, 06:53
Сообщение #4


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

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Что-то у меня арифметика не сходится: частота оцифровки 62МГц, а с двух каналов получается 250 мегабод? Двухразрядный АЦП, что ли?
Go to the top of the page
 
+Quote Post
litv
сообщение Feb 14 2008, 06:54
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 6-10-04
Из: Воронеж
Пользователь №: 806



Сжатие же нужно ГАРАнтированное. Вдруг данные примут другой вид, плохосжимаемый(чисто обнаружен НЛО), и данные опять не вошли в полосу ?
Может такую идею - сделайте БПФ в ПЛИС. На время расчета БПФ пишите из буфера. Раза в два можно гарантированно снизить поток выходных данных. Кстати если вычислить БПФ до значения с логарифмом - вообще 8 бит хватит на выходе(типа 256 дБ).
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Feb 14 2008, 06:56
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 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 бит.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
eugen_pcad_ru
сообщение Feb 14 2008, 07:06
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 642
Регистрация: 15-11-07
Пользователь №: 32 353



Степень сжатия в существенной степени зависит от структуры сигнала.
Если архиватором не удастся ничего сделать (а это скорее всего), то без потери ничего не получится.
Все остальные методы приводят либо к потере качества (типа АДИКМ и т.п.) либо к расширению аппаратных средств (переход на PCI-E, распараллеливание на несколько устройств и т.п.).
Необходим предварительный анализ сигнала.

P.S.: Попробуйте сжать сигнал со входа звуковой карточкиwink.gif...
Вывод: для сигнала со случайной структурой необходиомо дополнительное аппаратное расширение


--------------------
Правильно сформулированый вопрос содержит в себе половину ответа.
P.S.: Некоторые модераторы в качестве ответа так навязчиво предлагают посетить свой сайт, что иначе как саморекламу такие действия интерпретировать сложно.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Feb 14 2008, 07:53
Сообщение #8


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Ответ рабоче-крестьянский (отталкиваясь от аппаратуры):
Попробуйте на ПЛИС реализовать ITU-T v42bis. (Можно украсть у Mentor: есть на ftp) Только сначала в оффлайне протестируйте на модели, но с большим объемом реальных данных и с фиксацией макс. выходного потока.

Ответ более научный (отталкиваясь от задачи):
Видимо тот, кто Вас это попросил, человек не слишком большого ума.

Успехов.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Feb 14 2008, 10:42
Сообщение #9


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Спасибо всем!

Немного уточню - 62.5 Mhz 16 bit sample 2 chanel = 250 Mbyte/sec.
Нереальное сжатие архиваторами дает в среднем ~25 % сжатия.
Из этого и возникла эта задача. Переползти на PCIe проще но дороже,
а у радиоастрономов (умище у них будь здоров, но уж больно специфичный smile.gif ) уже слюнки текут от превкушения лишних 500 гиг данных в час. И надо вроде чуть-чуть ужат, вот и просят слезно.
Тем более из всего спектра 0-31 МНz рабочими есть 8-30. Была мысль сдвинуть чуток по частоте вниз и сделать ресемплинг - так нет, просять данные не "портить".
Анализ показывает что данные представляют собой слабые шумоподобные сигналы на фоне
сильных узкополосных помех.
Полазив в инете нашел несколько названий упаковщиков wav формата без потерь - FLAC, WavePac, ...
хочу попробовать на реальных данных, но разбиратся с эффективностью реализации всего долго. Поэтому и рад любой информации.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Feb 14 2008, 11:44
Сообщение #10


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

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(RobFPGA @ Feb 14 2008, 13:42) *
Анализ показывает что данные представляют собой слабые шумоподобные сигналы на фоне
сильных узкополосных помех.

А нельзя вырезать куски, где помеха, раз она полностью глушит сигнал? Это раз. После этого окажется, что слабый сигнал занимает не весь динамический диапазон, и его (динамического диапазона) сжатие даст дополнительный выигрыш.
Думая так, конечно сразу появляется желание усилить сигнал до АЦП, чтобы полезный сигнал занял весь динамический диапазон, а помеха ушла в насыщение. smile.gif Сделав так, можно поставить АЦП уже на 10-12 бит, и все будет хорошо.
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Feb 14 2008, 11:47
Сообщение #11


Знающий
****

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



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


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
AsJohnAs
сообщение Feb 14 2008, 11:52
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 14-07-05
Из: Санкт-Петербург
Пользователь №: 6 793



Ну я присоеденюсь ко всему выше сказанному. Если сигнал имеет равномерную плотность вероятности то его сжатие без потерь не возможно.
Вы можете произвести такой эксперимент: Возьмите ПСП ну не очень большой длинны. И запишите его в файл N раз. Потом этот файл сожмите ну например RAR то он сожметься ровно в N раз.

Так что выкусывайте помеху, уменьшайте битность, логарифмируйте, беритие FFT все что угодно что является с потерями. Другого теория не дает.
Go to the top of the page
 
+Quote Post
fontp
сообщение Feb 14 2008, 11:59
Сообщение #13


Эксперт
*****

Группа: Свой
Сообщений: 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 проще но дороже,
а у радиоастрономов (умище у них будь здоров, но уж больно специфичный smile.gif ) уже слюнки текут от превкушения лишних 500 гиг данных в час. И надо вроде чуть-чуть ужат, вот и просят слезно.
Тем более из всего спектра 0-31 МНz рабочими есть 8-30. Была мысль сдвинуть чуток по частоте вниз и сделать ресемплинг - так нет, просять данные не "портить".
Анализ показывает что данные представляют собой слабые шумоподобные сигналы на фоне
сильных узкополосных помех.
Полазив в инете нашел несколько названий упаковщиков wav формата без потерь - FLAC, WavePac, ...
хочу попробовать на реальных данных, но разбиратся с эффективностью реализации всего долго. Поэтому и рад любой информации.

Удачи! Rob.


Существует очень хороший компрессор аудио без потерь Monkey's audio в open source
http://www.monkeysaudio.com/

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

Кажется нужно смотреть какие именно потери допустимы
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Feb 14 2008, 12:09
Сообщение #14


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

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(RobFPGA @ Feb 14 2008, 03:34) *
Требуется в реалтайме, без потерь, ужать поток данных с двухканального АЦП с 250 Mb/sec
хотя бы до 200 Mb/sec. Так как на плате узкое место - PCI контроллер имеет максимум 240 Mb/sec.

Тут вы перепутали мегабиты с мегабайтами (Mb - мегабит, MB - мегабайт). И в этом свете есть еще вопрос - у 32-х разрадного PCI на 33 МГц полоса примерно гигабод. У вас же заявлено два гигабода (240 мегабайт/с ~ 2 Гбит/с)- это либо 64 разряда, либо 66 МГц. И в этом случае переход на PCIe не кажется таким уж дорогим.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Feb 14 2008, 12:13
Сообщение #15


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



ИМХО раз полезный сигнал шумоподобный и малой амплитуды, то есть простые алгоритмы для сужения динамического диапазона передаваемых данных на коротких последовательностях. В зависимости от амплитуды можно легко и в 2 раза его ужимать. Без всяких FFT и прочих сложностей. Даже на вскидку в голове возникают множество разных идей.

ЗЫ. Любопытно ещё бы взглянуть на типичный кусочек данных размером с десяток килобайт.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th July 2025 - 13:54
Рейтинг@Mail.ru


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