LINUX.ORG.RU

фильтр нижних частот

 , ,


0

2

Как реализовать на Python фильтр нижних частот?

Нужно чтобы на частоте 1 МГц было ослабление -3 дБ, а на частотах от 5 и выше гарантированно -60 дБ.

Есть такая тема http://stackoverflow.com/questions/25191620/creating-lowpass-filter-in-scipy-...

Однако там мне не совсем понятно, может терминология мне не ясна. Например те частоты что я указал (1 и 5 МГц) что из них Fstop и что Fcutoff?

Если по простому, 1 МГц - это cutoff, 5 МГц - stopband.

curufinwe ★★★★★
()

Cutoff — это ослабление на корень из двух, то есть -3дб.

Freyr69 ★★★
()

Мне тоже не ясна терминология. Что значит «реализовать фильтр»? По требуемой характеристике выбрать тип и рассчитать коэффициенты? Матлаб в помощь. Фильтровать данные в реальном или нереальном времени? Это простейшая арифметика, думаю, тут даже Python справится...

Ivana
()

Если правильно понял, то сначала нужно посчитать порядок фильтра (для того же Баттерворта), чтобы он гарантированно давил на 5 МГц. В scipy.signal для этого есть матлаб-подобные функции, например buttord. С помощью этой функции нужно посчитать порядок фильтра задав ей Ваши значения и уже после считать коэффициенты самого фильтра. Проще почитать в документации к scipy.signal

baldman88
()

Как и везде - строишь нужную импульсную характеристику, производишь обратное преобразование Фурье, получаешь ядро для свертки.

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

строишь нужную импульсную характеристику, производишь обратное преобразование Фурье

Импульсная характеристика - это функция времени. Обратное преобразование от неё не взять.

Это надо сначала построить АЧХ, а затем уже от неё брать ОПФ. Но и тогда ИХ получется некорректной, т.к. отсчеты будут в отрицательной области. Её еще нужно сдвинуть.

Но вобще тогда ты получишь только КИХ-фильтр. А толковые пацаны на раёне всегда угорали только по БИХ-фильтрам.

anatoly
()

В Octave есть Matlab-совместимые функции для синтеза цифрового фильтра (КИХ и БИХ) в пакете signal. Даже можно брать учебник по Matlab и применять эти функции в Octave.

В Python есть в пакете Sсipy.signal как Matlab-совместимые функции, так и своя реализация. Если в Google ввести FIR Python, то сразу на эту тематику найдётся множество статей.

Какая предполагается аппаратная платформа для реализации фильтра? Там частота дискретизации должна быть выше чем 1 МГц.

DarthVadimius ★★★★
()
Ответ на: комментарий от anatoly

Это надо сначала построить АЧХ

ну ё, именно её я и имел в виду) ИХ и есть как раз результат ОПФ от АЧХ. Спасибо за коррекцию

yoghurt ★★★★★
()
Ответ на: комментарий от anatoly

А толковые пацаны на раёне всегда угорали только по БИХ-фильтрам.

Говорите смело, открыто, и прямо в лицо: БИХ, Чебышев, Z-преобразование!

yoghurt ★★★★★
()
Ответ на: комментарий от anatoly

А толковые пацаны на раёне всегда угорали только по БИХ-фильтрам.

Пацаны на раёне, даже толковые, имеют непритязательный вкус - предпочитаю дешевое некачественное бухло и не придают значение линейности ФЧХ...

Ivana
()
Ответ на: комментарий от Ivana

предпочитаю дешевое некачественное бухло и не придают значение линейности ФЧХ

Я не силен в ЦОС, но линейность ФЧХ - святое, говорили коллеги мне... :)

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от yoghurt

Ivana DarthVadimius anatoly Freyr69 curufinwe

Пацаны на раёне, даже толковые, имеют непритязательный вкус - предпочитаю дешевое некачественное бухло и не придают значение линейности ФЧХ...

Я, я придаю! :)

http://tau-wiki.ru/index.php?title=Файл:Butterworth_filter_bode_plot_ru.png

На рисунке внизу ФЧХ третьего порядка, там даже не доходя до Fcutoff появляется нелинейность ФЧХ.

Я вижу что эта нелинейность плохо влияет на результирующий сигнал, он не такой как мне надо (есть эталон, с которым я сравниваю, и там я вижу фаза идет иначе).

Правильно ли понимаю что lfilter это универсальная функция, а коэффициенты отдельно генерятся? Например, функцией «butter» и другими.

Какую функцию посоветуете использовать, чтобы получить линейную ФЧХ? Просто я не знаком с «ассортиментом» python-овских библиотек и в видах фильтров не сильно разбираюсь...

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Я не знаю Python и вышеприведенную либу, но подозреваю, что там реализована та же самая функциональность, что и в остальных программах/библиотеках для расчета фильтров (от Матлаба до отдельных программок). Если вам нужна линейная ФЧХ, тогда используете любой КИХ фильтр (хоть каскадный). Но я сомневаюсь, что она вам действительно нужна.

Ivana
()
Ответ на: комментарий от shkolnick-kun

А, ну да - симметричность/антисимметричность коэффициентов... Но на практике сразу стараются строить симметричные коэффициенты - помимо линейности ФЧХ это в 2 раза уменьшает необходимый массив для их хранения и количество умножений при реализации фильтра того же порядка...

Ivana
()
Ответ на: комментарий от I-Love-Microsoft

Нет, это как раз БИХ, его сделали путем замены s на z из аналогового фильтра, который по определению БИХ.

shkolnick-kun ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Какую функцию посоветуете использовать, чтобы получить линейную ФЧХ?

ФЧХ, близкая к линейной --- это фильтр Бесселя. Есть ещё какие-то аналогичные аппроксимации кроме него. В Octave его синтезирует функция besself()

DarthVadimius ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.