Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Цифровой полосовой фильтр
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
e-tarasov
Задача такова. Требуется реализовать цифровой полосовой фильтр на 2000Гц с полосой 10Гц и максимально высоким затуханием и что интересно нужна фаза сигнала (но про это потом). Проц не сигнальный процесс фильтрации необязательно непрерывный. Раньше ЦОС не занимался на считая простеньких ФНЧ 2-го порядка. Надыбал алгоритм БПФ. Алгоритм БПФ позволяет использовать целочисленную математику что хорошо и при этом выделяет фазу сигнала. Господа специалисты а может это то что мне надо. Если да то может быть тогда для одной частоты есть упрощение алгоритма.
Не подскажите заодно сколько отсчетов надо выбрать и какую частоту дискретизации. Плз. Фазу то я по любому думаю вытащу. Но с обычным фильтром траблы с непрерывной фильтрацией или с переходными процессами после подключения. Может кто уже нечто подобное реализовывал. Спасибо.
DRUID3
...частота 2000 берем 4096 частоту дискретизации (например, главное не ниже Котельникова). Берем FFT на 2048 отсчетов. На Q подаем "0"-и. Получаем 2048 частотных отсчета. Ваш - 2000ный. Его условная ширина полосы 1 Hz, потому берите 11 отсчетов, будет полосовой фильтр. Значит, делаем ДПФ только для 1995…2005-го частотных отсчетов (на вход FDT все равно идет 2048 сэмплов). Вот Вам и фильтр (АЧХ которого определяется количеством точек преобразования - временем накопления и функцией окна) с возможностью узнать фазу...
Самурай
Цитата(DRUID3 @ Jun 27 2007, 15:47) *
...частота 2000 берем 4096 частоту дискретизации (например, главное не ниже Котельникова). Берем FFT на 2048 отсчетов. На Q подаем "0"-и. Получаем 2048 частотных отсчета. Ваш - 2000ный. Его условная ширина полосы 1 Hz, потому берите 11 отсчетов, будет полосовой фильтр. Значит, делаем ДПФ только для 1995…2005-го частотных отсчетов (на вход FDT все равно идет 2048 сэмплов). Вот Вам и фильтр (АЧХ которого определяется количеством точек преобразования - временем накопления и функцией окна) с возможностью узнать фазу...


Не надо только забывать про антиалиасинговый фильтр, который должен резать все частоты больше 2048 Герц. Особенно с учетом первоначального требования "...максимально высоким затуханием...". А это может оказаться далеко не так просто, так как переходная зона у такого фильтра должна быть всего лишь 2048-2005 = 43Гц smile.gif.
DRUID3
Цитата(Самурай @ Jun 27 2007, 15:11) *
Не надо только забывать про антиалиасинговый фильтр, который должен резать все частоты больше 2048 Герц. Особенно с учетом первоначального требования "...максимально высоким затуханием...". А это может оказаться далеко не так просто, так как переходная зона у такого фильтра должна быть всего лишь 2048-2005 = 43Гц smile.gif.

Нет, я же совсем не против, я просто привел расчет "как следует мыслить". А уж автор топика пусть решит все на месте. smile.gif. Кстати забыл сказать, что ДПФ для такого узкого участка более эффективно чем БПФ с отбрасыванием ненужных частотных сэмплов. Потому его и применяем. Пишется оно исключительно просто если помнить определение преобразования Фурье и формулу комплексного умножения.
el34
DRUID3>Кстати забыл сказать, что ДПФ для такого узкого участка более эффективно чем БПФ с отбрасыванием ненужных частотных сэмплов. Потому его и применяем. Пишется оно исключительно просто если помнить определение преобразования Фурье и формулу комплексного умножения.

еще можно попробовать алгоритм Герцеля
Goertzel algorithm
(см гугл)
anton
Цитата(Самурай @ Jun 27 2007, 16:11) *
Не надо только забывать про антиалиасинговый фильтр, который должен резать все частоты больше 2048 Герц. Особенно с учетом первоначального требования "...максимально высоким затуханием...". А это может оказаться далеко не так просто, так как переходная зона у такого фильтра должна быть всего лишь 2048-2005 = 43Гц smile.gif.


Фильтр должен быть аналоговый и резать частоты (для частоты семплирования 2000) выше 1000.
Затухания для БПФ реализуются окнами ханна чебышева и.т.д.
БПФ необходим тебе 256 или 512 (окна расширяют фильтр для ханна кажется 1.3 для других как правило больше)
Впринципе из НЧ полосовой можно получить комплексным гетеродинном.
DRUID3
Цитата(anton @ Jun 27 2007, 17:43) *
Фильтр должен быть аналоговый и резать частоты (для частоты семплирования 2000) выше 1000.
Затухания для БПФ реализуются окнами ханна чебышева и.т.д.
БПФ необходим тебе 256 или 512 (окна расширяют фильтр для ханна кажется 1.3 для других как правило больше)



Дааа...без психоделиков понять Ваш пост сложновато, но ведь LSD страшно отвлекает от работы галлюцинациями biggrin.gif .
Во-первых автору надо часто 2 kHz. зачем ему фильтр на 1 kHz?
Во-вторых ДПФ (а не БПФ) ему необходим как можно на большее число точек. Т.к. именно эти точки и задают добротность фильтра на основе ДПФ. А окно еще и потребует оверсэмпленга.


Цитата(anton @ Jun 27 2007, 17:43) *
Впринципе из НЧ полосовой можно получить комплексным гетеродинном.


А ето вообще нИасилил. Сместить 2 kHz комплексным гетеродином...куда??? Вниз, в максимум фликкер шума 07.gif ?
el34
DRUID3>А ето вообще нИасилил. Сместить 2 kHz комплексным гетеродином...куда??? Вниз, в максимум фликкер шума

так в цифрe....
e-tarasov
Спасибо за ответы. Насчет ДПФ. Не получится ли что добротность фильтра уменьшится из-за использования не целочисленной математики ведь ДПФ хорош в теории но на практике вопрос. Насчет ФНЧ я так понял частота среза должна быть не более половины частоты дискретизации это понятно. Вопрос с количеством отсчетов для меня пока неясен. Алгоритм Герцеля чем он хорош. Что такое окно ханна и оверсемпленг. И вопрос про затухание к примеру насколько сравнимо с обычным цифровым. Мне честно говоря непонятно потому что ранее ЦОС не занимался. Еще раз спасибо за ответы.
Alex11
И еще интересный вопрос к автору: "цифровой полосовой фильтр на 2000Гц с полосой 10Гц" - это фильтр с полосой от 1995 до 2005 Гц? А частота дискретизации при этом какая? Или 2000 Гц - частота дискретизации? Есть такая полезная программка Filter Solutions. Она позволяет помоделировать разные варианты фильтров, в том числе и цифровых, увидеть как зависит результат от точности счета, и в итоге может сгенерировать программку на С с реализацией фильтра.
e-tarasov
DRUID3 правильно пишет по теореме Котельникова *2 но надо с запасом Крякнутую Filter Solutions не нашел есть же mathlab. А вот по матлабу вопросик может ли он расчитывать и моделировать фильтр БПФ и как.
DRUID3
Цитата(e-tarasov @ Jun 28 2007, 07:29) *
Не получится ли что добротность фильтра уменьшится из-за использования не целочисленной математики ведь ДПФ хорош в теории но на практике вопрос.

biggrin.gif Нет, ДПФ хорош сам по себе и совершенно не имеет никакого отношения к целочисленной арифметике.
Цитата(e-tarasov @ Jun 28 2007, 07:29) *
Что такое окно ханна и оверсемпленг.

Окно - функция, на которую множат интервал накопления, это задает АЧХ каждого частотного отсчета. Если он вообще ни на что не умножен, то окно прямоугольное и АЧХ sinc(f).
Оверсемпленг это когда отсчетов берут в несколько раз (а лучше на несколько порядков) больше чем нужно по Котельникову. Делают это для
1) уменьшения влияния случайных помех.
2)уменьшения апертурой погрешности АЦП.
3)при работе не с прямоугольными окнами для исключения их влияния на сигнал.


Цитата(e-tarasov @ Jun 28 2007, 07:29) *
И вопрос про затухание к примеру насколько сравнимо с обычным цифровым.

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


Цитата(e-tarasov @ Jun 28 2007, 12:18) *
DRUID3 правильно пишет по теореме Котельникова *2 но надо с запасом Крякнутую Filter Solutions не нашел есть же mathlab. А вот по матлабу вопросик может ли он расчитывать и моделировать фильтр БПФ и как.

Может, но я, например его не использую принципиально smile.gif . Это связано с моими специфическими убеждениями, но советовать всем поступать так же я просто не в праве. А Filter Solutions насколько я помню фильтров, указывающих фазу, не строит, или я туплю 07.gif ?

Цитата(e-tarasov @ Jun 28 2007, 07:29) *
Алгоритм Герцеля чем он хорош.

Кстати, алгоритм Герцеля в Вашем случае оптимален. Благодарите el34. Я почему-то о нем и не подумал, но ведь у Вас все условия, так сказать. Узкий участок (хоть он работает для любого, но даже на таком он даст фору ДПФ) спектра, и действительный сигнал на входе. Помимо меньших вычислительных затрат Герцель имеет еще одно серьезное преимущество - у него нет шага сетки частот, т.е. настройка производится плавно. Да и времени накопления нет - т.е. время вычисления "наличия" частоты ~ее периоду и просто суперовские свойства для параллельной организации вычислений (например PLIS). Кстати на WiKi есть исходник.
-=ВН=-
Цитата(DRUID3 @ Jun 28 2007, 14:46) *
biggrin.gif Нет, ДПФ хорош сам по себе и совершенно не имеет никакого отношения к целочисленной арифметике.

Окно - функция, на которую множат интервал накопления, это задает АЧХ каждого частотного отсчета. Если он вообще ни на что не умножен, то окно прямоугольное и АЧХ sinc(f).
Оверсемпленг это когда отсчетов берут в несколько раз (а лучше на несколько порядков) больше чем нужно по Котельникову. Делают это для
1) уменьшения влияния случайных помех.
2)уменьшения апертурой погрешности АЦП.
3)при работе не с прямоугольными окнами для исключения их влияния на сигнал.
Если честно, первый раз такое слышу biggrin.gif . Там нет никакого затухания, т.к. все можно домножить biggrin.gif , но есть шумы (включая дискретизацию или округление) ну и такие понятия как коэффициент передачи, например при умножениях двух сигналов в формате int это важно.
Может, но я, например его не использую принципиально smile.gif . Это связано с моими специфическими убеждениями, но советовать всем поступать так же я просто не в праве. А Filter Solutions насколько я помню фильтров, указывающих фазу, не строит, или я туплю 07.gif ?
Кстати, алгоритм Герцеля в Вашем случае оптимален. Благодарите el34. Я почему-то о нем и не подумал, но ведь у Вас все условия, так сказать. Узкий участок (хоть он работает для любого, но даже на таком он даст фору ДПФ) спектра, и действительный сигнал на входе. Помимо меньших вычислительных затрат Герцель имеет еще одно серьезное преимущество - у него нет шага сетки частот, т.е. настройка производится плавно. Да и времени накопления нет - т.е. время вычисления "наличия" частоты ~ее периоду и просто суперовские свойства для параллельной организации вычислений (например PLIS). Кстати на WiKi есть исходник.

Жуткая смесь smile.gif
"Оверсампленг" - это не увеличение числа отсчетов, это повышение ч-ты дискретизации.
Алгоритм Герцеля - алгоритм вычисления ДПФ, со всеми вытекающими. Преимущества - экономия двойная по сравнению с лобовым вычислением. Других преимуществ нет.
Вообще вопрос был о фильтрации. Если автору нужен отфильтрованный сигнал, то ДПФ и даже с окном его не спасут. smile.gif
DRUID3
Цитата(-=ВН=- @ Jun 28 2007, 14:51) *
Жуткая смесь smile.gif
"Оверсампленг" - это не увеличение числа отсчетов, это повышение ч-ты дискретизации.

Да, именно это я и хотел сказать... Прошу прощения у тех, кто не может или ленится выхватывать из контекста... blush.gif

Цитата(-=ВН=- @ Jun 28 2007, 14:51) *
Алгоритм Герцеля - алгоритм вычисления ДПФ, со всеми вытекающими. Преимущества - экономия двойная по сравнению с лобовым вычислением. Других преимуществ нет.

Что Вы говорите... biggrin.gif Хотя, может в Вашей реализации это так и есть ... lol.gif
-=ВН=-
Цитата(DRUID3 @ Jun 28 2007, 16:10) *
Да, именно это я и хотел сказать... Прошу прощения у тех, кто не может или ленится выхватывать из контекста... blush.gif

Ну если Вы именно это и хотели сказать biggrin.gif , то необходимость оверсампленга при применении окна вызывает большие сомнения. lol.gif :
Цитата(DRUID3 @ Jun 28 2007, 16:10) *
Что Вы говорите... biggrin.gif Хотя, может в Вашей реализации это так и есть ... lol.gif

Да это у кого угодно так lol.gif lol.gif lol.gif
DRUID3
Цитата(-=ВН=- @ Jun 28 2007, 15:30) *
Ну если Вы именно это и хотели сказать biggrin.gif , то необходимость оверсампленга при применении окна вызывает большие сомнения. lol.gif

Оу-у-у... Да у нас тут теоретики завелись... biggrin.gif Ну ничего, еще пару лет посидите над практикой и поймете зачем при применении окна - оверсемплинг...

Цитата(-=ВН=- @ Jun 28 2007, 15:30) *
Да это у кого угодно так lol.gif lol.gif lol.gif

Вобщем ответ такой же, как и на первую реплику... biggrin.gif

P.S.: вот за это я и ненавижу Матлаб... smile.gif
-=ВН=-
Цитата(DRUID3 @ Jun 28 2007, 16:39) *
Оу-у-у... Да у нас тут теоретики завелись... biggrin.gif Ну ничего, еще пару лет посидите над практикой и поймете зачем при применении окна - оверсемплинг...
Вобщем ответ такой же, как и на первую реплику... biggrin.gif

P.S.: вот за это я и ненавижу Матлаб... smile.gif


Ясно. Сказать, зачем нужен оверсамленг при применении окна, и как он уничтожает влияния окна на сигнал, Вы не можете. Аналогично и с мифическими преимуществми (кроме вычислительных) алгоритма Герцеля. Этого собственно следовало ожидать.
Ваша ссылка на 2-х годичную практику выжала у меня слезу. Скупую мужскую слезу. Я плачу, мой друг. Я плачу. biggrin.gif
alex_os
Цитата(e-tarasov @ Jun 27 2007, 14:21) *
Задача такова. Требуется реализовать цифровой полосовой фильтр на 2000Гц с полосой 10Гц и максимально высоким затуханием и что интересно нужна фаза сигнала (но про это потом). Проц не сигнальный процесс фильтрации необязательно непрерывный. Раньше ЦОС не занимался на считая простеньких ФНЧ 2-го порядка. Надыбал алгоритм БПФ. Алгоритм БПФ позволяет использовать целочисленную математику что хорошо и при этом выделяет фазу сигнала. Господа специалисты а может это то что мне надо. Если да то может быть тогда для одной частоты есть упрощение алгоритма.
Не подскажите заодно сколько отсчетов надо выбрать и какую частоту дискретизации. Плз. Фазу то я по любому думаю вытащу. Но с обычным фильтром траблы с непрерывной фильтрацией или с переходными процессами после подключения. Может кто уже нечто подобное реализовывал. Спасибо.

одночастное ДПФ Вам мало поможет, точнее никак не поможет.
Сделайте FIR с децимацией. Т.е примерно так: Частота дискретизации скажем 6000 Гц, синтезируете полосовой fir на 2000Гц с полосой 10Гц с требуемым затуханием(он получится весьма длинный но это ничего smile.gif) . Выход фильтра децимируете в 100 раз и получаете ваш сигнал снесенный на частоту rem( 2000, 6010/100)=20 Гц и какбы оцифрованный с частотой 60 Гц . Выход фильтра нужно рассчитывать один раз на 100 входных отсчетов в этом и есть экономия smile.gif.
el34
alex_os>Сделайте FIR с децимацией. Т.е примерно так: Частота дискретизации скажем 6000 Гц, синтезируете полосовой fir на 2000Гц с полосой 10Гц с требуемым затуханием(он получится весьма длинный но это ничего

более эффективным тогда уж будет комплексное гетеродинирование (2KHz) с последующей многоступенчатой децимацией - это выгоднее , чем один длинный полосовой фильтр.....
имхо
alex_os
Цитата(el34 @ Jul 1 2007, 12:41) *
alex_os>Сделайте FIR с децимацией. Т.е примерно так: Частота дискретизации скажем 6000 Гц, синтезируете полосовой fir на 2000Гц с полосой 10Гц с требуемым затуханием(он получится весьма длинный но это ничего

более эффективным тогда уж будет комплексное гетеродинирование (2KHz) с последующей многоступенчатой децимацией - это выгоднее , чем один длинный полосовой фильтр.....
имхо

Почему Вы думаете , что многоступенчатая децимация будет эффективнее? Ну разве что памяти может меньше потребуется...
e-tarasov
Не знаю пока что такое алгоритм Герцеля и в чем его суть так что пока склоняюсь все таки к ДПФ так как он дает сразу и амплитуду и фазу сигнала. А в чем суть комплексного гетеродина на пальцах можно объяснить? С обычным цифровым полосовым фильтром наверное придется отклонить так как его необходимо непрерывно крутить что достаточно накладно ударит по ресурсам проца. Ладно скоро придет комплектация будем пробывать. А вообще то пора в отпуск!!! Всем откликнувшимся спасибо.
el34
alex_os>Почему Вы думаете , что многоступенчатая децимация будет эффективнее? Ну разве что памяти может меньше потребуется...

потому, что тут надо выполнить две одинаковые (Re и Im) фнч фильтрации - фильтр получается проще и думаю точнее ....
и при многоступенчатой децимации мы имеем и постепенное понижение частоты квантования и сл-но на входной,самой высокой, работает самый короткий фильтр и т.далее с понижением частоты длина фильтра увеличивается...
либо децимацию можно выполнить при помощи CIC фильтров , что является особенно эффективным методом для целочисленной арифметики (и не только)...

e-tarasov>А в чем суть комплексного гетеродина на пальцах можно объяснить?
умножаем вход на sin и cos 2kHz а потом фильтруем оба канала одинаковыми фнч и децимируем ....
fontp
Цитата(el34 @ Jul 2 2007, 14:53) *
e-tarasov>А в чем суть комплексного гетеродина на пальцах можно объяснить?
умножаем вход на sin и cos 2kHz а потом фильтруем оба канала одинаковыми фнч и децимируем ....


Модуляция-децимация-демодуляция рассматривается просто как особо эффективный способ полосовой фильтрации. Тут статейка
Multi-rate filter design
У этой MDS раньше продавалась программка, которая писала такие фльтры на С.
Теперь её с сайта убрали (или переименовали), но при желании, наверно можно в сети найти. Понятно, что за так :-)
alex_os
Цитата(el34 @ Jul 2 2007, 14:53) *
потому, что тут надо выполнить две одинаковые (Re и Im) фнч фильтрации - фильтр получается проще и думаю точнее ....
и при многоступенчатой децимации мы имеем и постепенное понижение частоты квантования и сл-но на входной,самой высокой, работает самый короткий фильтр и т.далее с понижением частоты длина фильтра увеличивается...

Так у Вас получается два фильтра и следовательно затраты на него в двое больше по сравнения с вещественным полосовым фильтром. Далее рискну предположить что при заданном уровне наложений при децимации, длина FIR (L), пропорциональная требуемому коэф. децимации N, т.е. усреденные выч. затраты на fir дециматор будут: С =L/N=k*N/N = k, т.е. не зависят от коэф. децимации (имеется ввиду фир в общем виде не CIC, не halfband).

зы: бесспорно самая не затратная структура при узколосной фильтрации-децимации это перенос на нулевую частоту и далее CIC + FIR.
blackswan
мне необходимо было сделать полосовой БИХ-фильтр для 14КГц... в Матлабе получил коэффициенты из следующего
[n14,Wn14]=cheb1ord(Wp14,Ws14,Rp,Rs); [b14,a14]=cheby1(n14,Rp,Wn14) ;
Wp14=[12000 16000]/Fn; Ws14=[11000 17000]/Fn; Rp=1; Rs = 19; Fn=64000;

и в самом Матлабе на графиках видно, что всё фильтруется... потом была поставлена задача всё это повторить на С++.... прогу написал, но функция фильтрации не фильтрует как надо... я вбил коэффициенты в fdatool в Импорте фильтра и она мне показала совсем другой фильтр, а точнее ерунду какую-то.... програмка Ciirf1.0 выдала мне другие коэффициенты, но с ними тоже не работает... я думаю, что дело в формуле... видел я два варианта: разность полиномов (BiXi-AiYi) и деление полинома BiXi на AiYi .... причем разные источники меняют местами A и B... уже совсем запутался в этом... помогите разобраться...
BratherLU
Загляните в хелп матлаба - Help -> Full Product Family Help -> во вкладке index наберите Direct Form - по первой же ссылке увидите схему реализации алгоритма БИХ фильтрации в прямой форме 1 (Direct Form 1) - там очень хорошо все разрисовано без формул практически
blackswan
а других источников нет?... в моей версии хелп какой-то урезанный...
BratherLU
http://www.busim.ee.boun.edu.tr/~resources/fdq.pdf
В этой доке Property Reference -> Quantized Filter Property reference -> Filter Structure
blackswan
я там нашел только в виде блок-схем, но в них не очень разбираюсь, и в формулу не перевел..
DRUID3
Цитата(-=ВН=- @ Jun 28 2007, 15:47) *
Ясно. Сказать, зачем нужен оверсамленг при применении окна, и как он уничтожает влияния окна на сигнал, Вы не можете. Аналогично и с мифическими преимуществми (кроме вычислительных) алгоритма Герцеля. Этого собственно следовало ожидать.
Ваша ссылка на 2-х годичную практику выжала у меня слезу. Скупую мужскую слезу. Я плачу, мой друг. Я плачу. biggrin.gif

biggrin.gif Про метод перекрывающихся окон слышали? Чтобы сохранить АЧХ частотного отсчета при использовании окна, но убрать его влияние на непрерывную амплитудную последовательность отсчетов и применяют оверсемплинг...

Герцель на основе FIFO. А БПФ на основе окна. Нельзя сказать что это преимущества или недостатки, но в природе вообще есть только особенности... smile.gif
-=ВН=-
Цитата(DRUID3 @ Aug 14 2007, 16:45) *
biggrin.gif Про метод перекрывающихся окон слышали? Чтобы сохранить АЧХ частотного отсчета при использовании окна, но убрать его влияние на непрерывную амплитудную последовательность отсчетов и применяют оверсемплинг...

Герцель на основе FIFO. А БПФ на основе окна. Нельзя сказать что это преимущества или недостатки, но в природе вообще есть только особенности... smile.gif

Товарищ DRUID3, не говорите ерундой, ладно?
blackfin
Цитата(DRUID3 @ Aug 14 2007, 16:45) *
Чтобы сохранить АЧХ частотного отсчета при использовании окна, но убрать его влияние на непрерывную амплитудную последовательность отсчетов и применяют оверсемплинг...
Насколько я помню, оверсамплинг применяют для ослабления требований к аналоговому фильтру на входе АЦП.
Сказанное, можно проилюстрировать на примере проигрывателя компакт-диска или цифрового магнитофона с качеством CD.
В этом случае на вход АЦП обычно подается звуковой сигнал, спектр частот которого ограничен полосой 0-22кГц.
Минимально возможная частота дискретизации должна быть, как известно, > 2*Fв=2*22кГц
и в CD проигрывателе она равна Fд=44.1кГц. Для ограничения спектра входного сигнала
обычно применяют аналоговые активные фильтры, но так как на входе АЦП не должно
быть спектральных составляющих сигнала с частотой больше частоты Найквиста Fн=22.05кГц,
требования к аналоговому фильтру на входе АЦП оказываются довольно жесткими:

для частоты дискретизации Fд=44.1кГц:
- частота пропускания Fп=22.00кГц,
- частота заграждения Fз=22.05кГц,
- неравномерность в полосе пропускания 0.1дБ,
- затухание в полосе заграждения > 96дБ.

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

Применяя оверсамплинг, мы получим следующие требования ко входному фильтру:

для частоты дискретизации Fд=88.2кГц:
- частота пропускания Fп=22.00кГц,
- частота заграждения Fз=44.1кГц,
- неравномерность в полосе пропускания 0.1дБ,
- затухание в полосе заграждения > 96дБ.

При тех же требованиях к неравномерности в ПП и затуханию в ПЗ мы имеем намного бОльшую
переходную полосу и, следовательно, значительно менее жесткие требования к фильтру.
При этом оказывается, что достаточно применить на входе АЦП фильтр Бесселя низкого порядка,
а дальнейшую фильтрацию сигнала в полосе 22.0кГц-44.1кГц выполнить с помощью
цифрового фильтра высокого порядка, который довольно легко реализовать на современных DSP.
Используя в дальнейшей обработке каждый второй сампл (децимация) мы получим качественный
цифровой звук с частотой дискретизации Fд=44.1кГц.

Подобным же образом решается задача аналоговой фильтрации сигнала на выходе ЦАП'а
при воспроизведении CD-диска, т.е. при выходной частоте ЦАП'а Fд=88.2кГц
требования к выходному фильтру намного слабее..

На чем выполнен цифровой фильтр - FFT, Герцель, КИХ, БИХ, для оверсамплинга безразлично..
..ну, кроме объема вычислений.. smile.gif

PS. Не спрорьте с =ВН=. smile3009.gif
У него 30-ти летняя практика.. 07.gif
fontp
Да, лучше не спорьте, тем более с =ВН=. Тем более из-за такой ерунды как Герцель.

Герцель всего лишь последовательная реализация ДПФ на одной частоте. Если захотеть то и окно можно приделать последовательно умножая входной сигнал на функцию окна.
БПФ всего лишь быстрая блочная реализация алгоритма ДПФ для всех частот сразу.

Физически это одно и то же (ДПФ).
DRUID3
Цитата(-=ВН=- @ Aug 14 2007, 18:36) *
Товарищ DRUID3, не говорите ерундой, ладно?

biggrin.gif Даже не пытаюсь, кстати, Ваша фраза не аргумент в споре на техническом форуме.

To:blackfin
Ну что же Вы в самом деле, поддались на провокацию. Что такое оверсемпленг и де ИВо применяют знают в наших краях уже давно. Просто я приводил пример частного случая его применения в спектральном анализе Фурье. Но Вы видимо не знаете всех действующих лиц biggrin.gif . Здесь спор идет по типу "вмру, але моє буде зверху" lol.gif ...
blackfin
Цитата(DRUID3 @ Aug 15 2007, 14:20) *
Ну что же Вы в самом деле, поддались на провокацию.
Дык, мне показалось, что Вы злоупотребляете "галлюцинациями"..
Ну, вот я и вмешался.. Видимо, зря.. sad.gif
-=ВН=-
Цитата(DRUID3 @ Aug 15 2007, 14:20) *
biggrin.gif Даже не пытаюсь,

Ну Вам что, цитаты приводить Ваши, где Вы говорили о каких-то преимуществах, причем не вычислительных, Герцеля по сравнению с ДПФ? Теперь у Вас не преимущества, а особенности и не ДПФ, а БПФ. Вы уж о чем-нибудь одном валяйте.
А про "оверсамленг" Вы что-то совершенно не то говорите. Вообще. Он никак не связан с окнами. И окна с ним. "Оверсамленг" - увеличение частоты дискретизации. Все. Ничего более. И спектральное разрешение и характеристики окон определяются длительностью анализируемого куска сигнала (окна) и никак с часттотой дискретизации не связаны.
Что Вы хотели сказать Вашим примером - непонятно абсолютно. Вам наверное тоже.
Lalka
А не мог бы кто-нибудь выложить алгоритм как можно проще для цифрового полосового фильтра? 07.gif Очень надеюсь на помощь!
bahurin
Мое мнение на данный вопрос. Сразу предупреждаю в полемику вступать не буду. вариантов на самом деле мне кажется три:
1. КИХ фильтр высокого порядка. Тут все понятно в лоб так в лоб.
2. Использовав алгоритм Герцеля получить спектр в данной узкой полосе . А дальше надо его дополнить нулями до исходного размера и брать IFFT, чтобы получить отфильтрованный сигнал. Т.о. получили затраты на алгоритм герцеля (кстати тоже все умножения комплексные) + затраты на IFFT. Но и это еще не все требуется обработка с перекрытием, чтобы убрать все искажения на краях.
3. Квадратурное гетеродинирование 2кГц-> 0 кГц, а там уже многоступенчатой децимацией пытаться обеспечть требуемую "изберательность". Но после необходимо интерполировать (а это еще ФНЧ) и снова переносить на частоту 2 кГц с нулевой частоты. Если все аккуратно сделать, то можно не исказить фазу.

Для того какой путь выбрать надо знать частоту дискретизации в первую очередь, а также требования к изберательности: подавление в полосе заграждения и неравномерность в полосе пропускания фильтра ну и собственно переходную полосу между полосой заграждения и пропусканя. После это садится и считать требуемые вычисления для каждого из вариантов. Ну и еще надо учесть на чем это все надо творить.
sup-sup
Цитата(Lalka @ Sep 10 2009, 09:41) *
А не мог бы кто-нибудь выложить алгоритм как можно проще для цифрового полосового фильтра? 07.gif Очень надеюсь на помощь!

В домашних условиях можно применить Excel.
Подключаем пакет анализа, заполняем в столбик желаемую AЧХ, напускаем на него IFFT (получаем импульсную характеристику фильтра), делаем FFT над ИХ для проверки результата (для увеличения точности нужно дополнить полученную ИХ нулями). Оформляем макрос для ускорения работы. Прицеплен пример.
bahurin
Цитата(sup-sup @ Sep 10 2009, 23:53) *
В домашних условиях можно применить Excel.
Подключаем пакет анализа, заполняем в столбик желаемую AЧХ, напускаем на него IFFT (получаем импульсную характеристику фильтра), делаем FFT над ИХ для проверки результата (для увеличения точности нужно дополнить полученную ИХ нулями). Оформляем макрос для ускорения работы. Прицеплен пример.



Вот пример в матлабе

N = 128; %порядок КИХ фильтра
fs = 1; % частота дискретизации
f0 = 0.3; % первая переходная полоса
f1 = 0.35; % вторая переходная полоса фильтр будет пропускать от 0.3 до 0.35 Гц при частоте дискретизации 1 Гц
f = (0:N-1)*fs/N; % массив частот
H = zeros(1,N); % ЧХ фильтра везде равна 0
k1 = N*f0/fs; % индекс первой переходная полоса
k2 = N*f1/fs+1; % индекс второй переходная полоса

H(k1:k2) = 1; % в переходной полосе 1
H = H+fliplr([H(2:N) 0]); % зеркально отражаю переходную полосу для реальной имп характеристики
h = real(ifft(H)); % имп. характеристика
h = [h(N/2+1:N) h(1:N/2)]; % меняю местами половины
h = h.*hamming(N)'; % оконное сглаживание для уменьшения бок лепесков
% ЧХ полученного фильтра.
f1 = (0:0.25:N-0.25)*fs/N;
plot(f1,20*log10(abs(fft([h zeros(1,N*3)])))),grid;
BORIV
Цитата(blackfin @ Aug 14 2007, 21:29) *
Применяя оверсамплинг, мы получим следующие требования ко входному фильтру:

для частоты дискретизации Fд=88.2кГц:
- частота пропускания Fп=22.00кГц,
- частота заграждения Fз=44.1кГц,
- неравномерность в полосе пропускания 0.1дБ,
- затухание в полосе заграждения > 96дБ.


Может быть правильнее было бы: частота заграждения 66,15кГц или я не до конца понял?
pokos
Непонятно, насколько прямоугольным должен быть фильтр. Если к прямоугольности нет сильных требований, то можно попробовать использовать Boost wave digital filter. Он хорошо описан, к примеру в SLAAE16 от TI.
анатолий
Интересный полосовой фильтр получается из фазового фильтра с АЧХ
H =(Z^-2 + b(1+a)Z^-1 +a)/(1+ b(1+a)Z^-1 +aZ^-2),
к которому на выход подмешивается входной сигнал,
так что общая АЧХ: = Н-1. (если Н+1 - заграждающий фильтр).
Причем b = cos(2Pif) - определяет частоту фильтра,
а ширина полосы пропускания = 2arctg((1-a)/(1+a)).
Фильтр всегда устойчив и хорошо настраивается-перестраивается
в пределах (0,05-0,4) частоты дискретизации.
Коэффициенты могут быть малоразрядными, т.к. фильтр малочувствительный к их ошибкам.
Много раз опробован в ПЛИС.
(в кн. Сергиенко про ПЛИС есть на него программа на VHDL)
Первоисточник - статья в ТИИЭР за где-то 1989г, посвященная фазовым фильтрам.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.