Частотна характеристика фільтра, розробленого за допомогою функції масла,
є:
Але немає причин обмежувати фільтр постійною монотонною конструкцією фільтра. Якщо ви бажаєте більшого ослаблення в зоні зупинки і більш крутому перехідному діапазоні, існують інші варіанти. Для отримання додаткової інформації щодо визначення фільтра за допомогою iirdesing див. Це . Як показано на графіках частотного відгуку для вершкового масла, частота відсікання (-3 дБ точки) далека від мети. Це може бути зменшено шляхом відбору проб перед фільтруванням (конструкторські функції матимуть складний час з таким вузьким фільтром, 2% пропускної здатності). Давайте подивимось на фільтрацію вихідної швидкості вибірки із вказаним відсіченням.
import numpy as np
from scipy import signal
from matplotlib import pyplot as plt
from scipy.signal import fir_filter_design as ffd
from scipy.signal import filter_design as ifd
# setup some of the required parameters
Fs = 1e9 # sample-rate defined in the question, down-sampled
# remez (fir) design arguements
Fpass = 10e6 # passband edge
Fstop = 11.1e6 # stopband edge, transition band 100kHz
Wp = Fpass/(Fs) # pass normalized frequency
Ws = Fstop/(Fs) # stop normalized frequency
# iirdesign agruements
Wip = (Fpass)/(Fs/2)
Wis = (Fstop+1e6)/(Fs/2)
Rp = 1 # passband ripple
As = 42 # stopband attenuation
# Create a FIR filter, the remez function takes a list of
# "bands" and the amplitude for each band.
taps = 4096
br = ffd.remez(taps, [0, Wp, Ws, .5], [1,0], maxiter=10000)
# The iirdesign takes passband, stopband, passband ripple,
# and stop attenuation.
bc, ac = ifd.iirdesign(Wip, Wis, Rp, As, ftype='ellip')
bb, ab = ifd.iirdesign(Wip, Wis, Rp, As, ftype='cheby2')
Як згадувалося, оскільки ми намагаємось фільтрувати такий невеликий відсоток пропускної здатності, фільтр не матиме різкого відсічення. У цьому випадку фільтр низьких частот ми можемо зменшити пропускну здатність, щоб отримати фільтр, що виглядає краще. Функція повторної вибірки python / scipy.signal може бути використана для зменшення пропускної здатності.
Зверніть увагу, що функція повторної вибірки виконуватиме фільтрацію для запобігання збитку. Попередня фільтрація також може бути виконана (щоб зменшити згладжування), і в цьому випадку ми можемо просто перепропонувати на 100 і виконати , але питання про створення фільтрів. У цьому прикладі ми зменшимо вибірку на 25 та створимо новий фільтр
R = 25; # how much to down sample by
Fsr = Fs/25. # down-sampled sample rate
xs = signal.resample(x, len(x)/25.)
Якщо ми оновимо параметри проектування для фільтра FIR, новий відповідь є.
# Down sampled version, create new filter and plot spectrum
R = 25. # how much to down sample by
Fsr = Fs/R # down-sampled sample rate
Fstop = 11.1e6 # modified stopband
Wp = Fpass/(Fsr) # pass normalized frequency
Ws = Fstop/(Fsr) # stop normalized frequency
taps = 256
br = ffd.remez(taps, [0, Wp, Ws, .5], [1,0], maxiter=10000)
Фільтр, що працює на даних пробових даних, має кращу характеристику. Ще одна перевага використання фільтра FIR полягає в тому, що у вас буде лінійна фазова відповідь.