• Автор записи:
  • Рубрика записи:Scipy
  • Время чтения:4 минут чтения
  • Комментарии к записи:0 комментариев

В этом уроке Python мы узнаем о «Python Scipy Freqz», который обычно используется для работы с аналоговой и цифровой частотой.

Содержание

Метод freqz()

Для вычисления частотной характеристики цифрового фильтра в Python Scipy есть метод freqz() в модуле scipy.signal.

Определите частотную характеристику цифрового фильтра путем вычисления его числителя M-порядка b и знаменателя N-порядка a.

Синтаксис:

scipy.signal.freqz(b, a=1, whole=False, worN=512, plot=None, include_nyquist=False, fs=6.28318530717958)

Где параметры:

  • b  (array_data): числитель линейного фильтра B.shape[1:], a.shap[1:] и форма массива частот должны быть совместимы для вещания, если b имеет размерность больше 1, что считается быть так.
  • a(array_data): линейный знаменатель фильтра. Предполагается, что коэффициенты сохраняются в первом измерении, если размерность b превышает 1, а формы b.shape[1:], a.shape[1:] и Массив частот должен соответствовать вещанию.
  • whole (логическое значение): частота Найквиста, fs/2, представляет собой стандартный диапазон, на основе которого рассчитываются частоты(верхняя половина единичного круга). Выполните расчет частоты от 0 до fs, если все верно. игнорируется, если работа похожа на массив.
  • wordN (int, array, None): Вычислить на таком количестве частот, если имеется только одно целое число(значение N по умолчанию — 512). Это практическая замена: «np.linspace(), fs if all else fs/2, N, endpoint=include_nyquist)». Можно ускорить вычисления, используя быстрое число для вычислений БПФ. Вычислите ответ на заданных частотах, если данные похожи на массив. Они измеряются в единицах, совместимых с fs.
  • plot: вызов функции, принимающей два аргумента. Возвращаемые параметры w и h отправляются на график, если они присутствуют. полезно для отображения частотной характеристики в пределах частоты.
  • include_nyquist (boolean): Включить nyquist будет включать самую последнюю частоту (частоту Найквиста), если целое имеет значение False и worN является целым числом; в противном случае оно будет опущено.
  • fs (float): частота дискретизации системы в цифровой форме. По умолчанию используется значение радианы/выборка при 2*пи(то есть w от 0 до пи).

Метод freqz() возвращает w (частоты, на которых рассчитывался h, выраженные в единицах, совместимых с fs. W часто нормализуется до диапазона 0, пи) и h(комплексные числа, представляющие частотную характеристику) типа ndarray.

Давайте рассмотрим пример, выполнив следующие шаги:

  • Импортируйте необходимые библиотеки и вычислите частотную характеристику цифрового фильтра, используя приведенный ниже код.
from scipy.signal import firwin, freqz
sig = firwin(50, 0.2, window=('kaiser', 5))
w, h = freqz(sig)

print(w[1],h[1])

метод freqz()

Формат Sos

Для расчета частотной характеристики цифрового фильтра в формате SOS. Модуль Python Scipy scipy.signal имеет метод sosfreqz().

Синтаксис:

scipy.signal.sosfreqz(sos, whole=False, worN=512, fs=6.283185307179586)

Где параметры:

  • sos (array_data): требуется массив коэффициентов фильтра второго порядка с формой(n секций, 6). Первые три столбца содержат коэффициенты числителя, а последние три — коэффициенты знаменателя, а каждая строка представляет собой раздел второго порядка.
  • whole (логическое значение): частота Найквиста, fs/2, представляет собой стандартный диапазон, на основе которого рассчитываются частоты(верхняя половина единичного круга). Выполните расчет частоты от 0 до fs, если все верно. игнорируется, если работа похожа на массив.
  • wordN (int, array, None): вычислить на таком количестве частот, если имеется только одно целое число (значение N по умолчанию — 512). Это практическая замена: «np.linspace(0, fs if all else fs/2, N, endpoint=include_nyquist)». Можно ускорить вычисления, используя быстрое число для вычислений БПФ. Вычислите ответ на заданных частотах, если данные похожи на массив. Они измеряются в единицах, совместимых с fs.
  • fs (float): частота дискретизации системы в цифровой форме. по умолчанию используется значение радианы/выборка при 2*пи(то есть w от 0 до пи).

Давайте рассмотрим пример, выполнив следующие шаги:

  • Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy.signal import ellip, sosfreqz
  • Создайте полосовой фильтр 20-го порядка в формате SOS, используя приведенный ниже код.
sos_format = ellip(20, 0.4, 70,(0.3, 0.5), btype='bandpass',
                   output='sos')
  • Рассчитайте частотную характеристику между постоянным током и Найквистом в 2000 точках, используя приведенный ниже код.
w, h = sosfreqz(sos_format, worN=2000)
print("w = {},h={}".format(w,h))

Формат Sos

Частоты

Для вычисления частотной характеристики аналогового фильтра Python Scipy содержит метод freqs() в модуле scipy.signal.

Синтаксис:

scipy.signal.freqs(b, a, worN=200, plot=None)

Где параметры:

  • b (array_data): числитель B линейного фильтра.
  • a (array_data): линейный знаменатель фильтра.
  • wordN (int, array, None): если None, то вычисления производятся на частоте 200 Гц вокруг интересующих областей кривой отклика(определяемых местоположениями полюса и нуля). Если это одно целое число, вычислите его за такое количество итераций. В любом другом случае рассчитайте отклик, используя предоставленные в работе угловые частоты(например, рад/с).
  • plot: вызов функции, принимающей два аргумента. Возвращаемые параметры w и h отправляются на график, если они присутствуют. полезно для отображения частотной характеристики в пределах частот.

Метод freqz_zpk()

В Python Scipy есть метод freqz_zpk() в модуле scipy.signal, который вычисляет форму ZPK частотной характеристики цифрового фильтра.

Синтаксис:

scipy.signal.freqz_zpk(z, p, k, worN=512, whole=False, fs=6.283185307179586)

Где параметры:

  • z (array_data): фильтрует нули в линейном виде.
  • p (array_data): полюса линейного фильтра.
  • k (скаляр): коэффициент усиления линейного фильтра.
  • worN (логическое значение): частота Найквиста, fs/2, представляет собой стандартный диапазон, на основе которого рассчитываются частоты(верхняя половина единичного круга). Выполните расчет частоты от 0 до fs, если все верно. игнорируется, если работа похожа на массив.
  • wordN (int, array, None): Вычислить на таком количестве частот, если имеется только одно целое число (значение N по умолчанию — 512). Это практическая замена: «np.linspace(0, fs if all else fs/2, N, endpoint=include_nyquist)». Можно ускорить вычисления, используя быстрое число для вычислений БПФ. Вычислите ответ на заданных частотах, если данные похожи на массив. Они измеряются в единицах, совместимых с fs.
  • fs (float): частота дискретизации системы в цифровой форме. по умолчанию используется значение радианы/выборка при 2*пи(то есть w от 0 до пи).

Метод freqz_zpk() возвращает w (частоты, на которых рассчитывался h, выраженные в единицах, совместимых с fs. W часто нормализуется до диапазона 0, пи) и h(комплексные числа, представляющие частотную характеристику) типа ndarray.

Давайте рассмотрим пример, создав систему с частотой дискретизации 1000 Гц и цифровой фильтр Баттерворта 4-го порядка с частотой среза 100 Гц, используя приведенный ниже код.

from scipy import signal
zeroes_filt, pole_filt, gain_filt = signal.butter(4, 100, output='zpk', fs=1000)
w, h = signal.freqz_zpk(zeroes_filt, pole_filt, gain_filt, fs=1000)
print("w = {},h={}".format(w,h))

метод freqz_zpk()

Частоты сигналов Zpk

В Python Scipy есть метод freqs_zpk() в модуле scipy.signal, который вычисляет частотную характеристику аналогового фильтра.

Синтаксис:

scipy.signal.freqz_zpk(z, p, k, worN=200)

Где параметры:

  • z (array_data): фильтрует нули в линейном виде.
  • p (array_data): полюса линейного фильтра.
  • k (скаляр): коэффициент усиления линейного фильтра.
  • wordN (int, array, None): если None, то вычисления производятся на частоте 200 Гц вокруг интересующих областей кривой отклика(определяемых местоположениями полюса и нуля). Если это одно целое число, вычислите его за такое количество итераций. В любом другом случае рассчитайте отклик, используя предоставленные в работе угловые частоты(например, рад/с).

Метод freqs_zpk() возвращает w (угловые частоты, которые использовались для расчета h) и h (отклик на частоту) типа ndarray.

Давайте рассмотрим пример, выполнив следующие шаги:

  • Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy import signal
import numpy as np
  • Создайте аналоговый фильтр 5-го порядка, затем предоставьте коэффициенты фильтра, используя приведенный ниже код.
zeroes_filt, pole_filt, gain_filt = signal.iirfilter(5, [1, 10], 1, 50, analog=True, ftype='cheby1',
                    output='zpk')
w, h = signal.freqs_zpk(zeroes_filt, pole_filt, gain_filt, worN=np.logspace(-1, 2, 9000))
  • Проверьте результат, возвращаемый методом freqs_zpk(), используя приведенный ниже код.
print("w = {},h={}".format(w,h))

Частоты сигналов Python Scipy Zpk

Метод iirfilter()

Мы узнали о методе freqz() в приведенном выше подразделе, здесь мы спроектируем фильтр, используя метод iirfilter(), и результат этого метода перенесем в метод freqz() для вычисления частотной характеристики цифрового фильтра.

Давайте рассмотрим пример, выполнив следующие шаги:

  • Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
import numpy as np
from scipy.signal import iirfilter, freqz
  • Создайте аналоговый полосовой фильтр Чебышева II 15-го порядка 50–200 Гц, используя приведенный ниже код.
b, a = iirfilter(15, [2*np.pi*50, 2*np.pi*200], rs=50,
                        btype='band', analog=True, ftype='cheby2')
  • Теперь вычислите частотную характеристику цифрового фильтра, используя приведенный ниже код.
w, h = freqz(b, a, 1000)
print("w = {},h={}".format(w,h))

Метод Filter

Пример

Мы уже знаем о методе freqz() Python Scipy. Здесь, в этом разделе, мы приведем еще один пример, связанный с частотной характеристикой цифрового фильтра.

Давайте рассмотрим пример, выполнив следующие шаги:

  • Импортируйте необходимые библиотеки, используя приведенный ниже код Python.
from scipy.signal import iirfilter, freqz
import numpy as np
  • Создайте аналоговый полосовой фильтр Чебышева II 10-го порядка с частотой 40–150 Гц, используя приведенный ниже код.
b, a = iirfilter(15, [2*np.pi*50, 2*np.pi*200], rs=50,
                        btype='band', analog=True, ftype='cheby2')
  • Теперь вычислите частотную характеристику цифрового фильтра, используя приведенный ниже код.
w, h = freqz(b, a, 1000)
print("w = {},h={}".format(w,h))

Пример Python Scipy Freqz

Добавить комментарий