信号处理 (scipy.signal)#

卷积#

convolve(in1, in2[, mode, method])

对两个 N 维数组进行卷积。

correlate(in1, in2[, mode, method])

对两个 N 维数组进行互相关。

fftconvolve(in1, in2[, mode, axes])

使用 FFT 对两个 N 维数组进行卷积。

oaconvolve(in1, in2[, mode, axes])

使用重叠相加法对两个 N 维数组进行卷积。

convolve2d(in1, in2[, mode, boundary, fillvalue])

对两个 2 维数组进行卷积。

correlate2d(in1, in2[, mode, boundary, ...])

对两个 2 维数组进行互相关。

sepfir2d(input, hrow, hcol)

与 2-D 可分离 FIR 滤波器进行卷积。

choose_conv_method(in1, in2[, mode, measure])

寻找最快的卷积/相关方法。

correlation_lags(in1_len, in2_len[, mode])

计算 1D 互相关的滞后/位移索引数组。

B 样条#

gauss_spline(x, n)

B 样条基函数 n 阶的高斯近似。

cspline1d(signal[, lamb])

计算秩为 1 的数组的三次样条系数。

qspline1d(signal[, lamb])

计算秩为 1 的数组的二次样条系数。

cspline2d(signal[, lamb, precision])

2-D 三次 (3 阶) B 样条的系数。

qspline2d(signal[, lamb, precision])

2-D 二次 (2 阶) B 样条的系数。

cspline1d_eval(cj, newx[, dx, x0])

在新的点集上评估三次样条。

qspline1d_eval(cj, newx[, dx, x0])

在新的点集上评估二次样条。

spline_filter(Iin[, lmbda])

对秩为 2 的数组进行平滑样条 (三次) 滤波。

滤波#

order_filter(a, domain, rank)

对 N 维数组执行阶数滤波。

medfilt(volume[, kernel_size])

对 N 维数组执行中值滤波。

medfilt2d(input[, kernel_size])

对 2 维数组进行中值滤波。

wiener(im[, mysize, noise])

对 N 维数组执行维纳滤波。

symiirorder1(signal, c0, z1[, precision])

使用一阶节联实现具有镜像对称边界条件的平滑 IIR 滤波器。

symiirorder2(input, r, omega[, precision])

使用二阶节联实现具有镜像对称边界条件的平滑 IIR 滤波器。

lfilter(b, a, x[, axis, zi])

使用 IIR 或 FIR 滤波器沿一维对数据进行滤波。

lfiltic(b, a, y[, x])

根据输入和输出向量为 lfilter 构建初始条件。

lfilter_zi(b, a)

为 lfilter 构建用于阶跃响应稳态的初始条件。

filtfilt(b, a, x[, axis, padtype, padlen, ...])

对信号进行正向和反向数字滤波。

savgol_filter(x, window_length, polyorder[, ...])

对数组应用 Savitzky-Golay 滤波器。

deconvolve(signal, divisor)

使用逆滤波将 divisorsignal 中反卷积。

sosfilt(sos, x[, axis, zi])

使用级联二阶节沿一维对数据进行滤波。

sosfilt_zi(sos)

为 sosfilt 构建用于阶跃响应稳态的初始条件。

sosfiltfilt(sos, x[, axis, padtype, padlen])

使用级联二阶节的正反向数字滤波器。

hilbert(x[, N, axis])

基于 FFT 的解析信号计算。

hilbert2(x[, N])

计算 x 的“2-D”解析信号

envelope(z[, bp_in, n_out, squared, ...])

计算实值或复值信号的包络。

decimate(x, q[, n, ftype, axis, zero_phase])

应用抗混叠滤波器后对信号进行降采样。

detrend(data[, axis, type, bp, overwrite_data])

从数据中沿轴删除线性或常数趋势。

resample(x, num[, t, axis, window, domain])

使用傅里叶方法沿给定 axisx 重采样为 num 个样本。

resample_poly(x, up, down[, axis, window, ...])

使用多相滤波沿给定轴重采样 x

upfirdn(h, x[, up, down, axis, mode, cval])

上采样、FIR 滤波和降采样。

滤波器设计#

bilinear(b, a[, fs])

通过利用双线性变换,从模拟传递函数计算数字 IIR 滤波器。

bilinear_zpk(z, p, k, fs)

使用双线性变换从模拟 IIR 滤波器返回数字 IIR 滤波器。

findfreqs(num, den, N[, kind])

查找用于计算模拟滤波器响应的频率数组。

firls(numtaps, bands, desired, *[, weight, fs])

使用最小二乘误差最小化设计 FIR 滤波器。

firwin(numtaps, cutoff, *[, width, window, ...])

使用窗函数法设计 FIR 滤波器。

firwin2(numtaps, freq, gain, *[, nfreqs, ...])

使用窗函数法设计 FIR 滤波器。

firwin_2d(hsize, window, *[, fc, fs, ...])

使用窗函数法设计 2D FIR 滤波器。

freqs(b, a[, worN, plot])

计算模拟滤波器的频率响应。

freqs_zpk(z, p, k[, worN])

计算模拟滤波器的频率响应。

freqz(b[, a, worN, whole, plot, fs, ...])

计算数字滤波器的频率响应。

sosfreqz(*args, **kwargs)

计算 SOS 格式数字滤波器的频率响应(旧版)。

freqz_sos(sos[, worN, whole, fs])

计算 SOS 格式数字滤波器的频率响应。

freqz_zpk(z, p, k[, worN, whole, fs])

计算 ZPK 形式数字滤波器的频率响应。

gammatone(freq, ftype[, order, numtaps, fs])

Gammatone 滤波器设计。

group_delay(system[, w, whole, fs])

计算数字滤波器的群延迟。

iirdesign(wp, ws, gpass, gstop[, analog, ...])

完整的 IIR 数字和模拟滤波器设计。

iirfilter(N, Wn[, rp, rs, btype, analog, ...])

给定阶数和临界点的 IIR 数字和模拟滤波器设计。

kaiser_atten(numtaps, width)

计算 Kaiser FIR 滤波器的衰减。

kaiser_beta(a)

给定衰减 a,计算 Kaiser 参数 beta

kaiserord(ripple, width)

确定 Kaiser 窗函数法的滤波器窗参数。

minimum_phase(h[, method, n_fft, half])

将线性相位 FIR 滤波器转换为最小相位

savgol_coeffs(window_length, polyorder[, ...])

计算 1-D Savitzky-Golay FIR 滤波器的系数。

remez(numtaps, bands, desired, *[, weight, ...])

使用 Remez 交换算法计算极小极大最优滤波器。

unique_roots(p[, tol, rtype])

从根列表中确定唯一根及其重数。

residue(b, a[, tol, rtype])

计算 b(s) / a(s) 的部分分式展开。

residuez(b, a[, tol, rtype])

计算 b(z) / a(z) 的部分分式展开。

invres(r, p, k[, tol, rtype])

从部分分式展开计算 b(s) 和 a(s)。

invresz(r, p, k[, tol, rtype])

从部分分式展开计算 b(z) 和 a(z)。

不良系数

关于不良条件滤波器系数的警告

低级滤波器设计函数

abcd_normalize([A, B, C, D])

检查状态空间矩阵并确保它们是 2-D 的。

band_stop_obj(wp, ind, passb, stopb, gpass, ...)

用于阶数最小化的带阻目标函数。

besselap(N[, norm])

返回 N 阶 Bessel 滤波器的模拟原型 (z,p,k)。

buttap(N)

返回 N 阶 Butterworth 滤波器的模拟原型 (z,p,k)。

cheb1ap(N, rp)

返回 N 阶 Chebyshev I 型模拟低通滤波器 (z,p,k)。

cheb2ap(N, rs)

返回 N 阶 Chebyshev II 型模拟低通滤波器 (z,p,k)。

ellipap(N, rp, rs)

返回 N 阶椭圆模拟低通滤波器 (z,p,k)。

lp2bp(b, a[, wo, bw])

将低通滤波器原型转换为带通滤波器。

lp2bp_zpk(z, p, k[, wo, bw])

将低通滤波器原型转换为带通滤波器。

lp2bs(b, a[, wo, bw])

将低通滤波器原型转换为带阻滤波器。

lp2bs_zpk(z, p, k[, wo, bw])

将低通滤波器原型转换为带阻滤波器。

lp2hp(b, a[, wo])

将低通滤波器原型转换为高通滤波器。

lp2hp_zpk(z, p, k[, wo])

将低通滤波器原型转换为高通滤波器。

lp2lp(b, a[, wo])

将低通滤波器原型转换为不同频率。

lp2lp_zpk(z, p, k[, wo])

将低通滤波器原型转换为不同频率。

normalize(b, a)

归一化连续时间传递函数的分子/分母。

Matlab 风格的 IIR 滤波器设计#

butter(N, Wn[, btype, analog, output, fs])

Butterworth 数字和模拟滤波器设计。

buttord(wp, ws, gpass, gstop[, analog, fs])

Butterworth 滤波器阶数选择。

cheby1(N, rp, Wn[, btype, analog, output, fs])

Chebyshev I 型数字和模拟滤波器设计。

cheb1ord(wp, ws, gpass, gstop[, analog, fs])

Chebyshev I 型滤波器阶数选择。

cheby2(N, rs, Wn[, btype, analog, output, fs])

Chebyshev II 型数字和模拟滤波器设计。

cheb2ord(wp, ws, gpass, gstop[, analog, fs])

Chebyshev II 型滤波器阶数选择。

ellip(N, rp, rs, Wn[, btype, analog, output, fs])

椭圆(Cauer)数字和模拟滤波器设计。

ellipord(wp, ws, gpass, gstop[, analog, fs])

椭圆(Cauer)滤波器阶数选择。

bessel(N, Wn[, btype, analog, output, norm, fs])

Bessel/Thomson 数字和模拟滤波器设计。

iirnotch(w0, Q[, fs])

设计二阶 IIR 陷波数字滤波器。

iirpeak(w0, Q[, fs])

设计二阶 IIR 峰值(谐振)数字滤波器。

iircomb(w0, Q[, ftype, fs, pass_zero])

设计 IIR 陷波或峰值数字梳状滤波器。

连续时间线性系统#

lti(*system)

连续时间线性时不变系统基类。

StateSpace(*system, **kwargs)

状态空间形式的线性时不变系统。

TransferFunction(*system, **kwargs)

传递函数形式的线性时不变系统类。

ZerosPolesGain(*system, **kwargs)

零点、极点、增益形式的线性时不变系统类。

lsim(system, U, T[, X0, interp])

模拟连续时间线性系统的输出。

impulse(system[, X0, T, N])

连续时间系统的冲激响应。

step(system[, X0, T, N])

连续时间系统的阶跃响应。

freqresp(system[, w, n])

计算连续时间系统的频率响应。

bode(system[, w, n])

计算连续时间系统的 Bode 幅度和相位数据。

离散时间线性系统#

dlti(*system, **kwargs)

离散时间线性时不变系统基类。

StateSpace(*system, **kwargs)

状态空间形式的线性时不变系统。

TransferFunction(*system, **kwargs)

传递函数形式的线性时不变系统类。

ZerosPolesGain(*system, **kwargs)

零点、极点、增益形式的线性时不变系统类。

dlsim(system, u[, t, x0])

模拟离散时间线性系统的输出。

dimpulse(system[, x0, t, n])

离散时间系统的冲激响应。

dstep(system[, x0, t, n])

离散时间系统的阶跃响应。

dfreqresp(system[, w, n, whole])

计算离散时间系统的频率响应。

dbode(system[, w, n])

计算离散时间系统的 Bode 幅度和相位数据。

LTI 表示#

tf2zpk(b, a)

从线性滤波器的分子、分母表示中返回零点、极点、增益 (z, p, k) 表示。

tf2sos(b, a[, pairing, analog])

从传递函数表示中返回二阶节

tf2ss(num, den)

将传递函数转换为状态空间表示。

zpk2tf(z, p, k)

从零点和极点返回多项式传递函数表示

zpk2sos(z, p, k[, pairing, analog])

从系统的零点、极点和增益返回二阶节

zpk2ss(z, p, k)

将零极点增益表示转换为状态空间表示

ss2tf(A, B, C, D[, input])

将状态空间转换为传递函数。

ss2zpk(A, B, C, D[, input])

将状态空间表示转换为零极点增益表示。

sos2zpk(sos)

返回一系列二阶节的零点、极点和增益

sos2tf(sos)

从一系列二阶节返回单个传递函数

cont2discrete(system, dt[, method, alpha])

将连续状态空间系统转换为离散状态空间系统。

place_poles(A, B, poles[, method, rtol, maxiter])

计算 K 使得特征值 (A - dot(B, K))=极点。

波形#

chirp(t, f0, t1, f1[, method, phi, ...])

频率扫描余弦发生器。

gausspulse(t[, fc, bw, bwr, tpr, retquad, ...])

返回高斯调制正弦波

max_len_seq(nbits[, state, length, taps])

最大长度序列 (MLS) 发生器。

sawtooth(t[, width])

返回周期性锯齿波或三角波。

square(t[, duty])

返回周期性方波。

sweep_poly(t, poly[, phi])

具有时变频率的频率扫描余弦发生器。

unit_impulse(shape[, idx, dtype])

单位冲激信号(离散狄拉克函数)或单位基向量。

窗函数#

有关窗函数,请参阅 scipy.signal.windows 命名空间。

scipy.signal 命名空间中,有一个便利函数可以通过名称获取这些窗函数

get_window(window, Nx[, fftbins, xp, device])

返回给定长度和类型的窗。

峰值查找#

argrelmin(data[, axis, order, mode])

计算 data 的相对最小值。

argrelmax(data[, axis, order, mode])

计算 data 的相对最大值。

argrelextrema(data, comparator[, axis, ...])

计算 data 的相对极值。

find_peaks(x[, height, threshold, distance, ...])

根据峰值特性在信号中查找峰值。

find_peaks_cwt(vector, widths[, wavelet, ...])

使用小波变换在 1-D 数组中查找峰值。

peak_prominences(x, peaks[, wlen])

计算信号中每个峰值的突出度。

peak_widths(x, peaks[, rel_height, ...])

计算信号中每个峰值的宽度。

频谱分析#

periodogram(x[, fs, window, nfft, detrend, ...])

使用周期图估计功率谱密度。

welch(x[, fs, window, nperseg, noverlap, ...])

使用 Welch 方法估计功率谱密度。

csd(x, y[, fs, window, nperseg, noverlap, ...])

使用 Welch 方法估计交叉功率谱密度 Pxy。

coherence(x, y[, fs, window, nperseg, ...])

使用 Welch 方法估计离散时间信号 X 和 Y 的幅值平方相干估计 Cxy。

spectrogram(x[, fs, window, nperseg, ...])

使用连续傅里叶变换计算频谱图(旧版函数)。

lombscargle(x, y, freqs[, precenter, ...])

计算广义 Lomb-Scargle 周期图。

vectorstrength(events, period)

确定与给定周期对应的事件的矢量强度。

ShortTimeFFT(win, hop, fs, *[, fft_mode, ...])

提供参数化的离散短时傅里叶变换 (stft) 及其逆变换 (istft)。

closest_STFT_dual_window(win, hop[, ...])

计算给定窗函数最接近所需双窗函数的 STFT 对偶窗函数。

stft(x[, fs, window, nperseg, noverlap, ...])

计算短时傅里叶变换(旧版函数)。

istft(Zxx[, fs, window, nperseg, noverlap, ...])

执行逆短时傅里叶变换(旧版函数)。

check_COLA(window, nperseg, noverlap[, tol])

检查是否满足常数重叠相加 (COLA) 约束(旧版函数)。

check_NOLA(window, nperseg, noverlap[, tol])

检查是否满足非零重叠相加 (NOLA) 约束。

Chirp Z 变换和 Zoom FFT#

czt(x[, m, w, a, axis])

计算 Z 平面螺旋线周围的频率响应。

zoom_fft(x, fn[, m, fs, endpoint, axis])

仅对频率范围 fn 内的 x 计算 DFT。

CZT(n[, m, w, a])

创建一个可调用 chirp z 变换函数。

ZoomFFT(n, fn[, m, fs, endpoint])

创建一个可调用 zoom FFT 变换函数。

czt_points(m[, w, a])

返回计算 chirp z 变换的点。

这些函数比类更易于使用,但在对许多相同长度的数组使用相同的变换时效率较低,因为它们在每次调用时都会重复生成相同的 Chirp 信号。在这种情况下,请改用类来创建可重用函数。