使用matlab的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 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 代码,我也应该对数据使用零填充吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)