numpy.fft.fftfreq()函数在频域滤波中的应用
发布时间:2023-12-31 10:20:55
在频域滤波中,numpy.fft.fftfreq()函数可以用来生成频率采样点,用于对信号进行频域分析和滤波操作。
numpy.fft.fftfreq(n, d)函数返回一个长度为n的一维数组,该数组包含了离散傅里叶变换(DFT)输出中对应的频率值。参数n是输入信号的长度,参数d是采样周期。
下面是一个使用numpy.fft.fftfreq()函数进行频域滤波的示例:
import numpy as np
import matplotlib.pyplot as plt
# 生成输入信号(包含了两个频率分量)
t = np.linspace(0, 1, 1000)
x = np.sin(2*np.pi*50*t) + np.sin(2*np.pi*120*t)
# 对输入信号进行傅里叶变换
y = np.fft.fft(x)
# 生成频率采样点
dt = t[1] - t[0]
freqs = np.fft.fftfreq(len(x), dt)
# 设置滤波器
mask = np.where(np.abs(freqs) > 0.1)[0]
y[mask] = 0
# 对滤波后的信号进行逆傅里叶变换
x_filtered = np.fft.ifft(y)
# 绘制结果
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 6))
ax1.plot(t, x, label='Input Signal')
ax1.set_xlabel('Time [s]')
ax1.set_ylabel('Amplitude')
ax1.legend()
ax2.plot(t, x_filtered, label='Filtered Signal')
ax2.set_xlabel('Time [s]')
ax2.set_ylabel('Amplitude')
ax2.legend()
plt.show()
在这个示例中,生成了一个包含了50Hz和120Hz两个频率分量的输入信号。然后使用np.fft.fftfreq()函数生成了频率采样点,通过设置滤波器将低于0.1Hz的频率分量滤除后,再对滤波后的信号进行逆傅里叶变换,最后通过matplotlib绘制了原始信号和滤波后的信号。
通过使用numpy.fft.fftfreq()函数,我们可以方便地进行频域滤波操作,实现对信号中不同频率分量的选择性处理。
