《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、这个世界并不完美,但依然值得我们去为之奋斗。