MATLAB中的fft2是单一的吗?会发生一些差异

信息处理 fft 离散信号 傅里叶变换 傅立叶 测量
2022-02-08 14:26:45

在 MATLAB 中实现 fft2 时遇到问题。

问题是我试图模拟真实的测量Y=|FCXFH|2- 对象傅里叶域的强度X, 在哪里F表示傅里叶变换矩阵C表示{+1,1}矩阵。

但我想更换C现实的D={0,1}2D1=C. 因此,经过一些简单的计算,测量Y变成Yreal=2(|FDXFH|2+|FD¯XFH|2)|FXFH|2, 在哪里D¯表示倒置D. 计算来自一篇论文。

对于原创YC该算法可以工作。因此,我尝试验证Yreal. 奇怪的事情发生了,虽然傅里叶域的强度Yreal看起来与Y. 他们完全不同!!!

我很困惑,方程式是正确的,但为什么它们不同?我认为问题出在fft2函数上。谁能告诉我fft2的原理?提前致谢!!!


这是代码:

这实现了原始算法C

Y = abs(fftshift(fft2((2*D-ones(n1,n2)).*x))).^2;

这实现了等式 - 真实测量:

Y_real = 2*(  abs(fftshift(fft2(D.*x))).^2 + abs(fftshift(fft2( ( ones(n1,n2) - D ).*x ))).^2 ) - abs(fftshift(fft2(x))).^2; 
1个回答

DFT(一维或二维)的标准(常规)定义不是单一的。

例如,将 1D 标准(常规)DFT 对视为:

X[k]=n=0N1x[n]ej2πNnk

x[n]=1Nk=0N1X[k]ej2πNkn

DFT 不是单一的,因为前向和后向变换不是对称的(尺度1N)

因此 MATLAB 的 fft() 和 fft2() 函数不会提供酉变换;即,它们不保存能量。

但是,您可以通过将比例分配为以下方式来定义DFT 的单一版本:

X[k]=1Nn=0N1x[n]ej2πNnk

x[n]=1Nk=0N1X[k]ej2πNkn

现在这对是单一的。