演示用Matlab 计算FT 和DTFT 的方法
% M020802
% 演示用Matlab 计算FT 和DTFT 的方法。验证采样间隔越小,DTFT 就越逼近FT。
%
figure(1)
set(gcf,'color','w')
% 产生连续时间信号
Dt=0.00005; t=-0.005:Dt:0.005; xa=exp(-1000*abs(t));
% 显示连续时间信号
subplot(221); plot(t*1000,xa); grid;
xlabel('t'); ylabel('xa(t)'); title('连续时间信号');
% 计算付里叶积分并显示
fmax = 2000; Wmax=2*pi*fmax; K=1000; k=-K:1:K; W=k*Wmax/K;
% Xa=xa*exp(-j*t'*W)*Dt; % Xa 是行向量(第12行)
Xa=exp(-j*W'*t)*xa'*Dt; % Xa 是列向量(第13行)
subplot(222); plot(W/(2*pi),Xa); grid; % 以f(Hz) 作为频率轴
xlabel('归一化频率'); ylabel('Xa(w)'); title('付里叶积分');
% 对连续时间信号采样
Ts=0.0002; n=-25:1:25; x = exp(-1000*abs(n*Ts));
subplot(223); H = stem(n*Ts*1000,x); set(H,'markersize',2); grid; axis([-5,5,0,1.1]);
xlabel('n'); ylabel('x(n)'); title('对连续时间信号采样');
% 计算DTFT 并显示
fs = 1/Ts; f = 2000; K=1000; k=-K:1:K; N = 200; w=(2*pi*(f/fs)*k/K);
X=x*exp(-j*n'*w); % X 是行向量
subplot(224); plot(w*fs/(2*pi),X*Ts); grid; % 以f(Hz) 作为频率轴
xlabel('归一化频率'); ylabel('X * Ts'); title('离散付里叶变换');
% 显示计算误差
% a = abs(Xa)-abs(X*Ts); % Xa 和a 都是行向量(第23行)