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 ★★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.