为什么使用复共轭进行傅立叶光谱分割?

时间:2014-01-27 15:57:21

标签: matlab fft complex-numbers

我看到写了几个代码,其中傅立叶光谱用​​这样的复共轭分割:

af = fftn(double(img1));
bf = fftn(double(img2));
cp = af .* conj(bf) ./ abs(af .* conj(bf));

this script等。

这与处理复杂的分工有关吗?阅读有关./运算符的文档,声明它处理复数。这是错的吗?:

af./bf

3 个答案:

答案 0 :(得分:5)

表达式af./bfaf.*conj(bf)./abs(bf).^2在MATLAB中是完全等效的,如果这是你要问的内容。但是,在这个问题和你所展示的例子之间没有明确的联系。 abs(bf).^2未出现在您示例中的分母中。

在您已经展示的代码中使用conj()的唯一原因是因为它是时间倒置的傅里叶对偶

对于实值时间信号f(t),f(t)< - > F(k)意味着f(-t)< ---> conj(F(k))

这具有time delay analysis using phase correlation的具体应用。

答案 1 :(得分:1)

你可以重写这个表达式,避免结合为

(af./bf)./abs(af./bf). 

然而,表达式的给定形式具有以下优点:您可以通过在分母中添加一个小eps来对该除法进行去除,

(af.*conj(bf))./(1e-40+abs(af.*conj(bf)))

答案 2 :(得分:0)

考虑以下等效内容(约1e-15内)代码:

cpX = exp(1i*(angle(af)-angle(bf)));

您可以使用复共轭(cp = af .* conj(bf) ./ abs(af .* conj(bf)))或通过显式减去上述相位来计算归一化的交叉功率谱。

考虑到the FFT of a shifted impulse is a complex exponentialcpX等式应该可以让您深入了解“相位相关”如何让您在两幅图像之间找到平移。反向FFT中峰值位置给出了转换。