《DSP using MATLAB》Problem 4.21
Posted 沧海一粟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《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有关。
以上是关于《DSP using MATLAB》Problem 4.21的主要内容,如果未能解决你的问题,请参考以下文章
《DSP using MATLAB》Problem 3.12