《DSP using MATLAB》Problem 5.21

Posted ky027wh-sx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《DSP using MATLAB》Problem 5.21相关的知识,希望对你有一定的参考价值。

技术分享图片

        证明:

技术分享图片

       代码:

%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%%            Output Info about this m-file
fprintf(‘
***********************************************************
‘);
fprintf(‘        <DSP using MATLAB> Problem 5.21 

‘);

banner();
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

% ---------------------------------------------------------------------------------
%               
%         Parseval relation     
%           sum[abs(x(n))^2] = sum[abs(X(k))^2]/N 
%                                 
% ---------------------------------------------------------------------------------
 n = [0:10]; 
 x = [5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4];             % N=11 sequence
 N = length(x);

Exn = sum(abs(x).^2)

m1 = -5; N1 = 12;
n1 = [0:N1-1];

m2 = 8; N2 = 15;
n2 = [0:N2-1];

% -----------------------------------------------------
%     1st way to get circular shift---time domain
% -----------------------------------------------------
y1_1 = cirshftt(x, m1, N1);
y2_1 = cirshftt(x, m2, N2);


% --------------------------------------------------------
%     2rd way to get circular shift --- freq domain    
% --------------------------------------------------------
y1_2 = cirshftf(x, m1, N1);
y2_2 = cirshftf(x, m2, N2);


figure(‘NumberTitle‘, ‘off‘, ‘Name‘, ‘P5.21.a x(n) and its cir shift‘)
set(gcf,‘Color‘,‘white‘); 
subplot(3,1,1); stem(n, x); 
xlabel(‘n‘); ylabel(‘x(n)‘);
title(‘x(n), N=11‘);  grid on;
subplot(3,1,2); stem(n1, y1_1);  
xlabel(‘n‘); ylabel(‘y(n)‘);
title(‘TIME domain circular shift x(n), m=-5, N=12‘);  grid on;
subplot(3,1,3); stem(n1, y1_2); 
xlabel(‘n‘); ylabel(‘y(n)‘);
title(‘FREQ domain circular shift x(n), m=-5, N=12‘);  grid on;
axis([0, N1, 0, 6]);


figure(‘NumberTitle‘, ‘off‘, ‘Name‘, ‘P5.21.b x(n) and its cir shift‘)
set(gcf,‘Color‘,‘white‘); 
subplot(3,1,1); stem(n, x); 
xlabel(‘n‘); ylabel(‘x(n)‘);
title(‘x(n), N=11‘);  grid on;
subplot(3,1,2); stem(n2, y2_1);  
xlabel(‘n‘); ylabel(‘y(n)‘);
title(‘TIME domain circular shift x(n), m=8, N=15‘);  grid on;
subplot(3,1,3); stem(n2, y2_2); 
xlabel(‘n‘); ylabel(‘y(n)‘);
title(‘FREQ domain circular shift x(n), m=8, N=15‘);  grid on;
axis([0, N2-1, 0, 6]);


% ----------------------------------------------------
%        DFT of sequence
% ----------------------------------------------------

  Xk_DFT = dft(x, N);
  k = n;

    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);
    
   EXk = sum(magXk_DFT .^ 2)/N

 Y11k_DFT = dft(y1_1, N1);
 k1 = n1;

    magY11k_DFT = abs( [ Y11k_DFT ] );                                    % DFT magnitude
    angY11k_DFT = angle( [Y11k_DFT] )/pi;                                 % DFT angle
   realY11k_DFT = real(Y11k_DFT); 
   imagY11k_DFT = imag(Y11k_DFT);
    
   EY11k = sum(magY11k_DFT.^2)/N1

Y21k_DFT = dft(y2_1, N2);
 k2 = n2;

    magY21k_DFT = abs( [ Y21k_DFT ] );                                    % DFT magnitude
    angY21k_DFT = angle( [Y21k_DFT] )/pi;                                 % DFT angle
   realY21k_DFT = real(Y21k_DFT); 
   imagY21k_DFT = imag(Y21k_DFT);
    
   EY21k = sum(magY21k_DFT.^2)/N2

figure(‘NumberTitle‘, ‘off‘, ‘Name‘, ‘P5.21 X(k), DFT of x(n)‘)
set(gcf,‘Color‘,‘white‘); 
subplot(2,2,1); stem(k, magXk_DFT); 
xlabel(‘k‘); ylabel(‘magnitude(k)‘);
title(‘magnitude DFT of x(n), N=11‘);  grid on;
subplot(2,2,3); stem(k, angXk_DFT);  
%axis([-N/2, N/2, -0.5, 50.5]);
xlabel(‘k‘); ylabel(‘angle(k)‘);
title(‘angle DFT of x(n), N=11‘);  grid on;
subplot(2,2,2); stem(k, realXk_DFT); 
xlabel(‘k‘); ylabel(‘real (k)‘);
title(‘real DFT of x(n), N=11‘);  grid on;
subplot(2,2,4); stem(k, imagXk_DFT);  
%axis([-N/2, N/2, -0.5, 50.5]);
xlabel(‘k‘); ylabel(‘imag (k)‘);
title(‘imag DFT of x(n), N=11‘);  grid on;   

figure(‘NumberTitle‘, ‘off‘, ‘Name‘, ‘P5.21 Y11(k), DFT of x((n+5))12‘)
set(gcf,‘Color‘,‘white‘); 
subplot(2,2,1); stem(k1, magY11k_DFT); 
xlabel(‘k‘); ylabel(‘magnitude(k)‘);
title(‘magnitude DFT of y11(n), N=12‘);  grid on;
subplot(2,2,3); stem(k1, angY11k_DFT);  
%axis([-N/2, N/2, -0.5, 50.5]);
xlabel(‘k‘); ylabel(‘angle(k)‘);
title(‘angle DFT of y11(n), N=12‘);  grid on;
subplot(2,2,2); stem(k1, realY11k_DFT); 
xlabel(‘k‘); ylabel(‘real (k)‘);
title(‘real DFT of y11(n), N=12‘);  grid on;
subplot(2,2,4); stem(k1, imagY11k_DFT);  
%axis([-N/2, N/2, -0.5, 50.5]);
xlabel(‘k‘); ylabel(‘imag (k)‘);
title(‘imag DFT of y11(n), N=12‘);  grid on;   

figure(‘NumberTitle‘, ‘off‘, ‘Name‘, ‘P5.21 Y21(k), DFT of x((n-8))15‘)
set(gcf,‘Color‘,‘white‘); 
subplot(2,2,1); stem(k2, magY21k_DFT); 
xlabel(‘k‘); ylabel(‘magnitude(k)‘);
title(‘magnitude DFT of y21(n), N=15‘);  grid on;
subplot(2,2,3); stem(k2, angY21k_DFT);  
%axis([-N/2, N/2, -0.5, 50.5]);
xlabel(‘k‘); ylabel(‘angle(k)‘);
title(‘angle DFT of y21(n), N=15‘);  grid on;
subplot(2,2,2); stem(k2, realY21k_DFT); 
xlabel(‘k‘); ylabel(‘real (k)‘);
title(‘real DFT of y21(n), N=15‘);  grid on;
subplot(2,2,4); stem(k2, imagY21k_DFT);  
%axis([-N/2, N/2, -0.5, 50.5]);
xlabel(‘k‘); ylabel(‘imag (k)‘);
title(‘imag DFT of y21(n), N=15‘);  grid on;   

  运行结果:

        序列的圆周移位

技术分享图片

技术分享图片

        原始序列x(n)的DFT

技术分享图片

        圆周移位序列1的DFT

技术分享图片

        圆周移位序列2的DFT

技术分享图片

技术分享图片

        上图可知,时域的能量和频域的能量相等。

以上是关于《DSP using MATLAB》Problem 5.21的主要内容,如果未能解决你的问题,请参考以下文章

《DSP using MATLAB》Problem 5.7

《DSP using MATLAB》Problem 6.7

《DSP using MATLAB》Problem 6.8

《DSP using MATLAB》Problem 3.12

《DSP using MATLAB》Problem 4.17

《DSP using MATLAB》Problem 3.5