Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перестраиваемый полосовой фильтр
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
РРоман
Имеется следующая задача:
создать полосовой фильтр с заданной полосой пропускания (~100Гц), при этом необходимо иметь возможность "перемещать" его полосу пропускания заданном диапазоне частот (1Гц-3КГц).
Подскажите пожалуйста дилетанту можно ли вообще создать такой фильтр в цифровой форме? Как?
Можно ли для этого использовать ДПФ? Если да то как (в общих чертах).

Спасибо!
DRUID3
ДПФ можно, но перестраиваться он будет только по сетке частот, ввиду блочности алгоритма, к тому же АЧХ будет формы sinc(f) если не применять окон. Лучше применить алгоритм Герцеля - эффективнее ДПФ, FIFO по своей сути, плавно может перестраиваться по диапазону...
Михаил_K
Цитата(РРоман @ Mar 19 2008, 11:57) *
Имеется следующая задача:
создать полосовой фильтр с заданной полосой пропускания (~100Гц), при этом необходимо иметь возможность "перемещать" его полосу пропускания заданном диапазоне частот (1Гц-3КГц).
Подскажите пожалуйста дилетанту можно ли вообще создать такой фильтр в цифровой форме? Как?
Можно ли для этого использовать ДПФ? Если да то как (в общих чертах).

Спасибо!


Делал я такю штуку. Фильтр Юзвинского здесь рулит. А если работать с комплексным сигналом, то полосовой фильтр легко превращается в ФНЧ, а центральная полоса пропускания - есть частота гетеродина.
eugen_pcad_ru
На мой взгляд проще использовать фильтр (смысла перехода в частотную область не вижу).
Лучше сделать комплексный ФНЧ с перестраиваемым гетеродином.
Остаются вопросы по: степени подавления, неравномерности в полосе и т.п. (обычные вопросы по фильтрации).
alex_os
Цитата(РРоман @ Mar 19 2008, 11:57) *
Имеется следующая задача:
создать полосовой фильтр с заданной полосой пропускания (~100Гц), при этом необходимо иметь возможность "перемещать" его полосу пропускания заданном диапазоне частот (1Гц-3КГц).
Подскажите пожалуйста дилетанту можно ли вообще создать такой фильтр в цифровой форме? Как?
Можно ли для этого использовать ДПФ? Если да то как (в общих чертах).

Спасибо!

Это просто и без ДПФ. Берете считаете ФНЧ fir c частотой среза 50 Гц. Получаете коэф. h. Коэффициенты перестраиваемого(matlab) hf = h.*sin(2*pi*f/Fs*(1:length(h)), f - центральная частота настройки фильтра, Fs- частота дискретизации. ДПФ конечно можно использовать, только FFT придется считать. Примерно так делается: x - 512 отсчетов входного сигнал. Далее.
Код
      X = fft([x,zeros(1, 512]); % фурье транформанта входного сигнала дополненного нулями.
      F = fft([h,zeros(1, 1024-length(h)); %   фурье транформанта фильтра, можно считать один раз
      X = X.*F;  % свертка в частотной области
      y = ifft(X); %
      y(1:512) = y(1:512) + pred_y; % 512 отсчетов отфильтрованного сигнала
      pred_y = y(513:1024);   % отклик фильтра от предидущего блоке используется для следующего        
                                          % блока, начальный pred_y=0

Важно чтобы length(x) + length(h) < sizeFFT
ps: А вообще почитайте Рабинера с Голдом h**p://dsp-book.narod.ru/RG.html, там про это душевно
написано smile.gif
РРоман
Цитата(DRUID3 @ Mar 19 2008, 13:23) *
ДПФ можно, но перестраиваться он будет только по сетке частот, ввиду блочности алгоритма, к тому же АЧХ будет формы sinc(f) если не применять окон. Лучше применить алгоритм Герцеля - эффективнее ДПФ, FIFO по своей сути, плавно может перестраиваться по диапазону...


Спасибо большое всем за советы. Не сразу удалось попробовать.
Пытаюсь применить Герцеля и что-то совсем не то получается. Моделирую в MathCAD (наверное уже смешно?). На входе обычная синусоида. Пропускаю ее через фильтр:
y(n) = x(n) + 2cos(2*pi*f/Fd)*y(n-1) - y(n-2)

В результате получаю, то модулированную синусоиду, то вообще что-то не понятное...
Может быть подскажете где ошибка? Прилагаю скриншот из MathCAD ( в данном случае частота дискретизации 2000, искомая частота - 10, рассчитываю на 2000 отсчетов входного сигнала)
РРоман
Цитата(alex_os @ Mar 20 2008, 11:07) *
Это просто и без ДПФ. Берете считаете ФНЧ fir c частотой среза 50 Гц. Получаете коэф. h. Коэффициенты перестраиваемого(matlab) hf = h.*sin(2*pi*f/Fs*(1:length(h)), f - центральная частота настройки фильтра, Fs- частота дискретизации.
Важно чтобы length(x) + length(h) < sizeFFT


Поясните пожалуйста запись (1:length(h)) в формуле (я почти не знаком с м-языком).
proxi
Цитата(РРоман @ Mar 19 2008, 11:57) *
Имеется следующая задача:
создать полосовой фильтр с заданной полосой пропускания (~100Гц), при этом необходимо иметь возможность "перемещать" его полосу пропускания заданном диапазоне частот (1Гц-3КГц).
Подскажите пожалуйста дилетанту можно ли вообще создать такой фильтр в цифровой форме? Как?
Можно ли для этого использовать ДПФ? Если да то как (в общих чертах).

Спасибо!

Фильтр Юзвинского рулит... полагаю что его можно реализовать в цифровом виде, если нужно??
РРоман
Цитата(proxi @ Apr 28 2008, 16:46) *
Фильтр Юзвинского рулит... полагаю что его можно реализовать в цифровом виде, если нужно??

Может быть укажете какую-нибудь ссылочку по теме?
TSerg
Цитата(РРоман @ Mar 19 2008, 12:57) *
создать полосовой фильтр с заданной полосой пропускания (~100Гц), при этом необходимо иметь возможность "перемещать" его полосу пропускания заданном диапазоне частот (1Гц-3КГц).
Подскажите пожалуйста дилетанту можно ли вообще создать такой фильтр в цифровой форме? Как?
Можно ли для этого использовать ДПФ? Если да то как (в общих чертах).


Почему бы не взять книжку по цифровым фильтрам, да и не почитать ?
Как я понимаю, у Вас учебная задачаsmile.gif

Если Вы научитесь считать ФНЧ любым понятным Вам способом, то фильтры остальных типов легко приводятся к ФНЧ.
Например ПФ это два ФНЧ с требуемыми частотами среза и два сумматора.

Если хочется что-то поинтереснее, то см:
http://www.tsi.lv/RSR/vol04/RSR2000v04-07ae.pdf
РРоман
Цитата(TSerg @ Apr 28 2008, 17:13) *
Почему бы не взять книжку по цифровым фильтрам, да и не почитать ?
Как я понимаю, у Вас учебная задачаsmile.gif

Если Вы научитесь считать ФНЧ любым понятным Вам способом, то фильтры остальных типов легко приводятся к ФНЧ.
Например ПФ это два ФНЧ с требуемыми частотами среза и два сумматора.

Если хочется что-то поинтереснее, то см:
http://www.tsi.lv/RSR/vol04/RSR2000v04-07ae.pdf


Кое-что по фильтрам читал, но на решение поставленной задачи меня не хватает... Задача-то не учебная, а вполне рабочая.

За ссылочку большое спасибо! Попробуем... Только по-моему алгоритм Герцеля попроще считается, за то описанный в работе вариант, наверное, более гибкий.
TSerg
Цитата(РРоман @ Apr 29 2008, 10:47) *
Задача-то не учебная, а вполне рабочая.
Только по-моему алгоритм Герцеля попроще считается, за то описанный в работе вариант, наверное, более гибкий.


Тогда надо точнее описывать задачу и точнее будет ответ.

Вообще-то, алгоритм Герцеля, как разновидность DFT, занимается преобразованием свойств сигнала из временной области в частотную. Понятно также, что алгоритм блочный.
Заниматься его временными откликами - странная затея.
РРоман
Цитата(TSerg @ Apr 29 2008, 15:05) *
Вообще-то, алгоритм Герцеля, как разновидность DFT, занимается преобразованием свойств сигнала из временной области в частотную. Понятно также, что алгоритм блочный.
Заниматься его временными откликами - странная затея.

Так, вроде, все по книжке (Сергиенко А.П. "ЦОС"): "ДПФ можно представить набором фильтров, а дискретную фильтрацию можно организовать с помощью ДПФ", там еще и АЧХ двух частотных каналов ДПФ приведены...
TSerg
Цитата(РРоман @ Apr 30 2008, 10:21) *
Так, вроде, все по книжке (Сергиенко А.П. "ЦОС"): "ДПФ можно представить набором фильтров, а дискретную фильтрацию можно организовать с помощью ДПФ", там еще и АЧХ двух частотных каналов ДПФ приведены...


"Фильтр" Герцеля даст магнитуду по конкретной анализируемой частоте после обработки блока данных.
Более того, при совпадении частоты настройки "фильтра" и частоты входного сигнала "фильтр" становится неустойчивым, что мы и видели на Вашей картинке, а также см:
Нажмите для просмотра прикрепленного файла
Если же входная частота ушла, то "фильтр" имеет затухающий временной отклик.
Нажмите для просмотра прикрепленного файла
Но дело в том, что именно временной отклик в этом алгоритме мало кого интересует.
Unomano
А какая неравномерность в полосе пропускания, и какое подавление за ее пределами?
alex_os
Цитата(РРоман @ Apr 28 2008, 15:39) *
Поясните пожалуйста запись (1:length(h)) в формуле (я почти не знаком с м-языком).
Ну кажется в маткаде тоже самое записывается как i=1..длина_массива_h.
РРоман
Цитата(TSerg @ Apr 30 2008, 10:38) *
"Фильтр" Герцеля даст магнитуду по конкретной анализируемой частоте после обработки блока данных.
Более того, при совпадении частоты настройки "фильтра" и частоты входного сигнала "фильтр" становится неустойчивым, что мы и видели на Вашей картинке


Я реализовал алгоритм не полностью, а только ту его часть, которая вычисляется на каждом отсчете:
Код
s(n) = x(n) + 2cos(2πω)s(n − 1) − s(n − 2)

и решил, что это и будет мой фильтр :). Мощность сигнала (magnitude?) я вообще не считал. Правильно я поступал или нет? Можно ли вообще реализовать ВЕРМЕННУЮ фильтрацию с помощью ДПФ или Герцеля???

Цитата(Unomano @ May 3 2008, 14:04) *
А какая неравномерность в полосе пропускания, и какое подавление за ее пределами?


Конкретные цифры пока не известны. Фильтр нужен для звука, параметры буду подбирать экспериментально.

Цитата(alex_os @ May 3 2008, 18:32) *
Ну кажется в маткаде тоже самое записывается как i=1..длина_массива_h.


тогда не понимаю что означает запись:
hf = h.*sin(2*pi*f/Fs*(1:length(h))
нужно рассчитать для всех элементов массива? Тогда, какого массива?
TSerg
Цитата(РРоман @ May 6 2008, 13:06) *
Можно ли вообще реализовать ВЕРМЕННУЮ фильтрацию с помощью ДПФ или Герцеля???
Фильтр нужен для звука, параметры буду подбирать экспериментально.


Можно, но надо понимать что за этим стоит:
- перевод части сигнала из временной области в частотную (ДПФ);
- "ликвидация" ненужных частотных составляющих;
- перевод частотного представления измененного по спектру сигнала из частотной области во временную (ОДПФ).
Герцель ( как разновидность ДПФ) не особо подходит для этой задачи. Его задача - анализ сигнала на предмет наличия небольшого числа определенных частот.
ДПФ и ОДПФ работают, но, разумеется, надо использовать быстрые варианты.

Целесообразность использования преобразований Фурье или временной фильтрации на основе фильтров с КИХ- или БИХ-характеристиками определяется особенностями конкретной задачи.
Звук, инфразвук или СВЧ - не суть.
Т.е. должны быть определены требования к параметрам абстрактного фильтра.
alex_os
Цитата(РРоман @ May 6 2008, 12:06) *
тогда не понимаю что означает запись:
hf = h.*sin(2*pi*f/Fs*(1:length(h))
нужно рассчитать для всех элементов массива? Тогда, какого массива?

Все просто делается FIR ФНЧ, его коэф - массив h, размером length(h). каждый элемент массива поэлеметно (.*) перемножаете на синусоиду нужной вам частоты. в результате получается полосовой FIR с коэф. hf, центральная частота полосового фильтра f. ФНЧ h проектируете любым доступным способом исходя из нужных Вам полосы пропускания, затухания и пр. Получается табличка h, sin произвольной частоты легко посчитать. Все это, в большинстве случаев работает.
ps и забудьте про Герцеля smile.gif.
РРоман
Цитата(TSerg @ May 6 2008, 14:49) *
Целесообразность использования преобразований Фурье или временной фильтрации на основе фильтров с КИХ- или БИХ-характеристиками определяется особенностями конкретной задачи.
Звук, инфразвук или СВЧ - не суть.
Т.е. должны быть определены требования к параметрам абстрактного фильтра.

Спасибо, вроде бы понял. Отдельное спасибо за ссылку на статеечку, попробовал описанный там вариант фильтра - вроде на модели заработал, буду пробовать в железе.



Цитата(alex_os @ May 6 2008, 15:23) *
Все это, в большинстве случаев работает.
ps и забудьте про Герцеля :).


Угу, спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.