本文简要介绍 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。