zoukankan      html  css  js  c++  java
  • 《DSP using MATLAB》示例Example5.7

    代码:

    x = [1, 1, 1, 1, zeros(1,4)]; 
    N = 8;                                                 % zero-padding operation 
    X_DFT = dft(x,N);                                      % DFT of x(n)
    
    magX_DFT = abs(X_DFT)
    phaX_DFT = angle(X_DFT)*180/pi                         % degrees
    realX_DFT = real(X_DFT); imagX_DFT = imag(X_DFT);
    angX_DFT = angle(X_DFT);                               % radias
    
    n = 0:(N - 1);
    k = 0:1000; w = (pi/500)*k;                            % [0,2pi] axis divided into 501 points.
    %k = 0:500; w = (pi/500)*k;                            % [0,pi] axis divided into 501 points.
    X_DTFT = x * (exp(-j*pi/500)) .^ (n'*k);               % DTFT of x(n)
    
    magX_DTFT = abs(X_DTFT); angX_DTFT = angle(X_DTFT); realX_DTFT = real(X_DTFT); imagX_DTFT = imag(X_DTFT);
    
    figure('NumberTitle', 'off', 'Name', 'Exameple5.7 x sequence')
    set(gcf,'Color','white'); 
    stem(n,x); title('x sequence'); axis([0,N,-0.5,1.5]);
    xlabel('n'); ylabel('x(n)'); grid on;
    
    
    %% --------------------------------------------------------------
    %%        START X_DTFT's  mag ang real imag
    %% --------------------------------------------------------------
    figure('NumberTitle', 'off', 'Name', 'X_DTFT its Magnitude and Angle, Real and Imaginary Part');
    set(gcf,'Color','white'); 
    subplot(2,2,1); plot(w/pi,magX_DTFT); grid on;  % axis([-2,2,0,15]); 
    title('Magnitude Part');
    xlabel('frequency in pi units'); ylabel('Magnitude  |X\_DTFT|'); 
    subplot(2,2,3); plot(w/pi, angX_DTFT*180/pi); grid on;  % axis([-2,2,-1,1]);
    title('Angle Part');
    xlabel('frequency in pi units'); ylabel('Degrees'); %axis([-200,200,0,2]);
    
    subplot('2,2,2'); plot(w/pi, realX_DTFT); grid on;
    title('Real Part');
    xlabel('frequency in pi units'); ylabel('Real');
    subplot('2,2,4'); plot(w/pi, imagX_DTFT); grid on;
    title('Imaginary Part');
    xlabel('frequency in pi units'); ylabel('Imaginary');
    %% --------------------------------------------------------------
    %%        END X_DTFT's  mag ang real imag
    %% --------------------------------------------------------------
    
    
    %% --------------------------------------------------------------
    %%        START X_DFT's  mag ang real imag
    %% --------------------------------------------------------------
    figure('NumberTitle', 'off', 'Name', 'Example5.7 X_DFT its Magnitude and Angle');
    set(gcf,'Color','white'); 
    subplot(2,1,1); stem(n,magX_DFT); hold on; plot(4*w/pi,magX_DTFT,'--'); hold off;
    grid on;   axis([-0.5,8.2,-1,5]); 
    title('Magnitude Part of the DFT: N = 8');
    xlabel('k'); ylabel('Magnitude  |X\_DFT|'); 
    subplot(2,1,2); stem(n, phaX_DFT); hold on; plot(4*w/pi,angX_DTFT*180/pi,'--'); hold off;
    grid on;   axis([-0.5,8.2,-200,200]);
    title('Angle Part of the DFT: N = 8');
    xlabel('k'); ylabel('Degrees'); %axis([-200,200,0,2]);
    
    %subplot('2,2,2'); stem(n, realX_DFT); grid on;
    %title('Real Part');
    %xlabel('frequency in pi units'); ylabel('Real');
    %subplot('2,2,4'); stem(n, imagX_DFT); grid on;
    %title('Imaginary Part');
    %xlabel('frequency in pi units'); ylabel('Imaginary');
    %% --------------------------------------------------------------
    %%        END X_DFT's  mag ang real imag
    %% --------------------------------------------------------------
    

      结果:

    将序列末尾补12个零,长度达到16位

    代码:

    x = [1, 1, 1, 1, zeros(1,12)];                         % append 12 zeros to the end of x(n)
    N = 16;                                                % zero-padding operation 
    X_DFT = dft(x,N);                                      % DFT of x(n)
    
    magX_DFT = abs(X_DFT)
    phaX_DFT = angle(X_DFT)*180/pi                         % degrees
    realX_DFT = real(X_DFT); imagX_DFT = imag(X_DFT);
    angX_DFT = angle(X_DFT);                               % radias
    
    n = 0:(N - 1);
    k = 0:1000; w = (pi/500)*k;                            % [0,2pi] axis divided into 501 points.
    %k = 0:500; w = (pi/500)*k;                            % [0,pi] axis divided into 501 points.
    X_DTFT = x * (exp(-j*pi/500)) .^ (n'*k);               % DTFT of x(n)
    
    magX_DTFT = abs(X_DTFT); angX_DTFT = angle(X_DTFT); realX_DTFT = real(X_DTFT); imagX_DTFT = imag(X_DTFT);
    
    figure('NumberTitle', 'off', 'Name', 'Exameple5.7 x sequence')
    set(gcf,'Color','white'); 
    stem(n,x); title('x sequence, N = 16'); axis([0,N,-0.5,1.5]);
    xlabel('n'); ylabel('x(n)'); grid on;
    
    
    %% --------------------------------------------------------------
    %%        START X_DTFT's  mag ang real imag
    %% --------------------------------------------------------------
    figure('NumberTitle', 'off', 'Name', 'X_DTFT its Magnitude and Angle, Real and Imaginary Part');
    set(gcf,'Color','white'); 
    subplot(2,2,1); plot(w/pi,magX_DTFT); grid on;  % axis([-2,2,0,15]); 
    title('Magnitude Part');
    xlabel('frequency in pi units'); ylabel('Magnitude  |X\_DTFT|'); 
    subplot(2,2,3); plot(w/pi, angX_DTFT*180/pi); grid on;  % axis([-2,2,-1,1]);
    title('Angle Part');
    xlabel('frequency in pi units'); ylabel('Degrees'); %axis([-200,200,0,2]);
    
    subplot('2,2,2'); plot(w/pi, realX_DTFT); grid on;
    title('Real Part');
    xlabel('frequency in pi units'); ylabel('Real');
    subplot('2,2,4'); plot(w/pi, imagX_DTFT); grid on;
    title('Imaginary Part');
    xlabel('frequency in pi units'); ylabel('Imaginary');
    %% --------------------------------------------------------------
    %%        END X_DTFT's  mag ang real imag
    %% --------------------------------------------------------------
    
    
    %% --------------------------------------------------------------
    %%        START X_DFT's  mag ang real imag
    %% --------------------------------------------------------------
    figure('NumberTitle', 'off', 'Name', 'Example5.7 X_DFT its Magnitude and Angle');
    set(gcf,'Color','white'); 
    subplot(2,1,1); stem(n,magX_DFT); hold on; plot(8*w/pi,magX_DTFT,'--'); hold off;
    grid on;   axis([-0.5,16.2,-1,5]); 
    title('Magnitude Part of the DFT: N = 16');
    xlabel('k'); ylabel('Magnitude  |X\_DFT|'); 
    subplot(2,1,2); stem(n, phaX_DFT); hold on; plot(8*w/pi,angX_DTFT*180/pi,'--'); hold off;
    grid on;   axis([-0.5,16.2,-200,200]);
    title('Angle Part of the DFT: N = 16');
    xlabel('k'); ylabel('Degrees'); %axis([-200,200,0,2]);
    
    %subplot('2,2,2'); stem(n, realX_DFT); grid on;
    %title('Real Part');
    %xlabel('frequency in pi units'); ylabel('Real');
    %subplot('2,2,4'); stem(n, imagX_DFT); grid on;
    %title('Imaginary Part');
    %xlabel('frequency in pi units'); ylabel('Imaginary');
    %% --------------------------------------------------------------
    %%        END X_DFT's  mag ang real imag
    %% --------------------------------------------------------------
    

      结果:

    继续补零,长度N=128,

    代码:

    x = [1, 1, 1, 1, zeros(1,124)];                        % append 124 zeros to the end of x(n)
    N = 128;                                               % zero-padding operation 
    X_DFT = dft(x,N);                                      % DFT of x(n)
    
    magX_DFT = abs(X_DFT)
    phaX_DFT = angle(X_DFT)*180/pi                         % degrees
    realX_DFT = real(X_DFT); imagX_DFT = imag(X_DFT);
    angX_DFT = angle(X_DFT);                               % radias
    
    n = 0:(N - 1);
    k = 0:1000; w = (pi/500)*k;                            % [0,2pi] axis divided into 501 points.
    %k = 0:500; w = (pi/500)*k;                            % [0,pi] axis divided into 501 points.
    X_DTFT = x * (exp(-j*pi/500)) .^ (n'*k);               % DTFT of x(n)
    
    magX_DTFT = abs(X_DTFT); angX_DTFT = angle(X_DTFT); realX_DTFT = real(X_DTFT); imagX_DTFT = imag(X_DTFT);
    
    figure('NumberTitle', 'off', 'Name', 'Exameple5.7 x sequence')
    set(gcf,'Color','white'); 
    stem(n,x); title('x sequence, N = 128'); axis([0,N,-0.5,1.5]);
    xlabel('n'); ylabel('x(n)'); grid on;
    
    
    %% --------------------------------------------------------------
    %%        START X_DTFT's  mag ang real imag
    %% --------------------------------------------------------------
    figure('NumberTitle', 'off', 'Name', 'X_DTFT its Magnitude and Angle, Real and Imaginary Part');
    set(gcf,'Color','white'); 
    subplot(2,2,1); plot(w/pi,magX_DTFT); grid on;  % axis([-2,2,0,15]); 
    title('Magnitude Part');
    xlabel('frequency in pi units'); ylabel('Magnitude  |X\_DTFT|'); 
    subplot(2,2,3); plot(w/pi, angX_DTFT*180/pi); grid on;  % axis([-2,2,-1,1]);
    title('Angle Part');
    xlabel('frequency in pi units'); ylabel('Degrees'); %axis([-200,200,0,2]);
    
    subplot('2,2,2'); plot(w/pi, realX_DTFT); grid on;
    title('Real Part');
    xlabel('frequency in pi units'); ylabel('Real');
    subplot('2,2,4'); plot(w/pi, imagX_DTFT); grid on;
    title('Imaginary Part');
    xlabel('frequency in pi units'); ylabel('Imaginary');
    %% --------------------------------------------------------------
    %%        END X_DTFT's  mag ang real imag
    %% --------------------------------------------------------------
    
    
    %% --------------------------------------------------------------
    %%        START X_DFT's  mag ang real imag
    %% --------------------------------------------------------------
    figure('NumberTitle', 'off', 'Name', 'Example5.7 X_DFT its Magnitude and Angle');
    set(gcf,'Color','white'); 
    subplot(2,1,1); stem(n,magX_DFT); hold on; plot(64*w/pi,magX_DTFT,'--'); hold off;
    grid on;   axis([-0.5,128.2,-1,5]); 
    title('Magnitude Part of the DFT: N = 128');
    xlabel('k'); ylabel('Magnitude  |X\_DFT|'); 
    subplot(2,1,2); stem(n, phaX_DFT); hold on; plot(64*w/pi,angX_DTFT*180/pi,'--'); hold off;
    grid on;   axis([-0.5,128.2,-200,200]);
    title('Angle Part of the DFT: N = 128');
    xlabel('k'); ylabel('Degrees'); %axis([-200,200,0,2]);
    
    %subplot('2,2,2'); stem(n, realX_DFT); grid on;
    %title('Real Part');
    %xlabel('frequency in pi units'); ylabel('Real');
    %subplot('2,2,4'); stem(n, imagX_DFT); grid on;
    %title('Imaginary Part');
    %xlabel('frequency in pi units'); ylabel('Imaginary');
    %% --------------------------------------------------------------
    %%        END X_DFT's  mag ang real imag
    %% --------------------------------------------------------------
    

      运行结果:

    牢记: 1、如果你决定做某事,那就动手去做;不要受任何人、任何事的干扰。2、这个世界并不完美,但依然值得我们去为之奋斗。
  • 相关阅读:
    Codechef Observing the Tree
    bzoj 1367: [Baltic2004]sequence
    bzoj 2375: 疯狂的涂色
    bzoj 1455: 罗马游戏
    codevs 1029 遍历问题
    HNOI2004 宠物收养所 (Treap)
    [ZJOI2007] 报表统计
    bzoj 3261: 最大异或和 (可持久化trie树)
    codevs 1001 舒适的路线
    Codechef Dynamic Trees and Queries
  • 原文地址:https://www.cnblogs.com/ky027wh-sx/p/6136145.html
Copyright © 2011-2022 走看看