基于matlab的离散傅里叶变换

基于matlab的离散傅里叶变换,matlab,transform,fft,dft,Matlab,Transform,Fft,Dft,我在将数据转换到f-k域时遇到一些问题。 我可以在这个网站上看到很多关于使用Matlab的DFT的例子。但它们都没有什么区别。 它们的过程几乎相同,但DFT算法有所不同。 我看到的是 %Setup domain s = size(data); %time domain nt = s(1); %number of time sample dt = time(2); %time interval %position domain nx = s(2); %number of position sa

我在将数据转换到f-k域时遇到一些问题。 我可以在这个网站上看到很多关于使用Matlab的DFT的例子。但它们都没有什么区别。 它们的过程几乎相同,但DFT算法有所不同。 我看到的是

%Setup domain
s = size(data);

%time domain
nt = s(1); %number of time sample
dt = time(2); %time interval

%position domain
nx = s(2); %number of position sample
dx = position(2); %position interval

%Setup wavenumber & frequency
%frequency
Nyq_f = 1/(2*dt);
df = 1/(nt*dt);   % Frequency increment
f = -Nyq_f : df : Nyq_f-df; % frequency

%wavenumber
Nyq_k = 1/(2*dx); % Nyquist of data in first dimension
dk = 1/(nx*dx);   % Wavenumber increment
k = -Nyq_k : dk : Nyq_k-dk; % wavenumber

for j1 = 1 : Nt
    for j2 = 1 : Nt
        data_frequency(j1) = data_frequency(j1) + ...
                    data_time(j2)*exp(-1i*(2*pi)*(f(j1)*t(j2)))*dt;
    end
end
在该代码中,
f
表示频率,
t
表示时间,
dt
表示时间间隔。 但许多其他代码都使用此代码:

for k=1:nfft
    for n=1:nfft
        X(k) = X(k) + f(n)*exp(-j*2*pi*(k-1)*(n-1)/N);
    end
end
我不明白为什么第一个代码的结果和fft函数的结果在不除以数据长度的情况下是相同的


第二个问题是,我的数据的矩阵大小不是2的幂。在这种情况下,我知道当我使用FFT函数时,我需要对矩阵大小的数据使用零填充。因此,即使在使用DFT代码时,我也应该对数据使用零填充吗?

对于
fft
函数,严格来说没有必要将pad设置为2的幂,但是这样做可以使代码运行得更快。代码的第一个but的作用取决于
f
t
的定义。下面是回答帖子中的问题。为了回复评论,请回答您的问题,而不是添加答案。无论如何,如果您将
f
t
的值替换到代码中,您可能会看到两位代码做了相同的事情。添加任意数量的零填充都会扩展原始函数的域,从而降低奈奎斯特频率,所以是的,结果将是不同的向量,但表示同一函数的两个采样。