你问的这一步:
∫−∞∞ei2π(ν−μ)tdt=δ(μ−ν) \int_{-\infty}^{\infty} e^{i 2\pi (\nu - \mu)t} dt = \delta(\mu - \nu) ∫−∞∞ei2π(ν−μ)tdt=δ(μ−ν)
为什么这个积分结果是一个狄拉克冲激函数(δ函数),我们可以从函数行为分析和广义函数理论两个角度来解释。
🔍 一、函数行为分析:为什么趋近于 0?
考虑积分:
I(μ)=∫−∞∞ei2π(ν−μ)tdt I(\mu) = \int_{-\infty}^{\infty} e^{i 2\pi (\nu - \mu)t} dt I(μ)=∫−∞∞ei2π(ν−μ)tdt
令 ω=ν−μ\omega = \nu - \muω=ν−μ,则:
-
如果 ω=0\omega = 0ω=0,即μ=ν\mu = \nuμ=ν,那么积分变成:
∫−∞∞1 dt=∞ \int_{-\infty}^{\infty} 1 \, dt = \infty ∫−∞∞1dt=∞
发散。 -
如果 ω≠0\omega \ne 0ω=0,那么ei2πωte^{i 2\pi \omega t}ei2πωt 是一个快速振荡的复指数函数。它在正负方向上无限振荡,积分时正负部分互相抵消,导致:
∫−∞∞ei2πωtdt→0 \int_{-\infty}^{\infty} e^{i 2\pi \omega t} dt \to 0 ∫−∞∞ei2πωtdt→0
这个“趋近于 0”不是严格意义上的数值,而是指在积分意义下趋近于 0。
📐 二、广义函数解释:为什么是 δ 函数?
在广义函数(distribution)理论中,我们不直接计算这个积分,而是看它对测试函数 ϕ(μ)\phi(\mu)ϕ(μ)的作用:
∫−∞∞(∫−∞∞ei2π(ν−μ)tdt)ϕ(μ)dμ \int_{-\infty}^{\infty} \left( \int_{-\infty}^{\infty} e^{i 2\pi (\nu - \mu)t} dt \right) \phi(\mu) d\mu ∫−∞∞(∫−∞∞ei2π(ν−μ)tdt)ϕ(μ)dμ
交换积分顺序后变成:
∫−∞∞ϕ(μ)(∫−∞∞ei2π(ν−μ)tdt)dμ \int_{-\infty}^{\infty} \phi(\mu) \left( \int_{-\infty}^{\infty} e^{i 2\pi (\nu - \mu)t} dt \right) d\mu ∫−∞∞ϕ(μ)(∫−∞∞ei2π(ν−μ)tdt)dμ
这个表达式在 μ=ν\mu = \nuμ=ν附近有贡献,在其他地方趋近于 0,因此它的作用等价于:ϕ(ν)\phi(\nu)ϕ(ν)
这正是 δ 函数的定义:
∫−∞∞δ(μ−ν)ϕ(μ)dμ=ϕ(ν) \int_{-\infty}^{\infty} \delta(\mu - \nu) \phi(\mu) d\mu = \phi(\nu) ∫−∞∞δ(μ−ν)ϕ(μ)dμ=ϕ(ν)
所以我们说:
∫−∞∞ei2π(ν−μ)tdt=δ(μ−ν) \int_{-\infty}^{\infty} e^{i 2\pi (\nu - \mu)t} dt = \delta(\mu - \nu) ∫−∞∞ei2π(ν−μ)tdt=δ(μ−ν)
不是一个传统意义上的积分结果,而是一个广义函数等价。
📊 数值逼近:能不能算出来?
你可以用数值逼近来验证这个结论。例如,考虑有限区间上的积分:
IM(ω)=∫−MMei2πωtdt=sin(2πMω)πω I_M(\omega) = \int_{-M}^{M} e^{i 2\pi \omega t} dt = \frac{\sin(2\pi M \omega)}{\pi \omega} IM(ω)=∫−MMei2πωtdt=πωsin(2πMω)
这个函数就是著名的 sinc 函数:
IM(ω)=2M⋅sinc(2Mω) I_M(\omega) = 2M \cdot \text{sinc}(2M\omega) IM(ω)=2M⋅sinc(2Mω)
当 M→∞M \to \inftyM→∞,这个函数趋近于 δ 函数的逼近形式。
例子
我们来进行一次数学上的频谱卷积推导,解释两个余弦光栅在空间域相乘后,频域中为什么会出现 9 个频率点,并给出具体的计算过程。
🎯 问题设定
你有两个二维余弦光栅:
- ( g_1(x, y) = \cos(2\pi f_1 \cdot p_1(x, y)) )
- ( g_2(x, y) = \cos(2\pi f_2 \cdot p_2(x, y)) )
其中:
- ( p_1(x, y) = x \cos\theta_1 + y \sin\theta_1 )
- ( p_2(x, y) = x \cos\theta_2 + y \sin\theta_2 )
这两个光栅分别在方向 ( \theta_1 ) 和 ( \theta_2 ) 上具有频率 ( f_1 ) 和 ( f_2 )。
📐 傅里叶变换结果(单个余弦)
二维余弦函数的傅里叶变换是两个对称的脉冲:
[
\mathcal{F}\left[\cos(2\pi f \cdot p(x, y))\right] = \frac{1}{2} \left[ \delta(\vec{u} - \vec{f}) + \delta(\vec{u} + \vec{f}) \right]
]
其中:
- ( \vec{f} = f \cdot (\cos\theta, \sin\theta) )
- ( \vec{u} = (u, v) ) 是频域坐标
所以:
- ( g_1 ) 的频谱有两个点:( \pm \vec{f}_1 = \pm f_1 (\cos\theta_1, \sin\theta_1) )
- ( g_2 ) 的频谱有两个点:( \pm \vec{f}_2 = \pm f_2 (\cos\theta_2, \sin\theta_2) )
🔄 卷积过程数学推导
空间域乘积:
[
g(x, y) = g_1(x, y) \cdot g_2(x, y)
]
频域变换:
[
G(u, v) = G_1(u, v) * G_2(u, v)
]
其中 ( * ) 是二维卷积。
由于 ( G_1 ) 和 ( G_2 ) 都是由两个 Dirac 脉冲组成,卷积结果是所有频率点的向量和:
[
\text{卷积结果频率点} = { \vec{f}_1 + \vec{f}_2, \vec{f}_1 - \vec{f}_2, -\vec{f}_1 + \vec{f}_2, -\vec{f}_1 - \vec{f}_2, \vec{f}_1, -\vec{f}_1, \vec{f}_2, -\vec{f}_2, \vec{0} }
]
共 9 个点。
📌 示例计算(freq = 10,角度 = 0° 和 90°)
- ( \vec{f}_1 = 10 \cdot (\cos 0°, \sin 0°) = (10, 0) )
- ( \vec{f}_2 = 10 \cdot (\cos 90°, \sin 90°) = (0, 10) )
频率点计算如下:
点编号 | 计算公式 | 频率坐标 |
---|---|---|
1 | ( \vec{f}_1 + \vec{f}_2 ) | (10, 10) |
2 | ( \vec{f}_1 - \vec{f}_2 ) | (10, -10) |
3 | ( -\vec{f}_1 + \vec{f}_2 ) | (-10, 10) |
4 | ( -\vec{f}_1 - \vec{f}_2 ) | (-10, -10) |
5 | ( \vec{f}_1 ) | (10, 0) |
6 | ( -\vec{f}_1 ) | (-10, 0) |
7 | ( \vec{f}_2 ) | (0, 10) |
8 | ( -\vec{f}_2 ) | (0, -10) |
9 | ( \vec{0} ) | (0, 0) |
这些就是你在频谱图中看到的 9 个亮点。
🧠 总结
- 每个余弦光栅 → 2 个频率点
- 空间乘法 → 频域卷积 → 所有频率点组合
- 卷积结果 → 9 个频率点(包括中心点)
我们来一步步推导二维余弦光栅函数:
[
g(x, y) = \cos\left(2\pi f (x \cos\theta + y \sin\theta)\right)
]
的二维傅里叶变换。
🧮 Step 1: 向量形式表达
定义方向向量:
[
\vec{f} = f (\cos\theta, \sin\theta), \quad \vec{r} = (x, y)
]
则:
[
g(x, y) = \cos(2\pi \vec{f} \cdot \vec{r})
]
这是一个在方向 ( \vec{f} ) 上的二维余弦波。
📊 Step 2: 使用余弦的傅里叶变换性质
余弦函数是两个复指数的和:
[
\cos(2\pi \vec{f} \cdot \vec{r}) = \frac{1}{2} \left( e^{j 2\pi \vec{f} \cdot \vec{r}} + e^{-j 2\pi \vec{f} \cdot \vec{r}} \right)
]
根据傅里叶变换性质:
[
\mathcal{F}\left[e^{j 2\pi \vec{f} \cdot \vec{r}}\right] = \delta(\vec{u} - \vec{f}), \quad
\mathcal{F}\left[e^{-j 2\pi \vec{f} \cdot \vec{r}}\right] = \delta(\vec{u} + \vec{f})
]
所以:
[
\mathcal{F}[g(x, y)] = \frac{1}{2} \left[ \delta(\vec{u} - \vec{f}) + \delta(\vec{u} + \vec{f}) \right]
]
📐 Step 3: 写出具体频率坐标
将 ( \vec{f} = f (\cos\theta, \sin\theta) ) 代入:
[
\mathcal{F}[g(x, y)] = \frac{1}{2} \left[
\delta(u - f\cos\theta, v - f\sin\theta) +
\delta(u + f\cos\theta, v + f\sin\theta)
\right]
]
这表示频域中有两个脉冲点,分别位于:
- ( (u, v) = (f\cos\theta, f\sin\theta) )
- ( (u, v) = (-f\cos\theta, -f\sin\theta) )
📌 结论
二维余弦光栅的傅里叶变换是两个对称的频率点:
- 方向由角度 ( \theta ) 决定
- 距离原点的距离为频率 ( f )
这也解释了你在频谱图中看到的两个亮点,它们是余弦波在频域中的能量集中点。
如果你想进一步推导多个余弦光栅的乘积 ( g_1(x, y) \cdot g_2(x, y) ) 的傅里叶变换,我们可以继续用卷积定理来构建频率点分布。要不要继续?
import numpy as np
import matplotlib.pyplot as plt
from numpy.fft import fft2, fftshift
# https://blog.csdn.net/weixin_47618517/article/details/127730507
# 图像尺寸
size = 100
# 余弦光栅参数
freq1 = 10 # 第一个光栅频率
freq2 = 10 # 第二个光栅频率
angle1 = 0 # 第一个光栅角度(度)
angle2 = 90 # 第二个光栅角度(度)
def generate_grating(freq, angle_deg, size):
angle_rad = np.deg2rad(angle_deg)#角度转弧度
x = np.arange(size)
y = np.arange(size)
X, Y = np.meshgrid(x, y)
# print("X:\n", X)
# print("Y:\n", Y)
# 方向投影
projection = X * np.cos(angle_rad) + Y * np.sin(angle_rad)
# print("projection:\n", projection)
return 1 +1 * np.cos(2 * np.pi * freq * projection / size)# T = size / freq
# 生成两个光栅
grating1 = generate_grating(freq1, angle1, size)
# print("grating1:\n", grating1)
grating2 = generate_grating(freq2, angle2, size)
# print("grating2:\n", grating2)
# 空间域乘法(模拟墨水叠加)
combined = grating1 * grating2
# 频域分析
spectrumgrating1 = np.abs(fftshift(fft2(grating1)))
spectrumgrating2 = np.abs(fftshift(fft2(grating2)))
spectrumcombined = np.abs(fftshift(fft2(combined)))
# 可视化
fig, axs = plt.subplots(3, 2, figsize=(80, 80))
axs[0,0].imshow(grating1, cmap='gray')
axs[0,0].set_title(f'Grating 1 ({angle1}°)')
axs[0,1].imshow(np.log1p(spectrumgrating1), cmap='gray')
axs[0,1].set_title("Fourier Spectrum of Grating 1")
axs[1,0].imshow(grating2, cmap='gray')
axs[1,0].set_title(f'Grating 2 ({angle2}°)')
axs[1,1].imshow(np.log1p(spectrumgrating2), cmap='gray')
axs[1,1].set_title("Fourier Spectrum of Grating 2")
axs[2,0].imshow(combined, cmap='gray')
axs[2,0].set_title(f'combined Grating ({angle1}° + {angle2}°)')
axs[2,1].imshow(np.log1p(spectrumcombined), cmap='gray')
axs[2,1].set_title("Fourier Spectrum of combined Grating")
plt.tight_layout()
plt.subplots_adjust(hspace=0.2) # 增加子图之间的垂直间距
plt.show()