matlab求矩形序列的FT,演示用 Matlab 计算FT 和 DTFT 的方法

演示用Matlab 计算FT 和DTFT 的方法

8a4b3f99c19378c384c93e4c01eedadd.png

% 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行)

你可能感兴趣的:(matlab求矩形序列的FT)