已知序列xn=[1,1,1,1],试用MATLAB编写程序,计算该序列的离散付里叶变换及逆离散付里叶变换。
(1)MATLAB程序:
function xk=dft(xn,N) %dft
n=[0:1:N-1];
k=n;
WN=exp(-j*2*pi/N); %旋转因子
nk=n'*k;
WNnk=WN.^nk;
xk=xn*WNnk;
function xn=idft(xk,N) %idft
n=[0:1:N-1];
k=n;
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^(-nk);
xn=xk*WNnk/N;
xn=[1,1,1,1]; %计算dft
N=4;
xk=dft(xn,N)'
xk=[4,0,0,0]; %计算idft
N=4;
xn=idft(xk,N)'
仿真结果:
DFT:
(2)MATLAB程序:
xn=[1,1,1,1];
N=length(xn);
n=0:N-1;
k=0:N-1;
Xk=xn*exp(-j*2*pi/N).^(n'*k); %计算DFT
x=(Xk*exp(j*2*pi/N).^(n'*k))/N; %计算IDFT
subplot(1,2,2);stem(k,abs(Xk));title('|X(k)|'); %画图
axis([-1,N,1.1*min(abs(Xk)),1.1*max(abs(Xk))]); %加坐标
subplot(1,2,1);stem(n,xn);title('x(n)');
axis([-1,N,1.1*min(xn),1.1*max(xn)]);
仿真结果:
图3-1 序列x(n)及其DFT变换
(3)MATLAB程序:
xn=[1,1,1,1];
N=length(xn);
n=0:N-1;
subplot(2,2,1);stem(n,xn);title('x(n)');
k=0:N-1;
Xk=fft(xn,N); %计算Xk
subplot(2,1,2);stem(k,abs(Xk));
title('Xk=DFT(xn)');
xn1=ifft(Xk,N); %计算xn
subplot(2,2,2);stem(n,xn1);
title('x(n)=IDFT(Xk)');
仿真结果:
图3-2 序列的正逆离散傅里叶变换
取一个周期的正弦信号,作8点采样,求它的连续频谱。然后对该信号进行N个周期延拓,再求它的连续频谱。把N无限增大,比较分析其结果。
(1)一个周期的MATLAB程序:
k=8;
n1=[0:1:7];
xn1=sin(2*pi*n1/k); %抽样信号
subplot(2,2,1);stem(n1,xn1,'.');
xlabel('t/T');ylabel('x(n)'); %坐标名
xk1=fft(xn1);xk1=abs(xk1);
subplot(2,2,2);stem(n1,xk1);
xlabel('k');ylabel('x(k)');
一个周期的频谱仿真:
matlab傅里叶变换的幅度谱和相位谱
图3-3 一个周期的频谱
(2)一个半个周期的MATLAB程序:
k=8;
n1=[0:1:11];
xn1=sin(2*pi*n1/k);
subplot(2,2,1);stem(n1,xn1,'.');
xlabel('t/T');ylabel('x(n)');
xk1=fft(xn1);xk1=abs(xk1);
subplot(2,2,2);
stem(n1,xk1);
xlabel('k');ylabel('x(k)');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论