|
Перестраиваемый полосовой фильтр |
|
|
|
Mar 19 2008, 08:57
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 24-01-08
Пользователь №: 34 374

|
Имеется следующая задача: создать полосовой фильтр с заданной полосой пропускания (~100Гц), при этом необходимо иметь возможность "перемещать" его полосу пропускания заданном диапазоне частот (1Гц-3КГц). Подскажите пожалуйста дилетанту можно ли вообще создать такой фильтр в цифровой форме? Как? Можно ли для этого использовать ДПФ? Если да то как (в общих чертах).
Спасибо!
|
|
|
|
|
Mar 20 2008, 07:07
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(РРоман @ 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, там про это душевно написано
--------------------
ну не художники мы...
|
|
|
|
|
Apr 28 2008, 10:24
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 24-01-08
Пользователь №: 34 374

|
Цитата(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 отсчетов входного сигнала)
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 28 2008, 12:39
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 24-01-08
Пользователь №: 34 374

|
Цитата(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)) в формуле (я почти не знаком с м-языком).
|
|
|
|
|
Apr 28 2008, 12:56
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 24-01-08
Пользователь №: 34 374

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

|
Цитата(РРоман @ Mar 19 2008, 12:57)  создать полосовой фильтр с заданной полосой пропускания (~100Гц), при этом необходимо иметь возможность "перемещать" его полосу пропускания заданном диапазоне частот (1Гц-3КГц). Подскажите пожалуйста дилетанту можно ли вообще создать такой фильтр в цифровой форме? Как? Можно ли для этого использовать ДПФ? Если да то как (в общих чертах). Почему бы не взять книжку по цифровым фильтрам, да и не почитать ? Как я понимаю, у Вас учебная задача  Если Вы научитесь считать ФНЧ любым понятным Вам способом, то фильтры остальных типов легко приводятся к ФНЧ. Например ПФ это два ФНЧ с требуемыми частотами среза и два сумматора. Если хочется что-то поинтереснее, то см: http://www.tsi.lv/RSR/vol04/RSR2000v04-07ae.pdf
|
|
|
|
|
Apr 29 2008, 06:47
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 24-01-08
Пользователь №: 34 374

|
Цитата(TSerg @ Apr 28 2008, 17:13)  Почему бы не взять книжку по цифровым фильтрам, да и не почитать ? Как я понимаю, у Вас учебная задача  Если Вы научитесь считать ФНЧ любым понятным Вам способом, то фильтры остальных типов легко приводятся к ФНЧ. Например ПФ это два ФНЧ с требуемыми частотами среза и два сумматора. Если хочется что-то поинтереснее, то см: http://www.tsi.lv/RSR/vol04/RSR2000v04-07ae.pdf Кое-что по фильтрам читал, но на решение поставленной задачи меня не хватает... Задача-то не учебная, а вполне рабочая. За ссылочку большое спасибо! Попробуем... Только по-моему алгоритм Герцеля попроще считается, за то описанный в работе вариант, наверное, более гибкий.
|
|
|
|
Guest_TSerg_*
|
Apr 29 2008, 11:05
|
Guests

|
Цитата(РРоман @ Apr 29 2008, 10:47)  Задача-то не учебная, а вполне рабочая. Только по-моему алгоритм Герцеля попроще считается, за то описанный в работе вариант, наверное, более гибкий. Тогда надо точнее описывать задачу и точнее будет ответ. Вообще-то, алгоритм Герцеля, как разновидность DFT, занимается преобразованием свойств сигнала из временной области в частотную. Понятно также, что алгоритм блочный. Заниматься его временными откликами - странная затея.
|
|
|
|
|
Apr 30 2008, 06:21
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 24-01-08
Пользователь №: 34 374

|
Цитата(TSerg @ Apr 29 2008, 15:05)  Вообще-то, алгоритм Герцеля, как разновидность DFT, занимается преобразованием свойств сигнала из временной области в частотную. Понятно также, что алгоритм блочный. Заниматься его временными откликами - странная затея. Так, вроде, все по книжке (Сергиенко А.П. "ЦОС"): "ДПФ можно представить набором фильтров, а дискретную фильтрацию можно организовать с помощью ДПФ", там еще и АЧХ двух частотных каналов ДПФ приведены...
|
|
|
|
Guest_TSerg_*
|
Apr 30 2008, 06:38
|
Guests

|
Цитата(РРоман @ Apr 30 2008, 10:21)  Так, вроде, все по книжке (Сергиенко А.П. "ЦОС"): "ДПФ можно представить набором фильтров, а дискретную фильтрацию можно организовать с помощью ДПФ", там еще и АЧХ двух частотных каналов ДПФ приведены... "Фильтр" Герцеля даст магнитуду по конкретной анализируемой частоте после обработки блока данных. Более того, при совпадении частоты настройки "фильтра" и частоты входного сигнала "фильтр" становится неустойчивым, что мы и видели на Вашей картинке, а также см:
Если же входная частота ушла, то "фильтр" имеет затухающий временной отклик.
Но дело в том, что именно временной отклик в этом алгоритме мало кого интересует.
|
|
|
|
|
May 3 2008, 14:32
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(РРоман @ Apr 28 2008, 15:39)  Поясните пожалуйста запись (1:length(h)) в формуле (я почти не знаком с м-языком). Ну кажется в маткаде тоже самое записывается как i=1..длина_массива_h.
--------------------
ну не художники мы...
|
|
|
|
|
May 6 2008, 09:06
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 24-01-08
Пользователь №: 34 374

|
Цитата(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)) нужно рассчитать для всех элементов массива? Тогда, какого массива?
|
|
|
|
Guest_TSerg_*
|
May 6 2008, 10:49
|
Guests

|
Цитата(РРоман @ May 6 2008, 13:06)  Можно ли вообще реализовать ВЕРМЕННУЮ фильтрацию с помощью ДПФ или Герцеля??? Фильтр нужен для звука, параметры буду подбирать экспериментально. Можно, но надо понимать что за этим стоит: - перевод части сигнала из временной области в частотную (ДПФ); - "ликвидация" ненужных частотных составляющих; - перевод частотного представления измененного по спектру сигнала из частотной области во временную (ОДПФ). Герцель ( как разновидность ДПФ) не особо подходит для этой задачи. Его задача - анализ сигнала на предмет наличия небольшого числа определенных частот. ДПФ и ОДПФ работают, но, разумеется, надо использовать быстрые варианты. Целесообразность использования преобразований Фурье или временной фильтрации на основе фильтров с КИХ- или БИХ-характеристиками определяется особенностями конкретной задачи. Звук, инфразвук или СВЧ - не суть. Т.е. должны быть определены требования к параметрам абстрактного фильтра.
|
|
|
|
|
May 6 2008, 11:23
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(РРоман @ 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 и забудьте про Герцеля  .
--------------------
ну не художники мы...
|
|
|
|
|
May 7 2008, 12:44
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 24-01-08
Пользователь №: 34 374

|
Цитата(TSerg @ May 6 2008, 14:49)  Целесообразность использования преобразований Фурье или временной фильтрации на основе фильтров с КИХ- или БИХ-характеристиками определяется особенностями конкретной задачи. Звук, инфразвук или СВЧ - не суть. Т.е. должны быть определены требования к параметрам абстрактного фильтра. Спасибо, вроде бы понял. Отдельное спасибо за ссылку на статеечку, попробовал описанный там вариант фильтра - вроде на модели заработал, буду пробовать в железе. Цитата(alex_os @ May 6 2008, 15:23)  Все это, в большинстве случаев работает. ps и забудьте про Герцеля :). Угу, спасибо.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|