Как сделать оконный полосовой фильтр сигнала на Python? Здравствуйте. Есть какой-то сложный сигнал. В нем есть очень много частот (от 0 до 100, например), это можно получить с помощью преобразования Фурье. Но требуется оставить только определенные частоты (например, от 10 до 50) и вывести сигнал обратно только уже с этими определенными частотами. Недавно узнал про оконный полосовой фильтр. Не знаете, как сделать его на Python?
Для создания оконного полосового фильтра на Python вы можете использовать функцию scipy.signal.firwin из библиотеки SciPy. Вот пример кода, который показывает, как создать и применить такой фильтр:
import numpy as np import matplotlib.pyplot as plt from scipy.signal import firwin, lfilter # Генерация тестового сигнала fs = 1000 # Частота дискретизации t = np.arange0,1,1/fs0, 1, 1/fs0,1,1/fs
signal = np.sin2∗np.pi∗20∗t2 * np.pi * 20 * t2∗np.pi∗20∗t + np.sin2∗np.pi∗40∗t2 * np.pi * 40 * t2∗np.pi∗40∗t + np.sin2∗np.pi∗60∗t2 * np.pi * 60 * t2∗np.pi∗60∗t # Создание оконного полосового фильтра cutoff = 10,5010, 5010,50 # Частоты среза numtaps = 101 # Длина фильтра b = firwinnumtaps,cutoff=cutoff,fs=fs,passzero=Falsenumtaps, cutoff=cutoff, fs=fs, pass_zero=Falsenumtaps,cutoff=cutoff,fs=fs,passzero=False # Применение фильтра к сигналу filtered_signal = lfilterb,1,signalb, 1, signalb,1,signal # Визуализация исходного и отфильтрованного сигналов plt.figure
plt.plott,signal,label=′Исходныйсигнал′t, signal, label='Исходный сигнал't,signal,label=′Исходныйсигнал′
plt.plott,filteredsignal,label=′Отфильтрованныйсигнал′t, filtered_signal, label='Отфильтрованный сигнал't,filteredsignal,label=′Отфильтрованныйсигнал′
plt.xlabel′Время′'Время'′Время′
plt.ylabel′Амплитуда′'Амплитуда'′Амплитуда′
plt.legendplt.show
В этом примере мы сначала генерируем тестовый сигнал, затем создаем оконный полосовой фильтр с частотами среза от 10 до 50 Гц и длиной фильтра 101. После этого мы применяем этот фильтр к исходному сигналу с помощью функции lfilter и выводим исходный и отфильтрованный сигналы на одном графике.
Надеюсь, это поможет вам создать оконный полосовой фильтр на Python. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.
Для создания оконного полосового фильтра на Python вы можете использовать функцию scipy.signal.firwin из библиотеки SciPy. Вот пример кода, который показывает, как создать и применить такой фильтр:
import numpy as npimport matplotlib.pyplot as plt
from scipy.signal import firwin, lfilter
# Генерация тестового сигнала
fs = 1000 # Частота дискретизации
t = np.arange0,1,1/fs0, 1, 1/fs0,1,1/fs signal = np.sin2∗np.pi∗20∗t2 * np.pi * 20 * t2∗np.pi∗20∗t + np.sin2∗np.pi∗40∗t2 * np.pi * 40 * t2∗np.pi∗40∗t + np.sin2∗np.pi∗60∗t2 * np.pi * 60 * t2∗np.pi∗60∗t
# Создание оконного полосового фильтра
cutoff = 10,5010, 5010,50 # Частоты среза
numtaps = 101 # Длина фильтра
b = firwinnumtaps,cutoff=cutoff,fs=fs,passzero=Falsenumtaps, cutoff=cutoff, fs=fs, pass_zero=Falsenumtaps,cutoff=cutoff,fs=fs,passz ero=False
# Применение фильтра к сигналу
filtered_signal = lfilterb,1,signalb, 1, signalb,1,signal
# Визуализация исходного и отфильтрованного сигналов
plt.figure plt.plott,signal,label=′Исходныйсигнал′t, signal, label='Исходный сигнал't,signal,label=′Исходныйсигнал′ plt.plott,filteredsignal,label=′Отфильтрованныйсигнал′t, filtered_signal, label='Отфильтрованный сигнал't,filtereds ignal,label=′Отфильтрованныйсигнал′ plt.xlabel′Время′'Время'′Время′ plt.ylabel′Амплитуда′'Амплитуда'′Амплитуда′ plt.legend plt.show
В этом примере мы сначала генерируем тестовый сигнал, затем создаем оконный полосовой фильтр с частотами среза от 10 до 50 Гц и длиной фильтра 101. После этого мы применяем этот фильтр к исходному сигналу с помощью функции lfilter и выводим исходный и отфильтрованный сигналы на одном графике.
Надеюсь, это поможет вам создать оконный полосовой фильтр на Python. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.