本文簡要介紹 python 語言中 scipy.signal.firls
的用法。
用法:
scipy.signal.firls(numtaps, bands, desired, *, weight=None, nyq=<object object>, fs=None)#
使用最小二乘誤差最小化的 FIR 濾波器設計。
計算linear-phase 有限衝激響應 (FIR) 濾波器的濾波器係數,該濾波器最接近頻帶說明的所需頻率響應,並且在最小二乘意義上是所需的(即加權 mean-squared 誤差在指定的頻段被最小化)。
- numtaps: int
FIR 濾波器中的抽頭數。 numtaps 必須是奇數。
- bands: array_like
包含頻帶邊(以 Hz 為單位)的單調非遞減序列。所有元素必須為非負且小於或等於 nyq 給出的奈奎斯特頻率。這些頻段被指定為頻率對,因此,如果使用一維數組,其長度必須是偶數,例如 np.array([0, 1, 2, 3, 4, 5])。或者,可以將 band 指定為 nx2 大小的二維數組,其中 n 是 band 的數量,例如 np.array([[0, 1], [2, 3], [4, 5]])。
- desired: array_like
與在每個波段的起點和終點包含所需增益的波段大小相同的序列。
- weight: 數組,可選
解決最小二乘問題時給予每個波段區域的相對權重。重量必須是帶子大小的一半。
- nyq: 浮點數,可選,已棄用
這就是奈奎斯特頻率。頻段中的每個頻率必須介於 0 和 nyq(含)之間。默認值為 1。
- fs: 浮點數,可選
信號的采樣頻率。每個頻率在樂隊必須介於 0 和
fs/2
(包括的)。默認值為 2。
- coeffs: ndarray
最佳(在最小二乘意義上)FIR 濾波器的係數。
參數 ::
返回 ::
注意:
此實現遵循 [1] 中給出的算法。如上所述,最小二乘設計具有多種優勢:
Optimal in a least-squares sense.
Simple, non-iterative method.
The general solution can obtained by solving a linear system of equations.
Allows the use of a frequency dependent weighting function.
該函數構造一個 I 型線性相位 FIR 濾波器,其中包含奇數個係數滿足
:奇數個係數和濾波器對稱性避免了在 Nyquist 和 0 頻率下可能出現的邊界條件(例如,對於 II、III 或 IV 型變體)。
參考:
[1]Ivan Selesnick,Linear-Phase 最小二乘法的 Fir 濾波器設計。 OpenStax CNX。 2005 年 8 月 9 日。http://cnx.org/contents/eb1ecb35-03a9-4610-ba87-41cd771c95f2@7
例子:
我們要構造一個band-pass 過濾器。請注意,我們的阻帶和通帶之間的頻率範圍內的行為是未指定的,因此可能會根據我們濾波器的參數而過衝:
>>> import numpy as np >>> from scipy import signal >>> import matplotlib.pyplot as plt >>> fig, axs = plt.subplots(2) >>> fs = 10.0 # Hz >>> desired = (0, 0, 1, 1, 0, 0) >>> for bi, bands in enumerate(((0, 1, 2, 3, 4, 5), (0, 1, 2, 4, 4.5, 5))): ... fir_firls = signal.firls(73, bands, desired, fs=fs) ... fir_remez = signal.remez(73, bands, desired[::2], fs=fs) ... fir_firwin2 = signal.firwin2(73, bands, desired, fs=fs) ... hs = list() ... ax = axs[bi] ... for fir in (fir_firls, fir_remez, fir_firwin2): ... freq, response = signal.freqz(fir) ... hs.append(ax.semilogy(0.5*fs*freq/np.pi, np.abs(response))[0]) ... for band, gains in zip(zip(bands[::2], bands[1::2]), ... zip(desired[::2], desired[1::2])): ... ax.semilogy(band, np.maximum(gains, 1e-7), 'k--', linewidth=2) ... if bi == 0: ... ax.legend(hs, ('firls', 'remez', 'firwin2'), ... loc='lower center', frameon=False) ... else: ... ax.set_xlabel('Frequency (Hz)') ... ax.grid(True) ... ax.set(title='Band-pass %d-%d Hz' % bands[2:4], ylabel='Magnitude') ... >>> fig.tight_layout() >>> plt.show()
相關用法
- Python SciPy signal.firwin用法及代碼示例
- Python SciPy signal.firwin2用法及代碼示例
- Python SciPy signal.find_peaks用法及代碼示例
- Python SciPy signal.filtfilt用法及代碼示例
- Python SciPy signal.findfreqs用法及代碼示例
- Python SciPy signal.find_peaks_cwt用法及代碼示例
- Python SciPy signal.freqs用法及代碼示例
- Python SciPy signal.freqs_zpk用法及代碼示例
- Python SciPy signal.freqz用法及代碼示例
- Python SciPy signal.freqresp用法及代碼示例
- Python SciPy signal.fftconvolve用法及代碼示例
- Python SciPy signal.freqz_zpk用法及代碼示例
- Python SciPy signal.czt_points用法及代碼示例
- Python SciPy signal.chirp用法及代碼示例
- Python SciPy signal.residue用法及代碼示例
- Python SciPy signal.iirdesign用法及代碼示例
- Python SciPy signal.max_len_seq用法及代碼示例
- Python SciPy signal.kaiser_atten用法及代碼示例
- Python SciPy signal.oaconvolve用法及代碼示例
- Python SciPy signal.hilbert用法及代碼示例
- Python SciPy signal.ricker用法及代碼示例
- Python SciPy signal.group_delay用法及代碼示例
- Python SciPy signal.cheb2ord用法及代碼示例
- Python SciPy signal.get_window用法及代碼示例
- Python SciPy signal.lfilter用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.signal.firls。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。