📌  相关文章
📜  Gibb's Phenomenon Rectangular 和 Hamming Window 实现(1)

📅  最后修改于: 2023-12-03 14:41:24.582000             🧑  作者: Mango

Gibb's Phenomenon Rectangular和Hamming Window

介绍

Gibb's Phenomenon是指由于傅里叶级数中的截断而导致出现振铃现象的现象,解决这个问题的一种方法是使用Hamming Window,通过加窗来取得更好的截止效果。

在信号处理中,我们经常需要使用傅里叶变换来将信号从时域转换到频域。在实际应用中,我们对信号进行截断,造成了小波失真现象,这时候我们就需要进行处理来减少失真,并获取更好的结果。

rectangular和Hamming Window都是用于减少傅里叶级数截断造成的失真的技术,可以改善频域及时域的参数。

Gibb's Phenomenon Rectangular

当我们把一个周期性的矩形波的傅里叶级数展开时,可以得到波的非常不光滑的重建。这是因为傅里叶级数只有在周期ic函数光滑时才能完美地重建它,否则我们就会在周期ic处看到振铃。 这种现象叫做 Gibb's Phenomenon(吉布斯现象)。

为了解决这个问题,我们可以使用Hamming窗口函数,使波形光滑化。

下面是一个使用Gibb's Phenomenon Rectangular的Python示例。

import matplotlib.pyplot as plt
import numpy as np

# 设置函数参数
N = 32
T = 1.0 / 80.0
x = np.linspace(0.0, N * T, N, endpoint = False)
y = np.zeros(N)
y[:N // 2] = 1
y[N // 2:] = -1

# 使用傅里叶变换获取频率
yf = np.fft.fft(y)
xf = np.linspace(0.0, 1.0 / (2.0 * T), N // 2)

# 绘制信号和频率图
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('Time (s)')
ax.set_ylabel('Amplitude')

fig, ax = plt.subplots()
ax.plot(xf, 2.0 / N * np.abs(yf[:N // 2]))
ax.set_xlabel('Frequency (Hz)')
ax.set_ylabel('Power')
plt.show()

在上面的代码中,我们生成一个非常基本的矩形波,并绘制了傅里叶变换的结果。如图所示,上图是信号的时间域展示,下图是频率域展示。

示例图

可以看到,信号在傅里叶变换后出现了振铃现象,这是因为我们仅使用了Gibb's Phenomenon Rectangular。所以这里我们需要加入Hamming窗口函数来优化结果。

Hamming Window

在信号处理中,Hamming窗口函数是常用的窗口函数之一,用于减少一个连续的函数进行截断而导致的失真。 Hamming窗口函数的形式如下:

Hamming窗口函数公式

只需将窗口函数应用于信号,并重新计算傅里叶变换,我们就可以获得更好的结果。

下面是一个使用Gibb's Phenomenon Rectangular和Hamming Window的Python示例。

import matplotlib.pyplot as plt
import numpy as np

# 设置参数
N = 32
T = 1.0 / 80.0
x = np.linspace(0.0, N * T, N, endpoint = False)
y = np.zeros(N)
y[:N // 2] = 1
y[N // 2:] = -1

# 应用Hamming窗口函数
hamming_window = np.hamming(N)
y = y * hamming_window

# 计算傅里叶变换
yf = np.fft.fft(y)
xf = np.linspace(0.0, 1.0 / (2.0 * T), N // 2)

# 绘制信号和频率域图像
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('Time (s)')
ax.set_ylabel('Amplitude')

fig, ax = plt.subplots()
ax.plot(xf, 2.0 / N * np.abs(yf[:N // 2]))
ax.set_xlabel('Frequency (Hz)')
ax.set_ylabel('Power')
plt.show()

在上面的代码中,我们首先应用了Hamming窗口函数,然后绘制了信号的时间和频率图。如图所示:

示例图2

可以看到,使用Hamming窗口函数后,傅里叶变换结果明显更加平滑,没有了原来的振铃现象。

结论

通过本文,我们可以了解到Gibb's Phenomenon Rectangular和Hamming Window在信号处理中的应用。这两种方法都是非常有效的技术,在图像和音频处理中得到了广泛的应用。