《DSP using MATLAB》Problem 4.21

        快到龙抬头,居然下雪了,天空飘起了雪花,温度下降了近20°。

代码:

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

banner();
%% ------------------------------------------------------------------------


% ----------------------------------------------------
%               1        H1(z)
% ----------------------------------------------------

b = [3/4, 5/4, 1, 1, 5/4, 3/4]; a = [1];                             %  

[R, p, C] = residuez(b,a)

Mp = (abs(p))'
Ap = (angle(p))'/pi

%% ------------------------------------------------------
%%   START a    determine H(z) and sketch    
%% ------------------------------------------------------
figure('NumberTitle', 'off', 'Name', 'P4.21 H(z) its pole-zero plot')
set(gcf,'Color','white'); 
zplane(b,a);
title('pole-zero plot'); grid on;

%% ----------------------------------------------
%%    END
%% ----------------------------------------------

% ------------------------------------
%                  h(n)  
% ------------------------------------

[delta, n] = impseq(0, 0, 19); 
h_check = filter(b, a, delta);                                             % check sequence


%% --------------------------------------------------------------
%%    START    b   |H|   <H
%%    3rd form of freqz
%% --------------------------------------------------------------
w = [-500:1:500]*2*pi/500;     H = freqz(b,a,w); 
%[H,w] = freqz(b,a,200,'whole');                 % 3rd form of freqz

magH  = abs(H);  angH  = angle(H);  realH  = real(H);  imagH  = imag(H);

%% ================================================
%%              START H's  mag ang real imag
%% ================================================
figure('NumberTitle', 'off', 'Name', 'P4.21  DTFT and Real Imaginary Part ');
set(gcf,'Color','white'); 
subplot(2,2,1); plot(w/pi,magH); grid on;  %axis([0,1,0,1.5]); 
title('Magnitude Response');
xlabel('frequency in \pi units'); ylabel('Magnitude  |H|'); 
subplot(2,2,3); plot(w/pi, angH/pi); grid on; % axis([-1,1,-1,1]);
title('Phase Response');
xlabel('frequency in \pi units'); ylabel('Radians/\pi');

subplot('2,2,2'); plot(w/pi, realH); grid on;
title('Real Part');
xlabel('frequency in \pi units'); ylabel('Real');
subplot('2,2,4'); plot(w/pi, imagH); grid on;
title('Imaginary Part');
xlabel('frequency in \pi units'); ylabel('Imaginary');
%% ==================================================
%%             END H's  mag ang real imag
%% ==================================================



% --------------------------------------------------------------
%        x(n) through the filter, we get output y(n)
% --------------------------------------------------------------
N = 200;
nx = [0:1:N-1];
 x = sin(pi*nx/2) + 5 * cos(pi*nx);

[y, ny] = conv_m(h_check, n, x, nx);

figure('NumberTitle', 'off', 'Name', 'P4.21  Input & h(n) Sequence');
set(gcf,'Color','white'); 
subplot(3,1,1); stem(nx, x); grid on;  %axis([0,1,0,1.5]); 
title('x(n)');
xlabel('n'); ylabel('x'); 
subplot(3,1,2); stem(n, h_check); grid on;  %axis([0,1,0,1.5]); 
title('h(n)');
xlabel('n'); ylabel('h'); 
subplot(3,1,3); stem(ny, y); grid on;  %axis([0,1,0,1.5]); 
title('y(n)');
xlabel('n'); ylabel('y');

figure('NumberTitle', 'off', 'Name', 'P4.21  Output Sequence');
set(gcf,'Color','white'); 
subplot(1,1,1); stem(ny, y); grid on;  %axis([0,1,0,1.5]); 
title('y(n)');
xlabel('n'); ylabel('y'); 


% ----------------------------------------
%                yss Response
% ----------------------------------------
ax = conv([1,0,1], [1,2,1])
bx = conv([0,1], [1,2,1]) + conv([5,5], [1,0,1])

by = conv(bx, b) 
ay = ax

zeros = roots(by)

[R, p, C] = residuez(by, ay)

Mp_Y = (abs(p))'
Ap_Y = (angle(p))'/pi

%% ------------------------------------------------------
%%   START a    determine Y(z) and sketch    
%% ------------------------------------------------------
figure('NumberTitle', 'off', 'Name', 'P4.21 Y(z) its pole-zero plot')
set(gcf,'Color','white'); 
zplane(by, ay);
title('pole-zero plot'); grid on;


% ------------------------------------
%                  y(n)  
% ------------------------------------
LENGH = 100;
[delta, n] = impseq(0, 0, LENGH-1); 
y_check = filter(by, ay, delta);                                             % check sequence

y_answer0 = 4.75*delta;

[delta_1, n1] = sigshift(delta, n, 1);
y_answer1 = 2.25*delta_1;

[delta_2, n2] = sigshift(delta, n, 2);
y_answer2 = 2.75*delta_2;

[delta_3, n3] = sigshift(delta, n, 3);
y_answer3 = 3.75*delta_3; 

[delta_4, n4] = sigshift(delta, n, 4);
y_answer4 = 4.50*delta_4;

y_answer5 = (2*(-0.5)*cos(pi*n/2) + 2*0.5*sin(pi*n/2) ).*stepseq(0,0,LENGH-1);


[y01, n01] = sigadd(y_answer0, n,  y_answer1, n1);
[y02, n02] = sigadd(y_answer2, n2, y_answer3, n3);

[y03, n03] = sigadd(y01, n01, y02, n02);
[y04, n04] = sigadd(y03, n03, y_answer4, n4);

[y_answer, n_answer] = sigadd(y04, n04, y_answer5, n);


figure('NumberTitle', 'off', 'Name', 'P4.21  Yss and Y ');
set(gcf,'Color','white'); 
subplot(2,1,1); stem(n, y_answer5); grid on;  %axis([0,1,0,1.5]); 
title('Steady-State Response');
xlabel('n'); ylabel('Yss'); 
subplot(2,1,2); stem(n, y_check); grid on; % axis([-1,1,-1,1]);
title('Total Response');
xlabel('n'); ylabel('Y');

  运行结果:

        系统函数H(z)的系数:

        系统的DTFT,注意当ω=π/2和π时的振幅谱、相位谱的值。

        当有输入时,输出的Y(z)进行部分分式展开,留数及对应的极点如下:

        单位圆上z=-1处,极点和零点相互抵消,稳态响应只和正负j有关。

 

posted @ 2018-03-18 17:36  跑啊跑  阅读(378)  评论(0编辑  收藏  举报