Почему при использовании scipy's freqz на фильтре firwin мы получаем ограниченное разрешение по частоте?

Недавно я работал с данными, отобранными с высокой частотой дискретизации (1M и выше).

Я пытаюсь написать эффективный многофазный фильтр (на основе кода, видимого здесь)

Мои скорости прореживания близки к 10000, поэтому частота Найквиста для фильтрации составляет ~ 100 Гц.

После некоторой отладки я понял, что при представлении моих отводов фильтра с помощью scipy.signal.freqz разрешение ограничено примерно 1000 Гц, это не меняется при увеличении порядка фильтра fir.

Я не смог найти документацию по этому вопросу, как я могу наблюдать за своим фильтром с более высоким разрешением?

минимальный воспроизводимый пример поможет нам помочь вам

dankal444 11.05.2022 16:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
16
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Разрешение scipy.signal.freqz ограничено количеством частотных точек worN по формуле fs/2/worN для половинного спектра (или fs/worN для полного спектра). Поскольку worN по умолчанию равно 512, с частотой дискретизации вашего сигнала 1 МГц вы получите разрешение примерно 1000000 Гц/2/512 ~ 1000.

Чтобы увеличить разрешение freqz на вашем filterCoefficients (в вашем случае полученном firwin), просто увеличьте worN. Например, с чем-то вроде:

w,h = freqz(filterCoefficients, worN=2048, fs=fs)

Другие вопросы по теме