信号处理 (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])

卷积两个二维数组。

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

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

sepfir2d(input, hrow, hcol)

与一个二维可分离的FIR滤波器进行卷积。

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

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

correlation_lags(in1_len, in2_len[, mode])

计算一维互相关的时间滞后/位移指数数组。

B样条#

gauss_spline(x, n)

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

cspline1d(signal[, lamb])

计算秩为1数组的立方样条系数。

qspline1d(signal[, lamb])

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

cspline2d(input[, lambda, precision])

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

qspline2d(input[, lambda, 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])

中值滤波一个二维数组。

wiener(im[, mysize, noise])

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

symiirorder1(input, 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)

使用反滤波从 signal 中解卷积 divisor

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

使用级联的二阶部分沿一个维度过滤数据。

sosfilt_zi(sos)

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

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

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

hilbert(x[, N, axis])

计算解析信号,使用希尔伯特变换。

hilbert2(x[, N])

计算 x 的 '2-D' 解析信号

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

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

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

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

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

使用傅里叶方法沿着给定的轴将 x 重采样到 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滤波器。

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

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

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

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

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

使用窗口方法设计FIR滤波器。

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

使用窗口方法设计FIR滤波器。

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

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

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

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

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

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

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

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

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

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

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

伽马通滤波器设计。

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[, ...])

计算一维 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)。

BadCoefficients

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

低级滤波器设计函数:

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

检查状态空间矩阵并确保它们是二维的。

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

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

besselap(N[, norm])

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

buttap(N)

返回 N 阶巴特沃斯滤波器的模拟原型的 (z,p,k)。

cheb1ap(N, rp)

返回 N 阶切比雪夫 I 型模拟低通滤波器的 (z,p,k)。

cheb2ap(N, rs)

返回 N 阶切比雪夫 II 型模拟低通滤波器的 (z,p,k)。

cmplx_sort(p)

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])

巴特沃斯数字和模拟滤波器设计。

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

巴特沃斯滤波器阶数选择。

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

切比雪夫I型数字和模拟滤波器设计。

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

切比雪夫I型滤波器阶数选择。

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

切比雪夫II型数字和模拟滤波器设计。

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

切比雪夫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])

贝塞尔/汤姆森数字和模拟滤波器设计。

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, vertex_zero])

频率扫描余弦波发生器。

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])

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

小波#

cascade(hk[, J])

返回在二分点 K/2**J 处的 (x, phi, psi),基于滤波器系数。

daub(p)

产生Daubechies小波的FIR低通滤波器的系数。

morlet(M[, w, s, complete])

复杂Morlet小波。

qmf(hk)

从低通返回高通qmf滤波器

ricker(points, a)

返回一个Ricker小波,也称为“墨西哥帽小波”。

morlet2(M, s[, w])

复杂Morlet小波,专为与 cwt 一起工作而设计。

cwt(data, wavelet, widths[, dtype])

连续小波变换。

峰值查找#

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, ...])

使用小波变换在一维数组中寻找峰值。

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)

计算 Lomb-Scargle 周期图。

vectorstrength(events, period)

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

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

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

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变换和缩放FFT#

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

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

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

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

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

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

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

创建一个可调用的缩放FFT变换函数。

czt_points(m[, w, a])

返回计算啁啾z变换的点。

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