分别利用FFT和DFT进行相同运算: clear all;close all;clc; K=input('K='); N=2^K;
n=0:N-1;x=randn(1,2^K); tic,X=fft(x,N),toc tic,X=DFT(n,x,N),toc 运行结果如下:
Columns 1 through 4069
Elapsed time is 0.218536 seconds. Columns 1 through 4069
Elapsed time is 16.726921 seconds.
由此可见,采用DFT计算时间为16.726921秒,而采用FFT计算只需要0.218536秒;说明,FFT在计算速度上,明显优于其他算法。
三、采样定理
(一)时域采样定理
为了验证时域采样定理,可以把原始采样序列每隔D-1点取一个值,形成一个新的序列。在MATLAB中,通过以下程序实现: clear all;close all;clc; x=ones(1,8); D=2;
xd=x(1:D:length(x));
fx=fft(x,512); fxd=fft(xd,512); z=abs(fx); s=abs(fxd); k=0:length(z)-1; plot(k,s,k,z);
D=2时得到的原始序列和采样序列的幅频特性(蓝色为原始序列,绿色为采样序列)。
D=3时得到的原始序列和采样序列的幅频特性(蓝色为原始序列,绿色为采样序列)。
D=4时得到的原始序列和采样序列的幅频特性(蓝色为原始序列,绿色为采样序列)。
D=0.5时得到的原始序列和采样序列的幅频特性(蓝色为原始序列,绿色为采样序列)。
由此可见,采样周期在D大于2的范围内,出现明显的混叠现象,有失真产生,而在小于1的范围内,采样过于密集,增加运算系统负担。 因此,可验证时域采样定理。
(二)频域采样定理
为了验证频域采样定理,可以把原始采样序列每隔D-1点取一个值,形成一个新的序列。在MATLAB中,通过以下程序实现: clear all;close all;clc; x=-10:0.001:10; y=(sin(x))/x; X=fft(y,20); D=7;
Xd=X(1:D:length(X)); fxd=ifft(Xd,20); s=fxd;
k=0:length(s)-1; plot(k,s);
相关推荐: