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

Fir Compiler 7.2 Как сделать, чтоб количество DSP48 не зависило от значений коэффициентов?

Пытаюсь использовать в своём проекте готовый IP блок от Xilinx, а именно  Fir Compiler 7.2

 

Пытаюсь реализовать несколько симметричных КИХ фильтров.

Частота работы фильтра в 24 раза больше частоты дискретизации.

 

Пока коэффициентов было мало - логика имплеминтации была понятна:

48 коэффициентов - 1 DSP блок

96 коэффициентов - 2 DSP блока

 

Захотел использовать фильтр на 20 DSP блоков - 960 коэффициентов не лезет, только 912

сейчас изменил значения этих 912 коэффициентов - требует 41 DSP.

 

Я бы хотел иметь возможность задавать разные АЧХ одному фильтру, но не понятно для чего ему дополнительные DSP.

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


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

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

2. Напишите свой фильтр, в нем количество DSP ячеек будет фиксировано. Работы минут на 30

ЗЫ. И судя по соотношению 24/48 вас интересуют только четные фильтры с симметричной АЧХ) 

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


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

Цитата

Частота работы фильтра в 24 раза больше частоты дискретизации.

Может уменьшить соотношение, поставив децимирующий CIC например на 12 перед FIR?

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


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

4 hours ago, des00 said:

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

Немного удалось понять как запихать второй фильтр длиной 912 в 20 DSP - пришлось поделить все коэффициенты на число 5

и выбрать Coefficient Quantization=integer

Беда в том, что для первого фильтра, чтобы алгоритм работал - надо выбрать режим Coefficient Quantization=Maximize Dynamic Range

 

А я хотел бы меняя на ходу коэффициенты менять полосу пропускания и может коэффициэнт передачи.

Т.е. они должны быть в одинаковых режимах...

 

Дело в том, что почему-то уровень сигналов после фильтра падает в 2 раза и у меня кончается разрядность после очередного фильтра.

 

4 hours ago, des00 said:

2. Напишите свой фильтр, в нем количество DSP ячеек будет фиксировано. Работы минут на 30

ЗЫ. И судя по соотношению 24/48 вас интересуют только четные фильтры с симметричной АЧХ) 

 

Что-то мне сходу было не придумать как написать чтобы DSP 24 раза сложил результат, а на 25 начал с нуля - надо посимулировать...

 

Фильтры пока чётные - они в Artix в 2 раза меньше DSP требуют...

 

 

29 minutes ago, gibson1980 said:

Может уменьшить соотношение, поставив децимирующий CIC например на 12 перед FIR?

Дело не в соотношении - я могу потратить 24 такта на один приходящий отсчёт т.е. 20 умножителей на 912 коэффициентов.

 

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


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

10 hours ago, _4afc_ said:

А я хотел бы меняя на ходу коэффициенты менять полосу пропускания и может коэффициэнт передачи.

Т.е. они должны быть в одинаковых режимах...

 

Дело в том, что почему-то уровень сигналов после фильтра падает в 2 раза и у меня кончается разрядность после очередного фильтра.

Как бы логично что у вас разное усиление фильтров, поэтому и такой результат. Чтобы при смене коэффициентов сигнал не менялся, нужно одинаковое усиление, но это может привести к тому что внутренняя разрядность фильтра будет не укладываться в 48 бит аккумулятор дсп слайса. 

Если брать грубо, 24 бита данные и 18 коэффициенты, при работе пресумматора будет (48-(25+18-1)) = 6, это 64 коэффиицента. Дальше либо резать данные, либо коэффиценты, потому что вы не может нормально использовать перенос между DSP блочками, разрядности аккумулятора не хватает и софт начинает каскадировать аккумуляторы дсп блоков

Quote

Дело не в соотношении - я могу потратить 24 такта на один приходящий отсчёт т.е. 20 умножителей на 912 коэффициентов.

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

ЗЫ. Смысл в предварительной децимации не только понизить частоту дискретизации сигнала, но и уменьшить соотношение входной и выходной полосы FIR фильтра, что даст уменьшение требуемого количества коэффициентов, при том же качестве фильтрации (но. возможно потребуется скорректировать АЧХ дециматора).

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


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

6 hours ago, des00 said:

Как бы логично что у вас разное усиление фильтров, поэтому и такой результат. Чтобы при смене коэффициентов сигнал не менялся, нужно одинаковое усиление, но это может привести к тому что внутренняя разрядность фильтра будет не укладываться в 48 бит аккумулятор дсп слайса.

 

Когда я сделал одинаковое усиление - у меня сравнялось количество DSP у обоих фильтров стало 960.

 

6 hours ago, des00 said:

Если брать грубо, 24 бита данные и 18 коэффициенты, при работе пресумматора будет (48-(25+18-1)) = 6, это 64 коэффиицента. Дальше либо резать данные, либо коэффиценты, потому что вы не может нормально использовать перенос между DSP блочками, разрядности аккумулятора не хватает и софт начинает каскадировать аккумуляторы дсп блоков

 

Да, данные 24 бита, и 18 коэффициенты. Но количество каскадирующих аккумуляторов зависит и от значений коэффициентов (от усиления)

В узком фильтре можно сделать усиление в 18 разрядах до 132 раз, но тогда надо 41 DSP, снизил до 21 раза - влез в 20 DSP.

В широком фильтре можно сделать усиление в 18 разрядах до 21 раза, задал 21 раз и влез в 20 DSP.

У обоих фильтров показывается максимум АЧХ равный 129дБ.

 

Но чтобы данные после фильтров не разваливались в зависимости от уровня сигнала - узкому надо задать Coefficient Quantization=integer,

а широкому Coefficient Quantization=Maximize Dynamic Range.

 

У обоих Output Rounding = Truncate LSB

Что это за опции описано в Fir Compiler 7.2  но то что я вижу и что они написали у меня пока не складывается...

 

6 hours ago, des00 said:

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

ЗЫ. Смысл в предварительной децимации не только понизить частоту дискретизации сигнала, но и уменьшить соотношение входной и выходной полосы FIR фильтра, что даст уменьшение требуемого количества коэффициентов, при том же качестве фильтрации (но. возможно потребуется скорректировать АЧХ дециматора).

 

Сигнал находится на половине найквиста. Фильтры полосовые.

Узкий     - полоса 1/80 найквиста

Широкий - полоса 1/12 найквиста

Да, хочется крутой переходной полосы, равномерности в полосе и подавления.

 

И ещё народу очень хочется попробовать некий гребенчатый самосчитанный фильтр.

Раньше я думал, что могу засунуть любой фильтр, с любыми 912 коэффициентами, а теперь появляются загадки... какие-то ограничения на значения коэффициентов.

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


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

44 minutes ago, _4afc_ said:

Что это за опции описано в Fir Compiler 7.2  но то что я вижу и что они написали у меня пока не складывается...

 

я не пользуюсь этим софтом, в fdatool есть параметр Maximize Dynamic Range. означает максимальное использование разрядности коэффициентов, чтобы не было переполненеий. А так, усиление фильтра, грубо можно посчитать как сумму модулей коэффиицентов.  Была задача я выравнивал 6 фильтров по усилению, посчитал характеристики, определил максимальную и подтянул другие к нему.

Quote

Сигнал находится на половине найквиста. Фильтры полосовые.

Узкий     - полоса 1/80 найквиста

Широкий - полоса 1/12 найквиста

Да, хочется крутой переходной полосы, равномерности в полосе и подавления.

Понятно тогда, откуда такие параметры. Если сигнал комплексный, то на смесителе сдвигаете на -Fn/2(это 4 мультиплексора для вас) -> отфильтруйте нормально обычным LPF и поднимите обратно, сдвинув на +Fn/2. С вещественным будет чуть сложнее).

ЗЫ. Только учтите, что при масштабировании коэффициентов, может поехать АЧХ в полосе задерживания, поэтому потом желательно проверять результирующую АЧХ.

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


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

7 minutes ago, des00 said:

я не пользуюсь этим софтом, в fdatool есть параметр Maximize Dynamic Range. означает максимальное использование разрядности коэффициентов, чтобы не было переполненеий. А так, усиление фильтра, грубо можно посчитать как сумму модулей коэффиицентов.  Была задача я выравнивал 6 фильтров по усилению, посчитал характеристики, определил максимальную и подтянул другие к нему.

Я считаю как fdatool с помощью fir1 а потом просто результат умножаю на 2^17

А уже эти числа скармливаю Fir Compiler и он генерит ядро для Artix.

 

Я тут пробовал цепочку КИХ-децимирование-КИХ-децимирование, и увидел, что амплитуда сигнала после каждого КИХ уменьшается в 2 раза.

Поэтому стал умножать коэффициенты ещё и на некое число больше 2, но так чтоб коэффициенты не превышали 131072.

Кстати это поначалу не работало как усиление - вроде от того что задашь в Coefficient Quantization зависит.

 

7 minutes ago, des00 said:

Понятно тогда, откуда такие параметры. Если сигнал комплексный, то на смесителе сдвигаете на -Fn/2(это 4 мультиплексора для вас) -> отфильтруйте нормально обычным LPF и поднимите обратно, сдвинув на +Fn/2. С вещественным будет чуть сложне)

 

Сигнал вещественный. Предлагаете сделать его комплексным через гилберта и далее по тексту?

 

PS: приколы Fir Compiler:

1 когда создаёшь новое IP ядро выбор структуры коэффициентов (симметричная или нет) - осуществляется в выпадающем меню.

 а если открыть ядро потом на редактирование - уже 3 кнопочки на выбор.

 

2 когда создаёшь новое IP ядро и вводишь коэффициенты широкого фильтра (где максимальный коэффициент 131071),

 то Fir Compiler говорит коэффициентам надо 19 бит и 41 DSP. Но если пощёлкать окошками, поставить 18 бит или

если мы просто изменим коэффициенты в старом фильтре - 19 бит уже не потребует...

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


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

10 minutes ago, _4afc_ said:

А уже эти числа скармливаю Fir Compiler и он генерит ядро для Artix.

...

Кстати это поначалу не работало как усиление - вроде от того что задашь в Coefficient Quantization зависит.

не работал, не могу помочь. всегда фильтры сам писал.

Quote

Сигнал вещественный. Предлагаете сделать его комплексным через гилберта и далее по тексту?

Ну и пускайте его сразу на квадратурный сместель. умножение будет на синус и на косинус(4 точки), потом отфильтруете и будет у вас он комплексный на нуле. Ну а дальше уже обрабатывайте как хотите.

ЗЫ. Задача кстати очень похожа на дискретизацию сигнала во 2-3 ей зоне найквиста) с переносом на низкую ПЧ

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


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

28 minutes ago, des00 said:

Ну и пускайте его сразу на квадратурный сместель. умножение будет на синус и на косинус(4 точки), потом отфильтруете и будет у вас он комплексный на нуле. Ну а дальше уже обрабатывайте как хотите.

ЗЫ. Задача кстати очень похожа на дискретизацию сигнала во 2-3 ей зоне найквиста) с переносом на низкую ПЧ

А что разве  у ФНЧ будет меньше коэффициентов чем у полосового?

Или предлагаете смеситель - децимирующий CIC - Крутой короткий КИХ ?

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


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

22 hours ago, _4afc_ said:

А что разве  у ФНЧ будет меньше коэффициентов чем у полосового? 

 Или предлагаете смеситель - децимирующий CIC - Крутой короткий КИХ ?

Как показывает моя практика меньше, при том же качестве. Можно децемировать до КИХ, на любом фильтре (вплоть до маленького КИХ), а можно сделать децимирующий КИХ (т.е. на входе полный сигнал, на выходе он уже децимирован). В этом случае, может быть у вас основной КИХ сократиться до 2-4ДСП

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


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

1 час назад, des00 сказал:

Как показывает моя практика меньше, при том же качестве.

Легко проверить в том же Матлаб-е, что полосовой и НЧ КИХ фильтры с одинаковыми параметрами по затуханию/неравномерности будут иметь один и тот же порядок. Но у полосового фильтра на Fs/4 для симметричной характеристики (и некоторой игрой с уровнями пульсаций) половина коэффициентов нулевые, т.е. такой фильтр требует в 4 раза меньше ресурсов, чем два НЧ фильтра на нуле.  Это если просто сравнивать два типа фильтров не вдаваясь в остальные детали:)

 

В целом же согласен, фильтрация на нуле проще, особенно, если допустима последующая децимация и тем более, если требуется перестройка фильтров. Но мы не знаем всех требований ТС. Если в конечном итоге ему нужна обработка сигнала на нуле, то да, тут без вариантов. А если нет? Вот тут я уже сильно сомневаюсь, что будет выгоднее гонять сигнал вниз-вверх, вместо обработки сразу на ПЧ.

 

И к слову, почему бы действительно не посмотреть на CIC?:) Fs/4 очень удобная для этого частота, практически единственная, кроме нулевой, где CIC будет так же непринужденно работать:) Но естественно, без децимации. Перестройка элементарная, умножений не требуется вообще. Но да, по любому требуется последующий фильтр-корректор. Но если будет устраивать только выравнивание АЧХ, то порядок такого фильтра будет очень небольшим. Правда, его все равно нужно будет перестраивать/перепрограммировать...  

Изменено пользователем Самурай

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


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

19 minutes ago, Самурай said:

Легко проверить в том же Матлаб-е, что полосовой и НЧ КИХ фильтры с одинаковыми параметрами по затуханию/неравномерности будут иметь один и тот же порядок. Но у полосового фильтра на Fs/4 для симметричной характеристики (и некоторой игрой с уровнями пульсаций) половина коэффициентов нулевые, т.е. такой фильтр требует в 4 раза меньше ресурсов, чем два НЧ фильтра на нуле.  Это если просто сравнивать два типа фильтров не вдаваясь в остальные детали:) 

ну значит я ошибался, тогда меня слушать не следует)

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


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

On 10/26/2019 at 3:09 PM, Самурай said:

Легко проверить в том же Матлаб-е, что полосовой и НЧ КИХ фильтры с одинаковыми параметрами по затуханию/неравномерности будут иметь один и тот же порядок.

 

Я посмотрел и мне тоже так показалось.

 

On 10/26/2019 at 3:09 PM, Самурай said:

В целом же согласен, фильтрация на нуле проще, особенно, если допустима последующая децимация и тем более, если требуется перестройка фильтров. Но мы не знаем всех требований ТС. Если в конечном итоге ему нужна обработка сигнала на нуле, то да, тут без вариантов. А если нет? Вот тут я уже сильно сомневаюсь, что будет выгоднее гонять сигнал вниз-вверх, вместо обработки сразу на ПЧ.

 

Нужна обработка на нуле. Я просто думал что нельзя сразу после АЦП снести весь спектр в ноль вместе с помехами и там пропустить через ФНЧ.

Мне казалось что сначала нужно очистить сигнал полосовым фильтром и только потом сносить в ноль.

Я делаю лишнюю работу?

 

On 10/26/2019 at 3:09 PM, Самурай said:

И к слову, почему бы действительно не посмотреть на CIC?:) Fs/4 очень удобная для этого частота, практически единственная, кроме нулевой, где CIC будет так же непринужденно работать:) Но естественно, без децимации. Перестройка элементарная, умножений не требуется вообще. Но да, по любому требуется последующий фильтр-корректор. Но если будет устраивать только выравнивание АЧХ, то порядок такого фильтра будет очень небольшим. Правда, его все равно нужно будет перестраивать/перепрограммировать... 

 

Просто пока нет опыта работы с CIC. БИХ пробовал, КИХ пробовал, CIC как-то пока не попадался...

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


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

1 hour ago, _4afc_ said:

Я посмотрел и мне тоже так показалось.

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

1 hour ago, _4afc_ said:

Нужна обработка на нуле. Я просто думал что нельзя сразу после АЦП снести весь спектр в ноль вместе с помехами и там пропустить через ФНЧ.

Мне казалось что сначала нужно очистить сигнал полосовым фильтром и только потом сносить в ноль.

Я делаю лишнюю работу?

вы же в квадратуре сносите, ничего не теряется. сносите сразу в 0 и обрабатывайте с децимацией и ваш КИХ резко сократится.

 

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


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

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

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

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

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

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

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

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

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

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