《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有关。

原文地址:https://www.cnblogs.com/ky027wh-sx/p/8596414.html

时间: 2024-11-09 05:10:13

《DSP using MATLAB》Problem 4.21的相关文章

《DSP using MATLAB》Problem 5.21

证明: 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output Info about this m-file fprintf('\n***********************************************************\n'); fprintf(' <DSP using MATLAB> Problem 5.2

《DSP using MATLAB》Problem 6.21

代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output Info about this m-file fprintf('\n***********************************************************\n'); fprintf(' <DSP using MATLAB> Problem 6.21 \n\n'); ba

《DSP using MATLAB》Problem 3.21

模拟信号经过不同的采样率进行采样后,得到不同的数字角频率,如下: 三种Fs,采样后的信号的谱 重建模拟信号,这里只显示由第1种Fs=0.01采样后序列进行重建,采用zoh.foh和spline三种方法: 原文地址:https://www.cnblogs.com/ky027wh-sx/p/8271297.html

《DSP using MATLAB》 Problem 2.3

本题主要是显示周期序列的. 1.代码: %% ------------------------------------------------------------------------ %% Output Info about this m-file fprintf('\n***********************************************************\n'); fprintf(' <DSP using MATLAB> Problem 2.3.1 \

《DSP using MATLAB》Problem 2.14

代码: %% ------------------------------------------------------------------------ %% Output Info about this m-file fprintf('\n***********************************************************\n'); fprintf(' <DSP using MATLAB> Problem 2.14 \n\n'); banner();

《DSP using MATLAB》Problem 3.1

先写DTFT子函数: function [X] = dtft(x, n, w) %% ------------------------------------------------------------------------ %% Computes DTFT (Discrete-Time Fourier Transform) %% of Finite-Duration Sequence %% Note: NOT the most elegant way % [X] = dtft(x, n,

《DSP using MATLAB》Problem 7.15

用Kaiser窗方法设计一个台阶状滤波器. 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output Info about this m-file fprintf('\n***********************************************************\n'); fprintf(' <DSP using MATLAB> P

《DSP using MATLAB》Problem 7.28

又是一年五一节,朋友圈都是晒名山大川的,晒脑袋的,我这没钱的待在家里上网转转吧 频率采样法设计带通滤波器,过渡带中有一个样点 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output Info about this m-file fprintf('\n*******************************************************

《DSP using MATLAB》Problem 7.36

代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output Info about this m-file fprintf('\n***********************************************************\n'); fprintf(' <DSP using MATLAB> Problem 7.36 \n\n'); ba