Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: перестраиваемый полосно-заграждающий фильтр.
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
_sv_
Добрый день всем.

Сразу: железо реализовано на дохлом 32х разрядном арм.
Поэтому ищу алгоритмы с целочисленной арифметикой.
Спектр сигнала мне уже известен (в программе уже реализован анализатор спектра).

Моя проблема стара как мир. Возбуждение в звуковом тракте. Микрофон-Динамик.
Что хочется попробовать: перестраиваемый полосно-заграждающий фильтр.
Частоту возбуждения - знаю. Полосу подавления - тоже. Степень подавления - тоже могу высчитать.

Проблемы:
1) Что-то не нахожу реализаций полосно-заграждающих фильтров.
Неужели надо лепить ФНЧ+ФВЧ?

2) Что-то не нахожу реализаций с целочисленной арифметикой.
Неужели таковых нет?

3) Вообще мало реализаций перестраиваемых полосно-заградительных фильтров.
Где искать?

Добавил:
Данные 16 бит, 16кгц дискретизация.
Genadi Zawidowski
В этом классическом источнике для всех вариантов есть расчёт. Я и в целочисленном варианте (если точнее, fixed point) использовал эти алгоритмы.
Смотреть CFIRDsgnDlg::fir_dsgn в firdesign.cpp

зы: а почему не применяете старый как мир способ - сдвиг спектра? После нескольких путешествий по кольцу микрфон-устройство-динамик "возбуд" уходит за полосу пропускания.
_sv_
Цитата(Genadi Zawidowski @ Sep 21 2014, 10:03) *
а почему не применяете старый как мир способ - сдвиг спектра?
ответ на этот вопрос очевиден... я, к своему стыду, впервые слышу об этом методе.
благодарен вам за ликбез.
только пока не совсем понимаю каким образом реализовать сам сдвиг. ресамплингом?

Цитата(Genadi Zawidowski @ Sep 21 2014, 10:03) *
В этом классическом источнике для всех вариантов есть расчёт.
пока бродил по просторам интернета, нашел вот такую ссылку:
A Collection of Useful C++ Classes for Digital Signal Processing
Ссылка: Коллекция
Загрузить весь архив сюда на форум не получается. Он чуток больше, чем 25мег.
Много полезного выкусил из архива. Оставил только эти "полезные классы".
Genadi Zawidowski
Цитата
сдвиг. ресамплингом?

Это если есть машина времени...

А так - первое попавшееся
http://www.cyberforum.ru/digital-signal-pr...read864711.html

или поищите в яндексе или гугле или на данном форуме по ключевым словам
Код
сдвиг спектра уивер
анатолий
Перестраиваемый режекторный фильтр описан здесь:
Regalіa P., Mіtra S.K., Vaіdyanathan P.P. The Dіgіtal All-Pass Fіlter: A Versatіle Sіgnal Processіng Buіldіng Block // Proc. ІEEE. -1988. -V.76. -№1. - p.19 - 37.
Есть перевод в ТИИЭР.
Суть: выход фазового фильтра складывается со входом - на частоте поворота на 180 град. сигнал полностью подавляется.
Skryppy
Можете заранее расчитать коэффиценты заграждающих фильтров в FDATools пакета MATLAB,там,кстати можете экспортировать фильтр в C header. "С Coder" матлаба также позволит вам реализовать различные фильтры, причем вы сами настраиваете арифметику-с плавающей или фиксированной точкой. А про перестраиваемые фильтры обсуждение было в соседней теме "Цифровой узкополосный фильтр с динамически изменяемой центральной частотой".
_sv_
Цитата(Skryppy @ Sep 23 2014, 16:00) *
Можете заранее расчитать коэффиценты заграждающих фильтров
Да. Могу. Заранее рассчитать - не проблема. Но мне надо чуточку иное.

Существует ли способ перевода коэфицинетов "плавающей точки" в фиксированную?
Т.е. посчитать коэфицинеты в варианте "плавающей точки" (а1, а2, в0, в1 и в2) получается.
Вроде бы получается. По крайней мере - фильтр делает то, что я ожидаю.
Но перевод в фиксированную точку пока не удался.
des00
Цитата(_sv_ @ Sep 24 2014, 15:22) *
Но перевод в фиксированную точку пока не удался.

round(pipa*2^N) не работает, а потом проверить на устойчивость ?
Maverick
Цитата(_sv_ @ Sep 24 2014, 11:22) *
Да. Могу. Заранее рассчитать - не проблема. Но мне надо чуточку иное.

Существует ли способ перевода коэфицинетов "плавающей точки" в фиксированную?
Т.е. посчитать коэфицинеты в варианте "плавающей точки" (а1, а2, в0, в1 и в2) получается.
Вроде бы получается. По крайней мере - фильтр делает то, что я ожидаю.
Но перевод в фиксированную точку пока не удался.

в матлабе (FDATools пакета MATLAB) это делается галочкой - плавающая или фиксированная точка
_sv_
Цитата(Genadi Zawidowski @ Sep 21 2014, 15:59) *
Это если есть машина времени... или поищите в яндексе или гугле или на данном форуме по ключевым словам

Добрый вечер еще раз.
Обойтись без фильтрации не получилось.
Приходится возвращаться к затронутой теме.

Нашел вот такой ресурс:
http://www.micromodeler.com/dsp/
В принципе - делает почти все, что мне надо.

Но есть пара вопросов:
1) Можно увидеть, что дизайнер, пересчитывая коэффициенты, подбирает их переполнение Q18, Q13 и т.д.
Совершенно не понимаю каким образом они пересчитывают переполнение.

2) Сдвиги... В этом же примере как-то определяют те же сдвиги влево-вправо на 13, 14, 15 (и т.д.) битов.
Как это считают?

Спасибо.
Skryppy
Погуглите файл :Intro to System Generator Part 2
Ссылка:
http://webcache.googleusercontent.com/sear...mp;client=opera

Там посмотрите про fixed point,сложение чисел и переполнение при сложении (overflow) и т.д.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.