代码:
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% 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小题,这里不附了。