iirdesign#
- scipy.signal.iirdesign(wp, ws, gpass, gstop, аналог=False, ftype='ellip', вывод='ba', fs=None)[источник]#
Полное проектирование цифровых и аналоговых фильтров IIR.
При заданных частотах полосы пропускания и задерживания, а также коэффициентах усиления, построить аналоговый или цифровой КИХ-фильтр минимального порядка для заданного базового типа. Возвращает результат в форме числителя и знаменателя ('ba'), полюсов и нулей ('zpk') или звеньев второго порядка ('sos').
- Параметры:
- wp, wsfloat или array like, shape (2,)
Частоты среза полосы пропускания и полосы задерживания. Возможные значения: скаляры (для фильтров нижних и верхних частот) или диапазоны (для полосовых и режекторных фильтров). Для цифровых фильтров они выражены в тех же единицах, что и fs. По умолчанию, fs равно 2 полуцикла/сэмпл, поэтому они нормализованы от 0 до 1, где 1 — частота Найквиста. Например:
ФНЧ: wp = 0.2, ws = 0.3
Высокочастотный фильтр: wp = 0.3, ws = 0.2
Полосовой фильтр: wp = [0.2, 0.5], ws = [0.1, 0.6]
Полосовой заградительный: wp = [0.1, 0.6], ws = [0.2, 0.5]
Для аналоговых фильтров, wp и ws являются угловыми частотами (например, рад/с). Обратите внимание, что для полосовых и режекторных фильтров полоса пропускания должна строго лежать внутри полосы задерживания или наоборот. Также обратите внимание, что срез на краях полосы для IIR-фильтров определяется как половинная мощность, то есть -3 дБ, а не половинная амплитуда (-6 дБ), как для scipy.signal.fiwin.
- gpassfloat
Максимальные потери в полосе пропускания (дБ).
- gstopfloat
Минимальное затухание в полосе задерживания (дБ).
- аналогbool, необязательно
Если True, возвращает аналоговый фильтр, в противном случае возвращается цифровой фильтр.
- ftypestr, optional
Тип проектируемого IIR-фильтра:
Баттерворта : 'butter'
Чебышева I : 'cheby1'
Чебышёв II : ‘cheby2’
Кауэр/эллиптический: 'ellip'
- вывод{‘ba’, ‘zpk’, ‘sos’}, опционально
Форма фильтра на выходе:
секции второго порядка (рекомендуется): ‘sos’
числитель/знаменатель (по умолчанию) : ‘ba’
полюс-ноль : ‘zpk’
В общем случае рекомендуется форма секций второго порядка (‘sos’), поскольку вывод коэффициентов для формы числителя/знаменателя (‘ba’) страдает от числовой неустойчивости. По причинам обратной совместимости форма по умолчанию — это форма числителя/знаменателя (‘ba’), где ‘b’ и ‘a’ в ‘ba’ относятся к общепринятым названиям используемых коэффициентов.
Примечание: использование формы секций второго порядка ('sos') иногда связано с дополнительными вычислительными затратами: для случаев интенсивного использования данных рекомендуется также исследовать форму числителя/знаменателя ('ba').
- fsfloat, опционально
Частота дискретизации цифровой системы.
Добавлено в версии 1.2.0.
- Возвращает:
- b, aСоздать LinearOperators
Числитель (b) и знаменатель (a) полиномы IIR-фильтра. Возвращается только если
output='ba'.- z, p, kndarray, ndarray, float
Нули, полюсы и коэффициент усиления системы передаточной функции фильтра IIR. Возвращается только если
output='zpk'.- sosndarray
Представление фильтра IIR в виде звеньев второго порядка. Возвращается только если
output='sos'.
Смотрите также
butterПроектирование фильтра с использованием порядка и критических точек
cheby1,cheby2,ellip,besselbuttordНайти порядок и критические точки по спецификациям полосы пропускания и полосы задерживания
cheb1ord,cheb2ord,ellipordiirfilterОбщее проектирование фильтров с использованием порядка и критических частот
Примечания
The
'sos'выходной параметр был добавлен в версии 0.16.0.Примеры
>>> import numpy as np >>> from scipy import signal >>> import matplotlib.pyplot as plt >>> import matplotlib.ticker
>>> wp = 0.2 >>> ws = 0.3 >>> gpass = 1 >>> gstop = 40
>>> system = signal.iirdesign(wp, ws, gpass, gstop) >>> w, h = signal.freqz(*system)
>>> fig, ax1 = plt.subplots() >>> ax1.set_title('Digital filter frequency response') >>> ax1.plot(w, 20 * np.log10(abs(h)), 'b') >>> ax1.set_ylabel('Amplitude [dB]', color='b') >>> ax1.set_xlabel('Frequency [rad/sample]') >>> ax1.grid(True) >>> ax1.set_ylim([-120, 20]) >>> ax2 = ax1.twinx() >>> phase = np.unwrap(np.angle(h)) >>> ax2.plot(w, phase, 'g') >>> ax2.set_ylabel('Phase [rad]', color='g') >>> ax2.grid(True) >>> ax2.axis('tight') >>> ax2.set_ylim([-6, 1]) >>> nticks = 8 >>> ax1.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks)) >>> ax2.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks))