MNP 0 26 ноября, 2012 Опубликовано 26 ноября, 2012 · Жалоба Добрый день. Надо сделать на циклон-4 фильтр с крутым срезом далеко от частоты дискретизации (Fs = 625 кгц): Fpass=600Hz, Fstop=400Hz, Ap=0.0001db, As=80db; вход и выход - фикс.т. 16 бит. Матлаб (fdatool) говорит, что подходит только бих-фильтр, например эллиптический N=10 (5 SOS). При разрядности к-тов 32 вроде бы можно сделать с фикс.т., но посмотрев АЧХ звеньев боюсь, что первые звенья могут задавить данные вблизи среза и будет потеря точности, т.к. возврат к 16 р. (с округлением) надо делать после каждого звена. Например первое звено давит на 40 дб. Выходит так , что надо делать с пл.точкой, а на выходе фильтра - восстанавливать входной формат? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 26 ноября, 2012 Опубликовано 26 ноября, 2012 · Жалоба Может использовать фильтр с децимацией? И ресурсов меньше жрать будет, и как следствие можно сделать фильтр более крутой по характеристикам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 26 ноября, 2012 Опубликовано 26 ноября, 2012 (изменено) · Жалоба Ap=0.0001db, As=80db; вход и выход - фикс.т. 16 бит. Минимальная неравномерность Ap, которую можно получить с помощью "выход - фикс.т. 16 бит" равна Ap=20*log(32767/32768) = -0.000265 dB. Если нужно именно Ap=0.0001db, то числа должны быть 18-ти битными: Ap=20*log(131071/131072) = -0.0000663 dB. PS. Кроме того для случая, когда Fs >> Fpass и Fs >> Fstop, более эффективным должен быть IFIR фильтр. Изменено 26 ноября, 2012 пользователем blackfin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima_spb 0 26 ноября, 2012 Опубликовано 26 ноября, 2012 · Жалоба Уважаемые..... Вы не находите?! Что тема раздела носит иную тематику? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MNP 0 26 ноября, 2012 Опубликовано 26 ноября, 2012 · Жалоба Вы не находите?! Что тема раздела носит иную тематику? Ну я прошу простить за моральный ущерб, действительно поторопился, теперь уж не исправить ... :laughing: Может использовать фильтр с децимацией? нельзя децимацию, нужна вся полоса выше Fs/4, почти до Fs/2 (фильтр - ФВЧ) Ap=20*log(32767/32768) = -0.000265 dB. по-моему вдвое меньше (2^16=64k), но все равно перезаложились, т.к. каскадно включаются много фильтров и хотели уменьшить общую погрешность. Глянул IFIR - порядок зашкаливает... Правильно ли я вообще рассуждаю насчет БИХ (никогда их не делал)? Плав. точка наверно будет стоить дороже по ресурсам, зато можно не думать о разрядности и ставить готовые мегафункции. Или есть еще подводные камни? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 26 ноября, 2012 Опубликовано 26 ноября, 2012 · Жалоба по-моему вдвое меньше (2^16=64k) ... А знак числа Вас не волнует? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 26 ноября, 2012 Опубликовано 26 ноября, 2012 · Жалоба Надо сделать на циклон-4 фильтр с крутым срезом далеко от частоты дискретизации (Fs = 625 кгц): Fpass=600Hz, Fstop=400Hz, Ap=0.0001db, As=80db; вход и выход - фикс.т. 16 бит. Матлаб (fdatool) говорит, что подходит только бих-фильтр, например эллиптический N=10 (5 SOS). При разрядности к-тов 32 вроде бы можно сделать с фикс.т., но посмотрев АЧХ звеньев боюсь, что первые звенья могут задавить данные вблизи среза и будет потеря точности, т.к. возврат к 16 р. (с округлением) надо делать после каждого звена. Например первое звено давит на 40 дб. Не понимаю, зачем делать округление к 16 разрядам после каждого звена? Достоточно один раз в конце. Квартус умеет генерировать перемножители целых чисел почти любой разрядности, правда только параллельные, с использованием кучи DSP блоков. В данном случае можно теоретически всё успеть на одном-двух DSP блоках, но перемножитель, видимо, придётся самому писать. Если характерискика БИХ фильтра не устроит, можно с небольшим объёмом вычислений сделать и КИХ фильтр. Вначале децимируем CIC фильтром примерно в 10 раз, потом БИХ фильтром обратной характеристики выделяем низкие частоты с децимацией ещё примерно в 10 раз, затем интерполируем CIC фильтром в 100раз, до частоты исходного сигнала, и вычитаем из исходного сигнала, задержанного синхронно с CIC/FIR фильтрами. Тут главная проблема - большая длина линии задержки, 10000 точек навскидку, потребуется относительно много памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aT-DeviLru 0 26 ноября, 2012 Опубликовано 26 ноября, 2012 · Жалоба Автором предлагается последовательная реализация звеньев? Если да, то можно использовать параллельную реализацию, которая менее подвержена к ошибкам округления, а округление делать уже на выходе фильтров. Для КИХ фильтров можно использовать обработку на повышенной частоте, т.е. умножать на коэффициенты одним умножителем с аккумулятором, т.н. MAC реализация FIR фильтра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MNP 0 27 ноября, 2012 Опубликовано 27 ноября, 2012 · Жалоба Не понимаю, зачем делать округление к 16 разрядам после каждого звена? Признаю - испугался огромных умножителей. Допустим добавлю 8 бит на выходе 1 звена - значит столько же надо добавить в сумматоры; потом еще добавить бит 6-7 на выходе 2-го... Размер будет наверно не меньше чем с пл.т. Могут ли быть проблемы с вариантом с пл.т. (кроме размера) если использовать мегафункции квартуса? Вначале децимируем CIC фильтром примерно в 10 раз Как я могу делать децимацию, если сигнал м.б. выше Fs/4 ? можно использовать параллельную реализацию, которая менее подвержена к ошибкам округления, а округление делать уже на выходе фильтров. Это интересный вариант , действительно вроде разрешает проблему (если я правильно понимаю, что первые низкодобротные звенья БИХ-фильтра могут ослабить сигнал настолько, что он уйдет в мл. разряды.) К сожалению матлаб считает к-ты только для каскадных структур. Параллельные не модны - почему? Есть ли готовый инструмент для их расчета ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aT-DeviLru 0 27 ноября, 2012 Опубликовано 27 ноября, 2012 · Жалоба Для преобразования передаточной функции в параллельную форму можно использовать функцию residuez Matlab'a, сначала передаточная функция представляется в виде суммы простых дробей 1-го порядка, но часть из них будет комплексными, поэтому используя данную функцию Matlab'a в обратном направлении можно преобразовать пары комплексных полюсов и вычетов в дроби 2-го порядка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MNP 0 27 ноября, 2012 Опубликовано 27 ноября, 2012 · Жалоба Для преобразования передаточной функции в параллельную форму можно использовать функцию residuez Matlab'a, Спасибо, надо глянуть. А в чем минусы параллельной схемы? Возможно - в опасности переполнения высокодобротного звена? и при масштабировании будут те же грабли Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aT-DeviLru 0 27 ноября, 2012 Опубликовано 27 ноября, 2012 · Жалоба А в чем минусы параллельной схемы? Возможно - в опасности переполнения высокодобротного звена? и при масштабировании будут те же грабли Корректно сравнивать не могу, так как каскадную реализацию не рассматривал. Но, в параллельной реализации происходит переполнение на первых периодах сигнала, с чем это связано, так и не выяснил. Прикрепляю результат генерации HDL кода напрямую из модели Simulink'a с последующей косимуляцией в Modelsim'e. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MNP 0 27 ноября, 2012 Опубликовано 27 ноября, 2012 (изменено) · Жалоба Корректно сравнивать не могу, так как каскадную реализацию не рассматривал. Но, в параллельной реализации происходит переполнение на первых периодах сигнала, с чем это связано, так и не выяснил. ну можно предположить - переходный процесс при подаче сигнала - как выброс или звон при подаче перепада на к.контур . Для нас важно чтобы все работало в статике правильно -------------------- И еще вопрос - при настройке квантизатора FDATOOL на одинарный формат пл.т. Матлаб экспортирует к-ты все равно в двойном формате (64 бит IEEE754). Чем бы проще сконвертировать его в одинарный (на этой структуре будет кучка фильтров,много к-тов, так что вручную муторно) Изменено 27 ноября, 2012 пользователем MNP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 27 ноября, 2012 Опубликовано 27 ноября, 2012 · Жалоба Признаю - испугался огромных умножителей. Допустим добавлю 8 бит на выходе 1 звена - значит столько же надо добавить в сумматоры; потом еще добавить бит 6-7 на выходе 2-го... Размер будет наверно не меньше чем с пл.т. Могут ли быть проблемы с вариантом с пл.т. (кроме размера) если использовать мегафункции квартуса? Когда длина промежуточного результата дойдёт, скажем, до 40 бит, то можно дальше не добавлять. Целочисленный сумматор значительно меньше плавающего той же точности, раз так в 5-10. С плавучкой гораздо удобнее, что не надо думать о нормировке промежуточных результатов. Насчёт проблем не знаю, я вживую работаю с Lattice, но надо иметь ввиду, что при максимальной частоте(порядка 200МГц) плавучка требует ставить латентность порядка 10 тактов на операцию, хотя в этой задаче можно спокойно обойтись 20МГц с единичной латентностью. Как я могу делать децимацию, если сигнал м.б. выше Fs/4 ? Это исходный сигнал может быть выше, а я предлагаю использовать НЧ КИХ фильтр с обратной характеристикой и вычитанием из исходного сигнала, поэтому полоса выделяемого КИХ фильтром сигнала будет значительно ниже децимированной частоты. Конкретно, частота после децимации 60кГц, а полоса выходного сигнала КИХ фильтра - только 500, в этой полосе 60кГерцовый CIC фильтр даёт почти плоскую характеристику и никакого алиасинга. Симметричный КИХ фильтр при частоте 60кГц даже без второй децимации можно получить длиной около 6000 точек на одном перемножителе 18x18. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MNP 0 28 ноября, 2012 Опубликовано 28 ноября, 2012 · Жалоба Это исходный сигнал может быть выше, а я предлагаю использовать НЧ КИХ фильтр с обратной характеристикой и вычитанием из исходного сигнала, поэтому полоса выделяемого КИХ фильтром сигнала будет значительно ниже децимированной частоты. Конкретно, частота после децимации 60кГц, а полоса выходного сигнала КИХ фильтра - только 500, в этой полосе 60кГерцовый CIC фильтр даёт почти плоскую характеристику и никакого алиасинга. Симметричный КИХ фильтр при частоте 60кГц даже без второй децимации можно получить длиной около 6000 точек на одном перемножителе 18x18. Если я правильно понял, Вы предлагаете схему типа “Linear-phase DC Removal Filter “ Лайонса (http://www.dsprelated.com/showarticle/58.php) , но с ких-фнч на Fs/10 после децимации, а перед вычитанием сделать интерполяцию. Но ведь в интерполяторе нужен свой “крутой “ фнч - уже после восстановления Fs? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться