Jump to content

    
Sign in to follow this  
_sv_

перестраиваемый полосно-заграждающий фильтр.

Recommended Posts

Добрый день всем.

 

Сразу: железо реализовано на дохлом 32х разрядном арм.

Поэтому ищу алгоритмы с целочисленной арифметикой.

Спектр сигнала мне уже известен (в программе уже реализован анализатор спектра).

 

Моя проблема стара как мир. Возбуждение в звуковом тракте. Микрофон-Динамик.

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

Частоту возбуждения - знаю. Полосу подавления - тоже. Степень подавления - тоже могу высчитать.

 

Проблемы:

1) Что-то не нахожу реализаций полосно-заграждающих фильтров.

Неужели надо лепить ФНЧ+ФВЧ?

 

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

Неужели таковых нет?

 

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

Где искать?

 

Добавил:

Данные 16 бит, 16кгц дискретизация.

Edited by _sv_

Share this post


Link to post
Share on other sites

В этом классическом источнике для всех вариантов есть расчёт. Я и в целочисленном варианте (если точнее, fixed point) использовал эти алгоритмы.

Смотреть CFIRDsgnDlg::fir_dsgn в firdesign.cpp

 

зы: а почему не применяете старый как мир способ - сдвиг спектра? После нескольких путешествий по кольцу микрфон-устройство-динамик "возбуд" уходит за полосу пропускания.

Edited by Genadi Zawidowski

Share this post


Link to post
Share on other sites
а почему не применяете старый как мир способ - сдвиг спектра?
ответ на этот вопрос очевиден... я, к своему стыду, впервые слышу об этом методе.

благодарен вам за ликбез.

только пока не совсем понимаю каким образом реализовать сам сдвиг. ресамплингом?

 

В этом классическом источнике для всех вариантов есть расчёт.
пока бродил по просторам интернета, нашел вот такую ссылку:

A Collection of Useful C++ Classes for Digital Signal Processing

Ссылка: Коллекция

Загрузить весь архив сюда на форум не получается. Он чуток больше, чем 25мег.

Много полезного выкусил из архива. Оставил только эти "полезные классы".

DSPFiltersComplete.zip

Edited by _sv_

Share this post


Link to post
Share on other sites
сдвиг. ресамплингом?

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

 

А так - первое попавшееся

http://www.cyberforum.ru/digital-signal-pr...read864711.html

 

или поищите в яндексе или гугле или на данном форуме по ключевым словам

сдвиг спектра уивер

Edited by Genadi Zawidowski

Share this post


Link to post
Share on other sites

Перестраиваемый режекторный фильтр описан здесь:

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 град. сигнал полностью подавляется.

Share this post


Link to post
Share on other sites

Можете заранее расчитать коэффиценты заграждающих фильтров в FDATools пакета MATLAB,там,кстати можете экспортировать фильтр в C header. "С Coder" матлаба также позволит вам реализовать различные фильтры, причем вы сами настраиваете арифметику-с плавающей или фиксированной точкой. А про перестраиваемые фильтры обсуждение было в соседней теме "Цифровой узкополосный фильтр с динамически изменяемой центральной частотой".

Edited by Skryppy

Share this post


Link to post
Share on other sites
Можете заранее расчитать коэффиценты заграждающих фильтров
Да. Могу. Заранее рассчитать - не проблема. Но мне надо чуточку иное.

 

Существует ли способ перевода коэфицинетов "плавающей точки" в фиксированную?

Т.е. посчитать коэфицинеты в варианте "плавающей точки" (а1, а2, в0, в1 и в2) получается.

Вроде бы получается. По крайней мере - фильтр делает то, что я ожидаю.

Но перевод в фиксированную точку пока не удался.

 

Share this post


Link to post
Share on other sites
Да. Могу. Заранее рассчитать - не проблема. Но мне надо чуточку иное.

 

Существует ли способ перевода коэфицинетов "плавающей точки" в фиксированную?

Т.е. посчитать коэфицинеты в варианте "плавающей точки" (а1, а2, в0, в1 и в2) получается.

Вроде бы получается. По крайней мере - фильтр делает то, что я ожидаю.

Но перевод в фиксированную точку пока не удался.

в матлабе (FDATools пакета MATLAB) это делается галочкой - плавающая или фиксированная точка

Share this post


Link to post
Share on other sites
Это если есть машина времени... или поищите в яндексе или гугле или на данном форуме по ключевым словам

Добрый вечер еще раз.

Обойтись без фильтрации не получилось.

Приходится возвращаться к затронутой теме.

 

Нашел вот такой ресурс:

http://www.micromodeler.com/dsp/

В принципе - делает почти все, что мне надо.

 

Но есть пара вопросов:

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

Совершенно не понимаю каким образом они пересчитывают переполнение.

 

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

Как это считают?

 

Спасибо.

Share this post


Link to post
Share on other sites

Погуглите файл :Intro to System Generator Part 2

Ссылка:

http://webcache.googleusercontent.com/sear...mp;client=opera

 

Там посмотрите про fixed point,сложение чисел и переполнение при сложении (overflow) и т.д.

Edited by Skryppy

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this