我正在 MATLAB 中编写一个程序,作为我基于 DFT 的项目的一部分。
设N x N
数据矩阵为X
,对应的 DFT 矩阵为Y
,则 DFT 系数可表示为
Y(k1,k2) = ∑(n1=0:N-1)∑(n2=0:N-1)[X(n1,n2)*(WN^(n1k1+n2k2))] (1)
0≤k1,k2≤N-1
Where WN^k=e^((-j2πk)/N)
由于旋转因子 WN 是周期性的,(1)
可以表示为
Y(k1,k2)=∑(n1=0:N-1)∑(n1=0:N-1)[X(n1,n2)*(WN^([(n1k1+n2k2)mod N) ] (2)
对于给定的,指数((n1k1 +n2k2)) N = p
由一组 满足。因此,通过对此类数据进行分组并应用 的属性,(n1,n2)
(k1,k2)
WN^(p+N /2) = -(WN^P)
(2)
可以表示为
Y(k1,k2)= ∑(p=0:M-1)[Y(k1,k2,p)*(WN^p)] (3)
在哪里
Y(k1,k2,p)= ∑(∀(n1,n2)|z=p)X(n1,n2) - ∑(∀(n1,n2)|z=p+M)X(n1,n2) (4)
z=[(n1k1+n2k2)mod N] (5)
我正在编写一个程序来查找Y(k1,k2,p)
。即我需要从给定的 2D 方阵(即矩阵)创建 2D 矩阵的切片(即,每个切片都是 2D 矩阵的 3D 矩阵X
).. 的维度X
可以高达512.
基于上述方程,我编写了如下代码。我需要对其进行矢量化。
N=size(X,1);
M=N/2;
Y(1:N,1:N,1:M)=0;
for k1 = 1:N
for k2 = 1:N
for p= 1:M
for n1=1:N
for n2=1:N
N1=n1-1; N2=n2-1; P=p-1; K1=k1-1; K2=k2-1;
z=mod((N1*K1+N2*K2),N);
if (z==P)
Y(k1,k2,p)= Y(k1,k2,p)+ X(n1,n2);
elsif (z==(P+M))
Y(k1,k2,p)= Y(k1,k2,p)- X(n1,n2);
end
end
end
end
end
由于有 5 个 FOR 循环,对于 N 的大尺寸,执行时间非常长。因此,请为我提供消除 FOR 循环和矢量化代码的解决方案。我需要使代码以最大速度执行...谢谢再次..