欢迎访问宙启技术站
智能推送

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()函数,我们可以方便地进行频域滤波操作,实现对信号中不同频率分量的选择性处理。