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

бих-фильтр - реализация

Добрый день.

 

Надо сделать на циклон-4 фильтр с крутым срезом далеко от частоты дискретизации (Fs = 625 кгц):

Fpass=600Hz, Fstop=400Hz, Ap=0.0001db, As=80db; вход и выход - фикс.т. 16 бит.

 

Матлаб (fdatool) говорит, что подходит только бих-фильтр, например эллиптический N=10 (5 SOS).

При разрядности к-тов 32 вроде бы можно сделать с фикс.т., но посмотрев АЧХ звеньев боюсь, что первые звенья могут задавить данные вблизи среза и будет потеря точности, т.к. возврат к 16 р. (с округлением) надо делать после каждого звена. Например первое звено давит на 40 дб.

 

Выходит так , что надо делать с пл.точкой, а на выходе фильтра - восстанавливать входной формат?

 

 

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


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

Может использовать фильтр с децимацией? И ресурсов меньше жрать будет, и как следствие можно сделать фильтр более крутой по характеристикам.

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


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

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 фильтр.

Изменено пользователем blackfin

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


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

Уважаемые.....

Вы не находите?! Что тема раздела носит иную тематику?

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


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

Вы не находите?! Что тема раздела носит иную тематику?

Ну я прошу простить за моральный ущерб, действительно поторопился, теперь уж не исправить ... :laughing:

Может использовать фильтр с децимацией?

нельзя децимацию, нужна вся полоса выше Fs/4, почти до Fs/2 (фильтр - ФВЧ)

 

Ap=20*log(32767/32768) = -0.000265 dB.

 

по-моему вдвое меньше (2^16=64k), но все равно перезаложились, т.к. каскадно включаются много фильтров и хотели уменьшить общую погрешность.

 

Глянул IFIR - порядок зашкаливает...

 

Правильно ли я вообще рассуждаю насчет БИХ (никогда их не делал)?

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

 

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


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

Надо сделать на циклон-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 точек навскидку, потребуется относительно много памяти.

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


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

Автором предлагается последовательная реализация звеньев?

Если да, то можно использовать параллельную реализацию, которая менее подвержена к ошибкам округления, а

округление делать уже на выходе фильтров.

Для КИХ фильтров можно использовать обработку на повышенной частоте, т.е. умножать на коэффициенты одним умножителем с аккумулятором, т.н. MAC реализация FIR фильтра.

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


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

Не понимаю, зачем делать округление к 16 разрядам после каждого звена?

 

Признаю - испугался огромных умножителей. Допустим добавлю 8 бит на выходе 1 звена - значит столько же надо добавить в сумматоры; потом еще добавить бит 6-7 на выходе 2-го...

Размер будет наверно не меньше чем с пл.т.

Могут ли быть проблемы с вариантом с пл.т. (кроме размера) если использовать мегафункции квартуса?

 

Вначале децимируем CIC фильтром примерно в 10 раз

 

Как я могу делать децимацию, если сигнал м.б. выше Fs/4 ?

 

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

 

Это интересный вариант , действительно вроде разрешает проблему (если я правильно понимаю, что первые низкодобротные звенья БИХ-фильтра могут ослабить сигнал настолько, что он уйдет в мл. разряды.)

К сожалению матлаб считает к-ты только для каскадных структур. Параллельные не модны - почему?

Есть ли готовый инструмент для их расчета ?

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


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

Для преобразования передаточной функции в параллельную форму можно использовать функцию residuez Matlab'a,

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

комплексными, поэтому используя данную функцию Matlab'a в обратном направлении можно преобразовать пары

комплексных полюсов и вычетов в дроби 2-го порядка.

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


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

Для преобразования передаточной функции в параллельную форму можно использовать функцию residuez Matlab'a,

 

Спасибо, надо глянуть. А в чем минусы параллельной схемы? Возможно - в опасности переполнения высокодобротного звена? и при масштабировании будут те же грабли

 

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


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

А в чем минусы параллельной схемы? Возможно - в опасности переполнения высокодобротного звена? и при масштабировании будут те же грабли

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

Прикрепляю результат генерации HDL кода напрямую из модели Simulink'a с последующей косимуляцией в Modelsim'e.

post-60826-1354005132_thumb.png

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


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

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

 

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

Для нас важно чтобы все работало в статике правильно

--------------------

И еще вопрос - при настройке квантизатора FDATOOL на одинарный формат пл.т. Матлаб экспортирует к-ты все равно в двойном формате (64 бит IEEE754). Чем бы проще сконвертировать его в одинарный (на этой структуре будет кучка фильтров,много к-тов, так что вручную муторно)

Изменено пользователем MNP

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


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

Признаю - испугался огромных умножителей. Допустим добавлю 8 бит на выходе 1 звена - значит столько же надо добавить в сумматоры; потом еще добавить бит 6-7 на выходе 2-го...

Размер будет наверно не меньше чем с пл.т.

Могут ли быть проблемы с вариантом с пл.т. (кроме размера) если использовать мегафункции квартуса?

Когда длина промежуточного результата дойдёт, скажем, до 40 бит, то можно дальше не добавлять. Целочисленный сумматор значительно меньше плавающего той же точности, раз так в 5-10. С плавучкой гораздо удобнее, что не надо думать о нормировке промежуточных результатов. Насчёт проблем не знаю, я вживую работаю с Lattice, но надо иметь ввиду, что при максимальной частоте(порядка 200МГц) плавучка требует ставить латентность порядка 10 тактов на операцию, хотя в этой задаче можно спокойно обойтись 20МГц с единичной латентностью.

Как я могу делать децимацию, если сигнал м.б. выше Fs/4 ?

Это исходный сигнал может быть выше, а я предлагаю использовать НЧ КИХ фильтр с обратной характеристикой и вычитанием из исходного сигнала, поэтому полоса выделяемого КИХ фильтром сигнала будет значительно ниже децимированной частоты. Конкретно, частота после децимации 60кГц, а полоса выходного сигнала КИХ фильтра - только 500, в этой полосе 60кГерцовый CIC фильтр даёт почти плоскую характеристику и никакого алиасинга. Симметричный КИХ фильтр при частоте 60кГц даже без второй децимации можно получить длиной около 6000 точек на одном перемножителе 18x18.

 

 

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


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

Это исходный сигнал может быть выше, а я предлагаю использовать НЧ КИХ фильтр с обратной характеристикой и вычитанием из исходного сигнала, поэтому полоса выделяемого КИХ фильтром сигнала будет значительно ниже децимированной частоты. Конкретно, частота после децимации 60кГц, а полоса выходного сигнала КИХ фильтра - только 500, в этой полосе 60кГерцовый CIC фильтр даёт почти плоскую характеристику и никакого алиасинга. Симметричный КИХ фильтр при частоте 60кГц даже без второй децимации можно получить длиной около 6000 точек на одном перемножителе 18x18.

 

Если я правильно понял, Вы предлагаете схему типа “Linear-phase DC Removal Filter “ Лайонса (http://www.dsprelated.com/showarticle/58.php) , но с ких-фнч на Fs/10 после децимации, а перед вычитанием сделать интерполяцию. Но ведь в интерполяторе нужен свой “крутой “ фнч - уже после восстановления Fs?

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


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

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

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

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

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

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

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

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

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

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