1. 程式人生 > >《DSP using MATLAB》Problem 5.14

《DSP using MATLAB》Problem 5.14

序列 tlab mod 數學 dsp itl end using 分享

技術分享圖片

說明:這兩個小題的數學證明過程都不會,歡迎博友賜教。

直接上代碼:

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

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

% ------------------------------------------------------------------------
%              1  x(n) = [1, 2, 3, 1,2,3, 1, 2, 3, 1, 2, 3]   N=12  v=3
%                   x(n) = x(n+v)  N=4v                                  
% ------------------------------------------------------------------------
 
nn1 = [0:11];
xx1 = [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3];
NN1 = length(xx1);                                % length is 12


%m = mod_1(nn1, NN1);
%x = [xx1 zeros(1, 0)];                        % padding zeros
%n = [nn1 max(nn1)+1:max(nn1)+6];
x = xx1;
n = nn1;

figure(‘NumberTitle‘, ‘off‘, ‘Name‘, ‘P5.14.1 x(n)‘)
set(gcf,‘Color‘,‘white‘); 
subplot(2,1,1); stem(nn1, xx1);
xlabel(‘n‘); ylabel(‘x(n)‘);
title(‘x(n) ori sequence‘);  grid on;
subplot(2,1,2); stem(n, x);
xlabel(‘n‘); ylabel(‘x(n)‘);
title(‘x(n) padding 0 zeros‘);  grid on;


%% =============================================================================
%%                 DTFT X(w) of xn sequence, w=[0:2pi], 
%% =============================================================================
MM = 500;
[Xw_DTFT, w] = dtft1(x, n, MM);

 magXw_DTFT = abs(Xw_DTFT);   angXw_DTFT = angle(Xw_DTFT)/pi; 
realXw_DTFT = real(Xw_DTFT); imagXw_DTFT = imag(Xw_DTFT);


%% --------------------------------------------------------------
%%        START X_DTFT‘s  mag ang real imag
%% --------------------------------------------------------------
figure(‘NumberTitle‘, ‘off‘, ‘Name‘, ‘P5.14.1 X(w) DTFT of x(n)‘);
set(gcf,‘Color‘,‘white‘); 
subplot(2,2,1); plot(w/pi,magXw_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, angXw_DTFT); grid on;  % axis([-2,2,-1,1]);
title(‘Angle Part‘);
xlabel(‘frequency in \pi units‘); ylabel(‘Rad \pi‘); %axis([-200,200,0,2]);

subplot(‘2,2,2‘); plot(w/pi, realXw_DTFT); grid on;
title(‘Real Part‘);
xlabel(‘frequency in \pi units‘); ylabel(‘Real‘);
subplot(‘2,2,4‘); plot(w/pi, imagXw_DTFT); grid on;
title(‘Imaginary Part‘);
xlabel(‘frequency in \pi units‘); ylabel(‘Imaginary‘);
%% --------------------------------------------------------------
%%        END X_DTFT‘s  mag ang real imag
%% --------------------------------------------------------------


%% ------------------------------------------------------------------
%%                 DFT(k) of xn sequence, k=[0:N-1]
%%                      w=2pi*k/N       k=Nw/(2pi)
%% ------------------------------------------------------------------
N1 = length(x);
k1 = [0 : N1-1];
%k2 = [-N : N-1];
%k3 = [-N/2 : N/2];
Xk_DFT = dft(x, N1);                                         % DFT
    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.14.1 DFT(k) of x(n)‘)
set(gcf,‘Color‘,‘white‘); 
subplot(2,1,1); stem(k1, magXk_DFT); hold on; plot(N1*w/(2*pi), magXw_DTFT,‘r--‘); hold off;
%axis([-N/2, N/2, -0.5, 50.5]);
xlabel(‘k‘); ylabel(‘magnitude(k)‘);
title(‘DFT magnitude of x(n), N=12‘);  grid on;
subplot(2,1,2); stem(k1, angXk_DFT);  hold on; plot(N1*w/(2*pi), angXw_DTFT,‘r--‘); hold off;
%axis([-N/2, N/2, -0.5, 50.5]);
xlabel(‘k‘); ylabel(‘angle(k)‘);
title(‘DFT angle of x(n), N=12‘);  grid on;

  運行結果:

原始序列長度為N=12,是4的倍數,這裏v=3。

技術分享圖片

技術分享圖片

技術分享圖片

從圖看出,k為4的倍數時,X(k)為非零值。

第2小題類似,這裏直接上圖:

技術分享圖片

技術分享圖片

技術分享圖片

《DSP using MATLAB》Problem 5.14