zoukankan      html  css  js  c++  java
  • 《DSP using MATLAB》Problem5.16

            代码:

    %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    %%            Output Info about this m-file
    fprintf('
    ***********************************************************
    ');
    fprintf('        <DSP using MATLAB> Problem 5.16 
    
    ');
    
    banner();
    %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    % -------------------------------------------------------------------------------
    %          X(k) and Y(k) both 10-point DFTs of x(n) and y(n) respectively            
    %          X(k) = exp(j0.2pi*k)   k=[0:9]
    %             1   y(n) = x((n-5))10                                     
    % -------------------------------------------------------------------------------
     
        k1 = [0:9];
    Xk_DFT = exp(j*0.2*pi*k1);
        N1 = length(Xk_DFT);                                    % length is 10
    
        magXk_DFT = abs( [ Xk_DFT ] );                          % DFT magnitude
        angXk_DFT = angle( [Xk_DFT] )/pi;                       % DFT angle
       realXk_DFT = real(Xk_DFT); imagXk_DFT = imag(Xk_DFT);
    
    figure('NumberTitle', 'off', 'Name', 'P5.16.1 DFT(k) of x(n)')
    set(gcf,'Color','white'); 
    subplot(2,1,1); stem(k1, magXk_DFT); 
    %axis([-N/2, N/2, -0.5, 50.5]);
    xlabel('k'); ylabel('magnitude(k)');
    title('DFT magnitude of x(n), N=10');  grid on;
    subplot(2,1,2); stem(k1, angXk_DFT);  
    %axis([-N/2, N/2, -0.5, 50.5]);
    xlabel('k'); ylabel('angle(k)');
    title('DFT angle of x(n), N=10');  grid on;
    
    
    
    [xn] = idft(Xk_DFT, N1);
    n = [0 : N1-1];
    
    
    % +++++++++++++++++++++++++++++++++++++++++++++++++++++++
    %         1st way to get y(n)-----circular shifft
    % +++++++++++++++++++++++++++++++++++++++++++++++++++++++
    m = 5;                    % shift
    yn1 = cirshftt(xn, m, length(xn));
    
    
    % +++++++++++++++++++++++++++++++++++++++++++++++++++++++
    %       2ed way to get y(n)-----IDFT of Y(k)
    % +++++++++++++++++++++++++++++++++++++++++++++++++++++++
    k1 = [0:9];
    Yk_DFT = exp(-j*0.8*pi*k1);
        N1 = length(Yk_DFT);                                    % length is 10
    
        magYk_DFT = abs( [ Yk_DFT ] );                          % DFT magnitude
        angYk_DFT = angle( [Yk_DFT] )/pi;                       % DFT angle
       realYk_DFT = real(Yk_DFT); imagYk_DFT = imag(Yk_DFT);
    
    figure('NumberTitle', 'off', 'Name', 'P5.16.1 DFT(k) of y(n)')
    set(gcf,'Color','white'); 
    subplot(2,1,1); stem(k1, magYk_DFT); 
    %axis([-N/2, N/2, -0.5, 50.5]);
    xlabel('k'); ylabel('magnitude(k)');
    title('DFT magnitude of y(n), N=10');  grid on;
    subplot(2,1,2); stem(k1, angYk_DFT);  
    %axis([-N/2, N/2, -0.5, 50.5]);
    xlabel('k'); ylabel('angle(k)');
    title('DFT angle of y(n), N=10');  grid on;
    
    [yn2] = idft(Yk_DFT, N1);
    n = [0 : N1-1];
    
    
    figure('NumberTitle', 'off', 'Name', 'P5.16.1 x(n) & y(n)')
    set(gcf,'Color','white'); 
    subplot(3,1,1); stem(n, xn);
    xlabel('n'); ylabel('x(n)');
    title('x(n), IDFT of X(k)');  grid on;
    subplot(3,1,2); stem(n, yn1);
    xlabel('n'); ylabel('y(n)');
    title('y(n) by circular shift x((n-5))_N N=10');  grid on;
    subplot(3,1,3); stem(n, yn2);
    xlabel('n'); ylabel('y(n)');
    title('y(n) by IDFT of Y(k)');  grid on;
    

      运行结果:

            代码:

    %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    %%            Output Info about this m-file
    fprintf('
    ***********************************************************
    ');
    fprintf('        <DSP using MATLAB> Problem 5.16 
    
    ');
    
    banner();
    %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    % -------------------------------------------------------------------------------
    %          X(k) and Y(k) both 10-point DFTs of x(n) and y(n) respectively            
    %          X(k) = exp(j0.2pi*k)   k=[0:9]
    %             3   y(n) = x((3-n))10                                     
    % -------------------------------------------------------------------------------
     
        k1 = [0:9];
    Xk_DFT = exp(j*0.2*pi*k1);
        N1 = length(Xk_DFT);                                    % length is 10
    
        magXk_DFT = abs( [ Xk_DFT ] );                          % DFT magnitude
        angXk_DFT = angle( [Xk_DFT] )/pi;                       % DFT angle
       realXk_DFT = real(Xk_DFT); imagXk_DFT = imag(Xk_DFT);
    
    figure('NumberTitle', 'off', 'Name', 'P5.16.3 DFT(k) of x(n)')
    set(gcf,'Color','white'); 
    subplot(2,1,1); stem(k1, magXk_DFT); 
    %axis([-N/2, N/2, -0.5, 50.5]);
    xlabel('k'); ylabel('magnitude(k)');
    title('DFT magnitude of x(n), N=10');  grid on;
    subplot(2,1,2); stem(k1, angXk_DFT);  
    %axis([-N/2, N/2, -0.5, 50.5]);
    xlabel('k'); ylabel('angle(k)');
    title('DFT angle of x(n), N=10');  grid on;
    
    
    [xn] = real(idft(Xk_DFT, N1));
    n = [0 : N1-1];
    
    
    % +++++++++++++++++++++++++++++++++++++++++++++++++++++++
    %         1st way to get y(n)-----circular shifft
    % +++++++++++++++++++++++++++++++++++++++++++++++++++++++
    xn_cirfold = xn(mod(-n,N1)+1);
    m = 3;                                % shift
    yn1 = cirshftt(xn_cirfold, m, length(xn));
    
    
    % +++++++++++++++++++++++++++++++++++++++++++++++++++++++
    %       2ed way to get y(n)-----IDFT of Y(k)
    % +++++++++++++++++++++++++++++++++++++++++++++++++++++++
    k1 = [0:9];
    Yk_DFT = exp(j*2*pi*(10-4*k1)/10);
        N1 = length(Yk_DFT);                                    % length is 10
    
        magYk_DFT = abs( [ Yk_DFT ] );                          % DFT magnitude
        angYk_DFT = angle( [Yk_DFT] )/pi;                       % DFT angle
       realYk_DFT = real(Yk_DFT); imagYk_DFT = imag(Yk_DFT);
    
    figure('NumberTitle', 'off', 'Name', 'P5.16.3 DFT(k) of y(n)')
    set(gcf,'Color','white'); 
    subplot(2,1,1); stem(k1, magYk_DFT); 
    xlabel('k'); ylabel('magnitude(k)');
    title('DFT magnitude of y(n), N=10');  grid on;
    subplot(2,1,2); stem(k1, angYk_DFT);  
    xlabel('k'); ylabel('angle(k)');
    title('DFT angle of y(n), N=10');  grid on;
    
    [yn2] = real(idft(Yk_DFT, N1));
    n = [0 : N1-1];
    
    
    figure('NumberTitle', 'off', 'Name', 'P5.16.3 x(n) & y(n)')
    set(gcf,'Color','white'); 
    subplot(3,1,1); stem(n, xn);
    xlabel('n'); ylabel('x(n)');
    title('x(n), IDFT of X(k)');  grid on;
    subplot(3,1,2); stem(n, yn1);
    xlabel('n'); ylabel('y(n)');
    title('y(n) by circular shift x((3-n))_N N=10');  grid on;
    subplot(3,1,3); stem(n, yn2);
    xlabel('n'); ylabel('y(n)');
    title('y(n) by IDFT of Y(k)');  grid on;
    

      运行结果:

           X(k)的图见第1小题,这里不附了。

    牢记: 1、如果你决定做某事,那就动手去做;不要受任何人、任何事的干扰。2、这个世界并不完美,但依然值得我们去为之奋斗。
  • 相关阅读:
    Intelij根据数据库表生成实体类
    RabbitMQ(二):入门案例
    RabbitMQ(一):简介和基本概念
    Python 第十课,面向对象补足,异常处理
    Python 第九课,面向对象进阶
    Python 第七课,模块
    Python 第六课,装饰器,生成器,迭代器,其他
    Python 第五课,正则表达式
    Python 第四课,内置函数,I/O操作。
    Python 第三课,函数。
  • 原文地址:https://www.cnblogs.com/ky027wh-sx/p/9384184.html
Copyright © 2011-2022 走看看