Добрый день,
имеется незадачка, а именно имею на входе с десяток оцифрованных сигналов сумм комплексных экспонент, с амплитудами и фазами, которые медленно меняются относительно скорости оцифровки. Грубо говоря, оцифровываю на 25 мегасемплов в секунду, имею 10 каналов, в каждом - комплексная пара этой суммы:
и
медленно меняются на
- правда они могут и скачками меняться, но есть много протяженных участков с постоянной производной или самим значением.
- в военное время достигает нескольких сотен. Более того, во времени, бывает, что какая-то экспонента из суммы пропадает или появляется новая. Сигнал так устроен...
Если его в лоб оцифровать и не обрабатывать, то при 25 мегасемплах, 10 каналах, двух парах на канал и двух байтах на оцифрованный сигнал имеем 1ГБайт/с трафика - он у меня попадает на плиску (FPGA) и тут его хотелось бы пожать. Также есть и шум, который состоит или из очень слабых экспонент или случайного шума. Шум, понятно, не нужен. Сигнал/шум может в военное время быть меньше единицы :(
Между каналами обычно
и
только незначительно отличаются, но нет четкой зависимости. Грубо говоря, эпсилон ранг 10 столбцов с оцифрованными каналами существенно меньше 10 на почти всех коротких промежудках, но даже если это использовать, то компрессия будет только в 2-3 раза.
Если смоделировать сигнал и взять только сами
и
, то каждая меняется на столько медленно, что их можно сохранять с объемом меньше килобайта информации на каждую функцию, то есть реальная информативность потока до мегабайта в секунду, то есть можно сжимать мой поток в 1000 раз без существенных потерь информации.
Хочу как-тот аппроксимировать этот поток, чтобы не потерять суть, но все-таки не тащить гигабайт в секунду.
На ум приходит идея:
оцифровываем блок например на 16К отсчетов, делаем Фурье, если есть четко выраженные пики (амплитуда и экспонента стоят на месте) их сохраняем. Вычитаем из этого Фурье, и делаем обратное преобразование.
Далее остаток сравниваем с несколькими аналогичными блоками и пытаемся аппроксимировать такие блоки друг за другом малым рангом.
На симулированных данных более-менее проходит, но алгоритм на плиску не лезет, ни по скорости, ни по производительности.
Есть подозрение, что аналогичная задача (возможно в какой-то схожей формулировке) имеет место или в области обработки звука, или изображения, но как-то не нашел с ходу аналогий.
Вдруг у кого-то есть идеи, как такое может называться или статьи или ссылки, пожалуйста, посоветуйте!
Спасибо!