cupyx.scipy.signal.windows.blackman#
- cupyx.scipy.signal.windows.blackman(M, sym=True)[源码]#
返回一个 Blackman 窗。
Blackman 窗是一个由前三个余弦项之和形成的锥形函数。它被设计用来尽可能减少频谱泄漏。它接近最优,仅略逊于 Kaiser 窗。
- 参数:
- 返回值:
w – 窗函数,其最大值归一化为 1(但如果 M 为偶数且 sym 为 True,则值 1 不会出现)。
- 返回类型:
说明
Blackman 窗的定义如下:
\[w(n) = 0.42 - 0.5 \cos(2\pi n/M) + 0.08 \cos(4\pi n/M)\]“精确 Blackman”窗被设计用于消除第三和第四个旁瓣,但在边界处存在不连续性,导致衰减率为 6 dB/倍频程。此窗是“精确”窗的近似,它未能很好地消除旁瓣,但在边缘处平滑,将衰减率提高到 18 dB/倍频程。[3]
关于 Blackman 窗的大多数参考文献来自信号处理文献,其中它被用作许多窗函数之一来平滑数值。它也被称为 apodization(意思是“移除脚部”,即平滑采样信号开始和结束时的不连续性)或 tapering 函数(锥化函数)。它被认为是“近乎最优”的锥化函数,(在某些衡量标准下)几乎与 Kaiser 窗一样好。
参考文献
示例
绘制窗函数及其频率响应
>>> from cupyx.scipy.signal import blackman >>> import cupy as cp >>> from cupy.fft import fft, fftshift >>> import matplotlib.pyplot as plt
>>> window = blackman(51) >>> plt.plot(cupy.asnumpy(window)) >>> plt.title("Blackman window") >>> plt.ylabel("Amplitude") >>> plt.xlabel("Sample")
>>> plt.figure() >>> A = fft(window, 2048) / (len(window)/2.0) >>> freq = cupy.linspace(-0.5, 0.5, len(A)) >>> response = cupy.abs(fftshift(A / cupy.abs(A).max())) >>> response = 20 * cupy.log10(cupy.maximum(response, 1e-10)) >>> plt.plot(cupy.asnumpy(freq), cupy.asnumpy(response)) >>> plt.axis([-0.5, 0.5, -120, 0]) >>> plt.title("Frequency response of the Blackman window") >>> plt.ylabel("Normalized magnitude [dB]") >>> plt.xlabel("Normalized frequency [cycles per sample]")