📜  Numpy 中的 kaiser – Python(1)

📅  最后修改于: 2023-12-03 15:03:18.814000             🧑  作者: Mango

Numpy 中的 Kaiser Window

在信号处理领域,kaiser窗口是一种用于数字信号处理的加窗函数。它可以减少滤波器波纹的出现和频带外泄漏的功率。

使用方法

在numpy中,我们可以使用numpy.kaiser函数构造kaiser窗口。

import numpy as np

window = np.kaiser(N, beta)

函数的参数包括窗口长度N和调整窗口形状的参数beta

调整形状参数 beta

形状参数beta控制着窗口的形状。当beta越大,窗口的主瓣宽度越窄,旁瓣的抑制能力越大。

window = np.kaiser(51, 14)

image1

window = np.kaiser(51, 6)

image2

应用举例

Kaiser窗口通常用于数字信号处理和滤波器设计。下面是一些常用的应用举例。

带通滤波器

Kaiser窗口可以用于设计带通滤波器。

from scipy import signal

order = 4
fs = 100.0
low = 10.0
high = 20.0
nyq = 0.5 * fs

b, a = signal.iirfilter(order, [low/nyq, high/nyq], btype='band', ftype='kaiser', beta=5)

w, h = signal.freqz(b, a, worN=8000)

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.plot((fs * 0.5 / np.pi) * w, abs(h), label="order = %d" % order)

ax.set_xlabel('Frequency (Hz)')
ax.set_ylabel('Gain')
ax.grid(True)
ax.legend(loc='best')

image3

噪声移除

Kaiser窗口可以用于信号去噪。下面的例子演示了如何使用Kaiser窗口去除信号中的噪声。

from numpy.random import randn
from scipy.signal import lfilter, firwin

# Create a noisy signal
t = np.linspace(0, 1, 500)
s = np.sin(2*np.pi*10*t) + randn(len(t)) * 0.4

# Use firwin to create a lowpass filter
fir_filt = firwin(numtaps=50, cutoff=6, window='kaiser', nyq=0.5)
output_signal = lfilter(fir_filt, 1.0, s)

# Plot the noisy signal and the filtered output
fig, axs = plt.subplots(2)
fig.tight_layout(pad=3.0)

axs[0].set(title='Noisy signal')
axs[0].plot(t, s)

axs[1].set(title='Filtered signal')
axs[1].plot(t, output_signal)

image4

总结

Kaiser窗口是数字信号处理中常用的加窗函数之一。它可以用于信号滤波、去噪等处理,通过调整形状参数beta,可以得到不同的加窗效果。在numpy中,我们可以使用numpy.kaiser函数来方便地构造Kaiser窗口。