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

Фильтр Калмана на ПЛИС

Задача следующая: требуется реализовать алгоритм настройки коэффициентов фильтра по Калману (или алгоритм Каламана с квадратным корнем). Частота следования посылок - 4 кГц.

Длина фильтра - 64;

Тактовая частота ПЛИС - 200 Мгц;

192 умножителя;

Внешняя память - 8 Мб;

Слышал, что есть готовые оптимизированные схемы, и даже не на один фильтр, а на несколько.

Видел ли кто-нибудь их вживую - очень надо.

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


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

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

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


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

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

На процессоре это уже реализовано - но проблема в том, что таких фильтров необходимо реализовать 360 штук. Естественно хотелось бы их запустить параллельно (или ставить с десяток процессоров).

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


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

На процессоре это уже реализовано - но проблема в том, что таких фильтров необходимо реализовать 360 штук. Естественно хотелось бы их запустить параллельно (или ставить с десяток процессоров).

У нас тоже Калман реализован на процессоре. Вероятно что у Вас есть модель фильтра написаной в Матлабе. Раз так, и Вам обязательно надо реализация в ПЛИС, посмотрите в сторону AccelDSP и System Generator. Первый реализуюет RTL впрямую из кода матлаба, а второй делает то же самое из блок-схем Simulink.

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


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

На процессоре это уже реализовано - но проблема в том, что таких фильтров необходимо реализовать 360 штук. Естественно хотелось бы их запустить параллельно (или ставить с десяток процессоров).
Ну, тут от размерностей матриц всё зависит, и от частоты апдэйта коэффициентов. Если не слишком велики - и на одном ЦСП все 360 штук реализовать можно.

А вот на ПЛИС как раз гимор будет, по-моему...

Есть вариант - ПЛИС + ЦСП. В ряде случаев такой подход даёт значительный выигрыш относительно ПЛИС или ЦСП по отдельности.

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


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

Раз так, и Вам обязательно надо реализация в ПЛИС, посмотрите в сторону AccelDSP и System Generator. Первый реализуюет RTL впрямую из кода матлаба, а второй делает то же самое из блок-схем Simulink.

 

Сюда можно добавить еще Synplify DSP.

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


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

На процессоре это уже реализовано - но проблема в том, что таких фильтров необходимо реализовать 360 штук. Естественно хотелось бы их запустить параллельно (или ставить с десяток процессоров).

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

 

Как вы будете подбирать способ масштабирования для целочисленной реализации фильтра калмана в аппаратуре? Или в каждом фильтре предполагается блок плавающей точки?

 

Если ФК-линейный то его коэффициенты можно рассчитать заранее и просто реализовать набор векторных БИХ фильтров с подгружаемыми коэффициентами из общего массива констант. Если же фильтр расширенный (в смысле extended), то для полноценной реализации требуется обращение матрицы, размерность которой равна размерности вектора состояния. Как в вашем случае это планируется реализовать?

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


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

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

 

Как вы будете подбирать способ масштабирования для целочисленной реализации фильтра калмана в аппаратуре? Или в каждом фильтре предполагается блок плавающей точки?

 

Если ФК-линейный то его коэффициенты можно рассчитать заранее и просто реализовать набор векторных БИХ фильтров с подгружаемыми коэффициентами из общего массива констант. Если же фильтр расширенный (в смысле extended), то для полноценной реализации требуется обращение матрицы, размерность которой равна размерности вектора состояния. Как в вашем случае это планируется реализовать?

 

Задача - прием сигналов с DMT-модуляцией.

Схема приема - потоновая коррекция (per-tone equalization)/

Почему так много фильтров - реализация схемы приема в прикрепленной статье.

Почему фильтр Калмана - обычный МНК, решетчатый корректор - не успевают сходиться за время настройки (треннинга).

Используемый ФК действительно линейный. Алгоритм настройки - "Фильтр Калмана с квадратным корнем (raised square root Kalman)" к сожалению статья только в печатном виде (но найти ее видимо не проблема).

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

Целочисленная арифметика: 16 бит - так уже реализовано на процессоре и это работает (один корректор), но его по всем вышеприведенным причинам маловато. Максимум, что получилось вставить в процессор - 50 фильтров.

 

vanacker01equalization.zip

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


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

Задача - прием сигналов с DMT-модуляцией.

Схема приема - потоновая коррекция (per-tone equalization)/

Почему так много фильтров - реализация схемы приема в прикрепленной статье.

Почему фильтр Калмана - обычный МНК, решетчатый корректор - не успевают сходиться за время настройки (треннинга).

vanacker01equalization.zip

 

Документ скачал - там 256 страниц. В каком разделе схему смотреть - поиск по слову kalman ничего не дал.

 

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

 

Вот про медленную сходимость обычного МНК по сравнению с калманом - не понятно. Если линейно оцениваются несколько стационарных параметров, то в этом случае калман - просто рекурсивная реализация линейной МНК-оценки. Или в связных задачах есть какое-то особенности?

 

В персоначальном сообщении вы написалчто длина фильтра - 64. Это размерность вектора состяния?

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


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

Документ скачал - там 256 страниц. В каком разделе схему смотреть - поиск по слову kalman ничего не дал.

Раздел 4 - Per Tone Equalization.

 

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

 

Вот это уже очень интересно! А какие методы расчета на этапе проектирования существуют. Буду признателен за ссылки, идеи и т.д.

Я просто с этими вещами ни разу не сталкивался. Да и физика немного не понятна.

Ведь сигнал сигналу - рознь. Каналы передачи данных - все разные (разные АЧХ, соответственно разные импульсные характеристики - а ведь фильтр Каламана как раз и оценивает эту характеристику, точнее получает обратную характеристику канала, кроме того разные шумы - соответственно разные матрицы дисперсий(ковариаций))

На этапе "прозвонки" канала я настраиваю свои фильтры - полным алгоритмом - то есть я уверен, что

система адаптируется под конкретный канал.

То есть непонятно как выбирать эти коэффициенты усиления в зависимости от канала. Хотелось бы с Вашей помощью разобраться с этим вопросом - это ведь будет действительно прорыв.

 

Вот про медленную сходимость обычного МНК по сравнению с калманом - не понятно. Если линейно оцениваются несколько стационарных параметров, то в этом случае калман - просто рекурсивная реализация линейной МНК-оценки. Или в связных задачах есть какое-то особенности?

 

Да, особенности есть.

Быструю сходимость Калману обеспечивает следующая вещь:

сигнал подстройки коэффициентов (ошибка) не одна и та же на каждый коэффициент (как в МНК).

Она еще домножается на индивидуальный коэффициент усиления для каждого коэффициента.

Этот коэффициент как раз и расчитывается при помощи матрицы ковариаций.

То есть алгоритм учитывает вклад каждого входного символа в текущую ошибку.

Да... ну, как смог.

 

А вот по качество сходимости они одинаковы.

 

В персоначальном сообщении вы написалчто длина фильтра - 64. Это размерность вектора состяния?

Да это размерность вектора состояния (длина импульсной характеристики канала)

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


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

Вот это уже очень интересно! А какие методы расчета на этапе проектирования существуют. Буду признателен за ссылки, идеи и т.д.

 

Насколько я понимаю, у Вас речь идет не про обычный фильтр Калмана, а про QR-RLS эквалайзер. Для него параметры модели задаются принятым сигналом, в отличие от "нормальных" фильтров Калмана, в которых параметры модели известны заранее. Поэтому не думаю, что можно что-то просчитать до принятия сигнала :)

 

Покопайте Хайкина "Adaptive filter theory". У него описано несколько быстрых вариантов RLS алгоритма.

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


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

Раздел 4 - Per Tone Equalization.

Посмотрел - без подготовки не смог самостоятельно выделить из написанных формул уравнение состояния и уравнение наблюдения.

 

Методы рассчета коэффициентов линейного фильтра до его запуска просты. Если посмотрите на уравнения линейного ФК в общем виде, то выражения для коэффициента усиления и апостериорной ковариационной матрицы зависят только от предыдущих ковариационных матриц, но не зависят от текущего измерения или состояния. Поэтому алгоритм можно запустить только на рассчет коэффицинта усиления без каких-либо измерений, и сохранить результаты для последующего использования. Все это работает, как уже было отмечено, в случае когда матрицы состояния, наблюдения и шумов не зависят ни от текущего состояния системы ни от текущих измерений.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...