_4afc_ 25 24 октября, 2019 Опубликовано 24 октября, 2019 · Жалоба Пытаюсь использовать в своём проекте готовый IP блок от Xilinx, а именно Fir Compiler 7.2 Пытаюсь реализовать несколько симметричных КИХ фильтров. Частота работы фильтра в 24 раза больше частоты дискретизации. Пока коэффициентов было мало - логика имплеминтации была понятна: 48 коэффициентов - 1 DSP блок 96 коэффициентов - 2 DSP блока Захотел использовать фильтр на 20 DSP блоков - 960 коэффициентов не лезет, только 912 сейчас изменил значения этих 912 коэффициентов - требует 41 DSP. Я бы хотел иметь возможность задавать разные АЧХ одному фильтру, но не понятно для чего ему дополнительные DSP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 24 октября, 2019 Опубликовано 24 октября, 2019 · Жалоба 1. Вы учитываете что с ростом порядка фильтра, во избежание переполнений, должна расти внутренняя разрядность аккумуляторов фильтра? 2. Напишите свой фильтр, в нем количество DSP ячеек будет фиксировано. Работы минут на 30 ЗЫ. И судя по соотношению 24/48 вас интересуют только четные фильтры с симметричной АЧХ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gibson1980 0 24 октября, 2019 Опубликовано 24 октября, 2019 · Жалоба Цитата Частота работы фильтра в 24 раза больше частоты дискретизации. Может уменьшить соотношение, поставив децимирующий CIC например на 12 перед FIR? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 24 октября, 2019 Опубликовано 24 октября, 2019 · Жалоба 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 коэффициентов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 октября, 2019 Опубликовано 25 октября, 2019 · Жалоба 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 фильтра, что даст уменьшение требуемого количества коэффициентов, при том же качестве фильтрации (но. возможно потребуется скорректировать АЧХ дециматора). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 25 октября, 2019 Опубликовано 25 октября, 2019 · Жалоба 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 коэффициентами, а теперь появляются загадки... какие-то ограничения на значения коэффициентов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 октября, 2019 Опубликовано 25 октября, 2019 · Жалоба 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. С вещественным будет чуть сложнее). ЗЫ. Только учтите, что при масштабировании коэффициентов, может поехать АЧХ в полосе задерживания, поэтому потом желательно проверять результирующую АЧХ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 25 октября, 2019 Опубликовано 25 октября, 2019 · Жалоба 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 бит уже не потребует... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 октября, 2019 Опубликовано 25 октября, 2019 · Жалоба 10 minutes ago, _4afc_ said: А уже эти числа скармливаю Fir Compiler и он генерит ядро для Artix. ... Кстати это поначалу не работало как усиление - вроде от того что задашь в Coefficient Quantization зависит. не работал, не могу помочь. всегда фильтры сам писал. Quote Сигнал вещественный. Предлагаете сделать его комплексным через гилберта и далее по тексту? Ну и пускайте его сразу на квадратурный сместель. умножение будет на синус и на косинус(4 точки), потом отфильтруете и будет у вас он комплексный на нуле. Ну а дальше уже обрабатывайте как хотите. ЗЫ. Задача кстати очень похожа на дискретизацию сигнала во 2-3 ей зоне найквиста) с переносом на низкую ПЧ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 25 октября, 2019 Опубликовано 25 октября, 2019 · Жалоба 28 minutes ago, des00 said: Ну и пускайте его сразу на квадратурный сместель. умножение будет на синус и на косинус(4 точки), потом отфильтруете и будет у вас он комплексный на нуле. Ну а дальше уже обрабатывайте как хотите. ЗЫ. Задача кстати очень похожа на дискретизацию сигнала во 2-3 ей зоне найквиста) с переносом на низкую ПЧ А что разве у ФНЧ будет меньше коэффициентов чем у полосового? Или предлагаете смеситель - децимирующий CIC - Крутой короткий КИХ ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 26 октября, 2019 Опубликовано 26 октября, 2019 · Жалоба 22 hours ago, _4afc_ said: А что разве у ФНЧ будет меньше коэффициентов чем у полосового? Или предлагаете смеситель - децимирующий CIC - Крутой короткий КИХ ? Как показывает моя практика меньше, при том же качестве. Можно децемировать до КИХ, на любом фильтре (вплоть до маленького КИХ), а можно сделать децимирующий КИХ (т.е. на входе полный сигнал, на выходе он уже децимирован). В этом случае, может быть у вас основной КИХ сократиться до 2-4ДСП Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 26 октября, 2019 Опубликовано 26 октября, 2019 (изменено) · Жалоба 1 час назад, des00 сказал: Как показывает моя практика меньше, при том же качестве. Легко проверить в том же Матлаб-е, что полосовой и НЧ КИХ фильтры с одинаковыми параметрами по затуханию/неравномерности будут иметь один и тот же порядок. Но у полосового фильтра на Fs/4 для симметричной характеристики (и некоторой игрой с уровнями пульсаций) половина коэффициентов нулевые, т.е. такой фильтр требует в 4 раза меньше ресурсов, чем два НЧ фильтра на нуле. Это если просто сравнивать два типа фильтров не вдаваясь в остальные детали:) В целом же согласен, фильтрация на нуле проще, особенно, если допустима последующая децимация и тем более, если требуется перестройка фильтров. Но мы не знаем всех требований ТС. Если в конечном итоге ему нужна обработка сигнала на нуле, то да, тут без вариантов. А если нет? Вот тут я уже сильно сомневаюсь, что будет выгоднее гонять сигнал вниз-вверх, вместо обработки сразу на ПЧ. И к слову, почему бы действительно не посмотреть на CIC?:) Fs/4 очень удобная для этого частота, практически единственная, кроме нулевой, где CIC будет так же непринужденно работать:) Но естественно, без децимации. Перестройка элементарная, умножений не требуется вообще. Но да, по любому требуется последующий фильтр-корректор. Но если будет устраивать только выравнивание АЧХ, то порядок такого фильтра будет очень небольшим. Правда, его все равно нужно будет перестраивать/перепрограммировать... Изменено 26 октября, 2019 пользователем Самурай Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 26 октября, 2019 Опубликовано 26 октября, 2019 · Жалоба 19 minutes ago, Самурай said: Легко проверить в том же Матлаб-е, что полосовой и НЧ КИХ фильтры с одинаковыми параметрами по затуханию/неравномерности будут иметь один и тот же порядок. Но у полосового фильтра на Fs/4 для симметричной характеристики (и некоторой игрой с уровнями пульсаций) половина коэффициентов нулевые, т.е. такой фильтр требует в 4 раза меньше ресурсов, чем два НЧ фильтра на нуле. Это если просто сравнивать два типа фильтров не вдаваясь в остальные детали:) ну значит я ошибался, тогда меня слушать не следует) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 28 октября, 2019 Опубликовано 28 октября, 2019 · Жалоба 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 как-то пока не попадался... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 28 октября, 2019 Опубликовано 28 октября, 2019 · Жалоба 1 hour ago, _4afc_ said: Я посмотрел и мне тоже так показалось. поковырял матлаб, если взять float-point или большую разрядность коэффициентов, то да, я был не прав. писал про свою практику, а в ней я стараюсь минимизировать количество и разрядность коэффициентов. При этом в полосе задерживания, ФНЧ затухание получается больше чем у полосового с теми же параметрами, компенсация - наращивание порядка полосового фильтра или увеличение разрядности коэффициентов. Вот это я имел в виду) 1 hour ago, _4afc_ said: Нужна обработка на нуле. Я просто думал что нельзя сразу после АЦП снести весь спектр в ноль вместе с помехами и там пропустить через ФНЧ. Мне казалось что сначала нужно очистить сигнал полосовым фильтром и только потом сносить в ноль. Я делаю лишнюю работу? вы же в квадратуре сносите, ничего не теряется. сносите сразу в 0 и обрабатывайте с децимацией и ваш КИХ резко сократится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться