已知序列xn=[1,1,1,1],试用MATLAB编写程序,计算该序列的离散付里叶变换及逆离散付里叶变换
1MATLAB程序:
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:
                 
                           
2MATLAB程序:
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变换
3MATLAB程序:
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小时内删除。