用MATLAB进行图像处理

图像处理概念、算法和MATLAB

FFT谱泄漏

一个MATLAB用户最近联系了MathWorks技术支持,询问为什么输出万博1manbetx fft 并没有达到他们的期望,技术支持人员向MATLAB数学团队寻求帮助。万博1manbetx佐治亚理工学院的校友克里斯·特恩斯(Chris Turnes)写了一篇详细的回复,我很喜欢读。我认为将这个案例改编成一篇博客文章是值得的。虽然这个案例是关于1-D FFT的,但潜在的问题也出现在图像处理中,我过去曾写过关于这些问题的文章。(看到我的 傅里叶变换的类别 .)
让我们从一个50hz的正弦波开始,以1khz采样,有4080个样本。
Fs = 1000;
N = 4080;
t = 0: (n - 1) / Fs;
y =罪(2 *π* 50 * t);
情节(t, y)
轴([0 0.1 -1.2 1.2])
包含(“t (sec)”
ylabel (“y (t)”
网格
标题(' y(t)的前0.1秒'
接下来,让我们计算并显示FFT,将频率轴缩放为Hz,并将幅度缩放为FFT长度的平方根。
Y = fft (Y);
f = (f /N) * (0:N-1);
情节(f、abs (Y) /√(N))
包含(的频率(赫兹)
网格
让我们放大50赫兹的峰值。
xlim (45 [55])
到目前为止,这一切似乎都是合理的。现在,让我们用第一个4096个样本来试试这个程序 y (t)美元 .(大约4.1秒。)
N2 = 4096;
t2 = (0: (N2-1)) / Fs;
y2 =罪(2 *π* 50 * t2);
Y2 = fft (Y2);
f2 = (Fs/N2) * (0:N2-1);
情节(f2、abs (Y2) /√(N2))
包含(的频率(赫兹)
xlim (45 [55])
网格
看起来很不一样。让我们把它们画在一起。
持有
情节(f、abs (Y) /√(N))
持有
传奇([“| Y_2 |”“Y | |”])
嗯。4080点信号的FFT在50hz有一个清晰的尖峰,而4096点信号的FFT在这个尖峰周围更分散。
这是一个技术支持问题:如何解释这种差万博1manbetx异?有什么问题吗 fft 函数 $ n = 4096 $
克里斯马上给出了一个很好的概念性解释,我一会儿就会讲到。不过,首先,我想回顾一下我在面对类似问题时的思考过程。是否有独立的方法来验证所讨论的函数是否返回正确的答案?在这种情况下,我知道 fft 函数计算一个叫做 离散傅里叶变换 或DFT。对于离散时间信号 美元$ y [n] ,定义 $ 0 \leq n < n $ , DFT由:
$ Y [k] = \ sum_ {n = 0} ^ {n} Y [n] e ^ {- j 2 \πk n / n}, k = 0, 1 \ ldots, n - 1美元
fft 函数不使用这个公式计算DFT,因为它很慢,但我们可以使用这个公式来检查输出。
k = (0: N2-1);
n = k”;
Y2p =总和(y2”。* exp(1 * 2 *π* k。* n / N2));
Y2 Y2p 是相同的,相对精度在12位以内:
规范(Y2p - Y2) /规范(Y2)
ans = 7.9563 e-13
这完全在我期望从普通浮点舍入差异中看到的差异之内。我们把它们画在一起,以防万一。
情节(f2、abs (Y2) /√(N2), f2, abs (Y2p) /√(N2))
网格
xlim (45 [55])
这两种结果在视觉上难以区分。
好吧,现在,我很有信心 fft 就是返回正确答案。我们可以转向这个问题:为什么仅仅因为我们稍微改变了样本总数,输出结果就会如此不同?让我把它交给Chris,他提供了以下解释:
这只是 频谱泄漏 ;这是一个众所周知的 很好的描述 傅里叶分析中的问题。由长度DFT采样的离散谱频率 N (0: (N - 1) / N .在客户的情况下,他的纯音离散频率不是的整数倍 1 / N美元 .结果,频率内容“泄露”到其他容器中。
另一种理解方法是回想一下DFT/FFT固有地假设输入是一个周期信号。然而,上述两种信号, y y2 ,包含整数个周期。如果你画出信号的结束而不是开始,你就能看到这一点。
情节(t ((end-50):结束),y ((end-50):结束)
ylim ([-1.2 - 1.2])
标题(“N = 4080”
网格
情节(t2 ((end-50):结束),y2 ((end-50):结束)
ylim ([-1.2 - 1.2])
标题(“N = 4096”
网格
$ n = 4080 ,信号在结束时刚好完成了它的周期,所以最后一个采样几乎等于第一个采样(第一个采样是0)。因此,来自假设周期的伪影不是那么强。然而,在4096个样本中,信号结束时还剩下四分之一的周期。从最后一个样本值(-1)到第一个样本值(0)有一个很大的跳变。这个跳变就像信号中的一个不连续,使频谱峰值扩散,导致更多的“泄漏”。
如果一切都排好了,那么生活就会变得美丽;与任何整数 $ k & j $ i ,使用 N = 50 k美元 会产生我们都想看到的理想峰值。然而,对于其他长度,在哪里 50/1000美元 不能写成 q / N美元 为一个整数 ,你会得到光谱泄漏现象。振幅会下降,峰值会散开。结果是正确的;这是数学上预期的结果,即使它与我们最初的直觉不符。
谢谢你让我用你的解释,克里斯!
|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。