《DSP using MATLAB》Problem5.16

        代码:

%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%%            Output Info about this m-file
fprintf('\n***********************************************************\n');
fprintf('        <DSP using MATLAB> Problem 5.16 \n\n');

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('\n***********************************************************\n');
fprintf('        <DSP using MATLAB> Problem 5.16 \n\n');

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小题,这里不附了。

猜你喜欢

转载自www.cnblogs.com/ky027wh-sx/p/9384184.html
今日推荐