【MATLAB】离散傅⾥叶变换DTFT和IDTFT 1、已知⽤余弦序列x(n)=cos(2*pi*n/10),求其移位信号x(n-3)和x(n+3)在-3<n<10区间的序列波形。MATLAB的程序如下:
n=-3:10;k0=3;k1=-3;
x=cos(2*pi*n/10);
x1=cos(2*pi*(n-k0)/10);
x2=cos(2*pi*(n-k1)/10);
subplot(3,1,1),stem(n,x,'filled','k');
ylabel('x(n)');
subplot(3,1,2),stem(n,x1,'filled','k');
ylabel('x(n-2)');
subplot(3,1,3),stem(n,x2,'filled','k');
ylabel('x(n+2)');
波形如下:
2、对基本序列x1(n)=e^(j*pi*n/8),x2(n)=sin(pi*n/8)进⾏16点DFT。
DFT.m的⼦程序:
function[Xk]=dft(xn,N)
n=[0:1:N-1];
k=[0:1:N-1];
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^nk;
Xk=xn*WNnk;
主程序如下:
N=16;
n=0:N-1;
x1n=exp(j*pi*n/8);
X1k=dft(x1n,N);
x2n=cos(pi*n/8);
X2k=dft(x2n,N);
x3n=sin(pi*n/8);
X3k=dft(x3n,N);
subplot(2,3,1);stem(n,x1n,'.');
title('序列x1(n)');
xlabel('k');ylabel('x1(n)');
subplot(2,3,2);stem(n,x2n,'.');
title('序列x2(n)');
xlabel('k');ylabel('x2(n)');
subplot(2,3,3);stem(n,x3n,'.');
title('序列x3(n)');
xlabel('k');ylabel('x3(n)');
subplot(2,3,4);stem(n,abs(X1k),'.');
title('16点DFT[x1(n)]');
xlabel('k');ylabel('|X1(k)|');
subplot(2,3,5);stem(n,abs(X2k),'.');
title('16点DFT[x2(n)]');
xlabel('k');ylabel('|X2(k)|');
subplot(2,3,6);stem(n,abs(X3k),'.');
title('15点DFT[x3(n)]');
xlabel('k');ylabel('|X3(k)|');
波形如下:
3、序列x(n)=[2,-1,1,1],分别求其DFT和DTFT并⽐较
x=[2,-1,1,1];Xd=dft(x,4);nx=0:3;
Xd1=fftshift(Xd);
K=64;dw=2*pi/K;
k=floor((-K/2+0.5):(K/2-0.5));
X=x*exp(j*dw*nx'*k);
subplot(2,1,1),plot(k*dw,abs(X)),hold on; plot([0:3]*2*pi/4,abs(Xd),'o');
matlab求傅里叶变换
subplot(2,1,2),plot(k*dw,abs(X)),hold on; plot([-2:1]*2*pi/4,abs(Xd1),'x');
set(gcf,'color','w');
波形如下: