问题描述
我在将数据转换为 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 (将#修改为@)