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

Эффективная децимация в два раза

Задача понизить частоту дискретизации в два раза. Соответственно надо сигнал подфильтровать, а потом децимировать. Сейчас я рассчитываю фильтр с большой крутизной, малыми (не более 0.1дБ) пульсациями в полосе пропускания, и подавлением не менее 96дБ методом Ремеза. В принципе работает. Но мне не дает покоя мысль, что где-то я встречал какой-то "хитрый" подход к решению проблемы децимации в два раза, в котором получается достаточно вычислительно эффективный фильтр. То ли малого порядка, то ли с кучей нулей в ИХ. Подскажите, на самом ли деле есть более лучшее решение?

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


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

Задача понизить частоту дискретизации в два раза. Соответственно надо сигнал подфильтровать, а потом децимировать. Сейчас я рассчитываю фильтр с большой крутизной, малыми (не более 0.1дБ) пульсациями в полосе пропускания, и подавлением не менее 96дБ методом Ремеза. В принципе работает. Но мне не дает покоя мысль, что где-то я встречал какой-то "хитрый" подход к решению проблемы децимации в два раза, в котором получается достаточно вычислительно эффективный фильтр. То ли малого порядка, то ли с кучей нулей в ИХ. Подскажите, на самом ли деле есть более лучшее решение?

Зависит от вида АЧХ в полосе пропускания. Ну, а то, что при децимации не надо рассчитывать все выходные отсчеты, а только с деленной частотой, Вы и без меня догадались :)

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


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

Зависит от вида АЧХ в полосе пропускания

 

Какие варианты существуют? У меня требование неравномерности не более 0.1дБ.

 

И еще - после децимации коэффициент использования полосы должен составлять не менее 0.9 от Найквиста (что и приводит к требованию достаточно крутой переходной характеристики).

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

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


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

Задача понизить частоту дискретизации в два раза. Соответственно надо сигнал подфильтровать, а потом децимировать. Сейчас я рассчитываю фильтр с большой крутизной, малыми (не более 0.1дБ) пульсациями в полосе пропускания, и подавлением не менее 96дБ методом Ремеза. В принципе работает. Но мне не дает покоя мысль, что где-то я встречал какой-то "хитрый" подход к решению проблемы децимации в два раза, в котором получается достаточно вычислительно эффективный фильтр. То ли малого порядка, то ли с кучей нулей в ИХ. Подскажите, на самом ли деле есть более лучшее решение?

 

Действительно, более эффективные (с точки зрения количества операций) фильтры существуют. Это так называемые CIC фильтры или гребенчатые фильтры. По сути дела это просто скользящее среднее вычисляемое эффективным образом. АЧХ такого фильтра довольно дрянное, с нормальным КИХ фильтром не сравнить, но иногда этого бывает достаточно.

Есть еще полифазные фильтры - это КИХ фильтр, у которого коэффициенты через один равны нулю - в два раза меньше умножений.

Так что выбор за Вами ;) .

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


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

АЧХ такого фильтра довольно дрянное
- поэтому CICы и не рассматриваются. И еще потому, что они применяются тогда, когда требуется достаточно узкая рабочая полоса по отношению к частоте дискретизации.

 

Есть еще полифазные фильтры - это КИХ фильтр, у которого коэффициенты через один равны нулю
- а это не понял. Полифазную реализацию знаю, а полифазную ИХ слышу впервые. Как этот зверь получается/рассчитывается?

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


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

- а это не понял. Полифазную реализацию знаю, а полифазную ИХ слышу впервые. Как этот зверь получается/рассчитывается?

 

Посмотрите в книге по цифровой обработке - полифазные фильтры. Это КИХ фильтр, но половина коэффициентов равна нулю - отсюда несколько специфическая АЧХ. Рассчитать можно в MATLABе. По момему доступен при расчете в FDATOOL децимирующих и интерполирующих фильтров.

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


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

Действительно, более эффективные (с точки зрения количества операций) фильтры существуют. Это так называемые CIC фильтры или гребенчатые фильтры. По сути дела это просто скользящее среднее вычисляемое эффективным образом. АЧХ такого фильтра довольно дрянное, с нормальным КИХ фильтром не сравнить, но иногда этого бывает достаточно.

Есть еще полифазные фильтры - это КИХ фильтр, у которого коэффициенты через один равны нулю - в два раза меньше умножений.

Так что выбор за Вами ;) .

Такое (равенство нулю части коэффициентов) получается, только если частоты начала среза/полного затухания точно симметричны относительно доли Fs. Для фильтров децимации с выполнением условия Найквиста это заметного выигрыша не дает.

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


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

Задача понизить частоту дискретизации в два раза. Соответственно надо сигнал подфильтровать, а потом децимировать. Сейчас я рассчитываю фильтр с большой крутизной, малыми (не более 0.1дБ) пульсациями в полосе пропускания, и подавлением не менее 96дБ методом Ремеза. В принципе работает. Но мне не дает покоя мысль, что где-то я встречал какой-то "хитрый" подход к решению проблемы децимации в два раза, в котором получается достаточно вычислительно эффективный фильтр. То ли малого порядка, то ли с кучей нулей в ИХ. Подскажите, на самом ли деле есть более лучшее решение?

Если в два раза децимировать то нужно смотреть на полуполосный фильтр (halfband) - у него половина коэф. кроме центрального =0. Волшебное слово firhalfband ( Matlab 6.5) или можно тоже самое сделать в fdatool там можно выбрать halfband lowpass, halfband highpass.

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


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

Такое (равенство нулю части коэффициентов) получается, только если частоты начала среза/полного затухания точно симметричны относительно доли Fs.

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

Для фильтров децимации с выполнением условия Найквиста это заметного выигрыша не дает.

Поясните, что Вы под этим подразумевали?

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


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

halfband lowpass вроде как да, но у него отвратительное подавление в полосе подавления, у меня получилось только 48дБ, при необходимых 96.

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


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

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

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

Поясните, что Вы под этим подразумевали?

То, что при децимации в n раз для выполнения условия найквиста полное затухание должно наступить уже на частоте Fs/2n, тогда эффективная полоса заведомо меньше этой величины. Halfband не прокатит. А учитывая, что использование полосы хочется иметь побольше, скажем, 80-90%, то начало спада придется где-то на Fs/2.2...2.5n, а при этом нулевыми можно сделать будет только не более 10-20% коэффициентов.

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


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

То, что при децимации в n раз для выполнения условия найквиста полное затухание должно наступить уже на частоте Fs/2n, тогда эффективная полоса заведомо меньше этой величины. Halfband не прокатит. А учитывая, что использование полосы хочется иметь побольше, скажем, 80-90%, то начало спада придется где-то на Fs/2.2...2.5n, а при этом нулевыми можно сделать будет только не более 10-20% коэффициентов.

Это не совсем верный подход. Надо делать полосу режекции немного дальше, чем Fs/2n. Нет ничего страшного в том, что часть шума завернется, во многих случаях важнее отсутствие корреляции шумов.

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


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

Так завернется не только шум, а и сам сигнал. В моем случае исходная частота дискретизации 120кГц. Полезная, рабочая полоса до 30кГц. При этом потерять я могу максимум от 29 до 30.

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


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

Так завернется не только шум, а и сам сигнал. В моем случае исходная частота дискретизации 120кГц. Полезная, рабочая полоса до 30кГц. При этом потерять я могу максимум от 29 до 30.

Тогда фильтр, у которого половина коэффициентов равна 0, Вам не подойдет. Из Ваших условий не понятно о каких данных идет речь (действительные/комплексные), 30кГц - это вся полоса или половина, 29-30 - что это за цифры (дБ, %, кГц)?

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


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

Данные вещественные. Входной антиалисный аналоговый фильтр обеспечивает нужный уровень подавления примерно на 60кГц, хотя полезная полоса - до 30кГц. Соответственно частота дискретизации выбрана 120кГц. Далее необходимо цифровым фильтром подогнать полосу к 30кГц и продецимировав довести частоту дискретизации до 60кГц (опять же для вещественного сигнала).

 

Подход к проблеме в лоб в принципе задачу решает - Ремезом рассчитываю фильтр с переходной полосой от 29 до 30кГц, с пульсациями в полосе пропускания не более 0.1дБ и подавлением 96дБ. Фильтр получается где-то около 500 порядка.

 

Задача - попытаться найти решение не в лоб. По подсказке попробовал halfband.

В fdatool задал следующие параметры:

тип - halfband lowpass

filter order - 400

Fs=120000кГц

Fpass=29000кГц

 

Вроде у него каждый второй тап получился равен нулю. Да и пульсации и крутизна подходит.

 

При попытке применить опцию расчета децимирующего фильтра с коэффициентом децимации 2 и фильтром найквиста получился фильтр у которого порядок просто изумительный всего 47, но у него нужное подавление возникает только на 36кГц, т.е. у меня кусок от 24 до 30кГц будет искажен (а разрешается быть искажено только 29-30кГц) .

 

Так что пока я склоняюсь к halfband lowpass.

 

Кстати, я что-то не понял - в чем существенная разница между halfband lowpass расчетом фильтра и децимирующего фильтра Найквиста?

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

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


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

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

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

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

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

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

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

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

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

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