• 《DSP using MATLAB》Problem 8.8


    代码:

    %% ------------------------------------------------------------------------
    %%            Output Info about this m-file
    fprintf('
    ***********************************************************
    ');
    fprintf('        <DSP using MATLAB> Problem 8.8 
    
    ');
    banner();
    %% ------------------------------------------------------------------------
    
    % digital iir highpass filter
    b = [1 -1];
    a = [1 -0.9];
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.8 Pole-Zero Plot')
    set(gcf,'Color','white'); 
    zplane(b,a); 
    title(sprintf('Pole-Zero Plot'));
    %pzplotz(b,a);
    
    % corresponding system function  Direct form
    K = 1;                                                                     % gain parameter
    b = K*b;                                                                    % denominator                      
    a = a;                                                                      % numerator
    
    [db, mag, pha, grd, w] = freqz_m(b, a);
    
    % ---------------------------------------------------------------------
    %  Choose the gain parameter of the filter, maximum gain is equal to 1 
    % ---------------------------------------------------------------------
    gain1=max(mag)                    % with poles
    K = 1/gain1
    [db, mag, pha, grd, w] = freqz_m(K*b, a);
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.8 IIR highpass filter')
    set(gcf,'Color','white'); 
    
    subplot(2,2,1); plot(w/pi, db); grid on; axis([0 2 -60 10]); 
    set(gca,'YTickMode','manual','YTick',[-60,-30,0])
    set(gca,'YTickLabelMode','manual','YTickLabel',['60';'30';' 0']);
    set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
    xlabel('frequency in pi units'); ylabel('Decibels'); title('Magnitude Response in dB');
    
    subplot(2,2,3); plot(w/pi, mag); grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Absolute'); title('Magnitude Response in absolute');
    set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
    set(gca,'YTickMode','manual','YTick',[0,1.0]);
    
    subplot(2,2,2); plot(w/pi, pha); grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Rad'); title('Phase Response in Radians');
    
    subplot(2,2,4); plot(w/pi, grd*pi/180);  grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Rad'); title('Group Delay');
    set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
    %set(gca,'YTickMode','manual','YTick',[0,1.0]);
    
    
    % Impulse Response
    fprintf('
    ----------------------------------');
    fprintf('
    Partial fraction expansion method: 
    ');
    [R, p, c] = residuez(K*b,a)
    MR = (abs(R))'              % Residue  Magnitude
    AR = (angle(R))'/pi         % Residue  angles in pi units
    Mp = (abs(p))'              % pole  Magnitude
    Ap = (angle(p))'/pi         % pole  angles in pi units
    [delta, n] = impseq(0,0,50);
    h_chk = filter(K*b,a,delta);      % check sequences
    
    
    % ------------------------------------------------------------------------------------------------
    %                                gain parameter K=0.95  
    % ------------------------------------------------------------------------------------------------
    h =  ( 0.9.^n ) .* (-0.1056) + 1.0556 * delta;  
    % ------------------------------------------------------------------------------------------------
    
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.8 IIR hp filter, h(n) by filter and Inv-Z ')
    set(gcf,'Color','white'); 
    
    subplot(2,1,1); stem(n, h_chk); grid on; %axis([0 2 -60 10]); 
    xlabel('n'); ylabel('h\_chk'); title('Impulse Response sequences by filter');
    
    subplot(2,1,2); stem(n, h); grid on; %axis([0 1 -100 10]); 
    xlabel('n'); ylabel('h'); title('Impulse Response sequences by Inv-Z');
    
    
    [db, mag, pha, grd, w] = freqz_m(h, [1]);
    
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.8 IIR filter, h(n) by Inv-Z ')
    set(gcf,'Color','white'); 
    
    subplot(2,2,1); plot(w/pi, db); grid on; axis([0 2 -60 10]); 
    set(gca,'YTickMode','manual','YTick',[-60,-30,0])
    set(gca,'YTickLabelMode','manual','YTickLabel',['60';'30';' 0']);
    set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
    xlabel('frequency in pi units'); ylabel('Decibels'); title('Magnitude Response in dB');
    
    subplot(2,2,3); plot(w/pi, mag); grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Absolute'); title('Magnitude Response in absolute');
    set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
    set(gca,'YTickMode','manual','YTick',[0,1.0]);
    
    subplot(2,2,2); plot(w/pi, pha); grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Rad'); title('Phase Response in Radians');
    
    subplot(2,2,4); plot(w/pi, grd*pi/180);  grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Rad'); title('Group Delay');
    set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
    %set(gca,'YTickMode','manual','YTick',[0,1.0]);
    
    
    
    % --------------------------------------------------
    %               digital IIR comb filter
    % --------------------------------------------------
    b = K*[1  0  0  0  0  0  -1];
    a = [1  0  0  0  0  0  -0.9];
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.8 Pole-Zero Plot')
    set(gcf,'Color','white'); 
    zplane(b,a); 
    title(sprintf('Pole-Zero Plot'));
    
    
    [db, mag, pha, grd, w] = freqz_m(b, a);
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.8 IIR comb filter')
    set(gcf,'Color','white'); 
    
    subplot(2,2,1); plot(w/pi, db); grid on; axis([0 2 -60 10]); 
    set(gca,'YTickMode','manual','YTick',[-60,-30,0])
    set(gca,'YTickLabelMode','manual','YTickLabel',['60';'30';' 0']);
    set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
    xlabel('frequency in pi units'); ylabel('Decibels'); title('Magnitude Response in dB');
    
    subplot(2,2,3); plot(w/pi, mag); grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Absolute'); title('Magnitude Response in absolute');
    set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
    set(gca,'YTickMode','manual','YTick',[0,1.0]);
    
    subplot(2,2,2); plot(w/pi, pha); grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Rad'); title('Phase Response in Radians');
    
    subplot(2,2,4); plot(w/pi, grd*pi/180);  grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Rad'); title('Group Delay');
    set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
    %set(gca,'YTickMode','manual','YTick',[0,1.0]);
    
    
    
    % Impulse Response
    fprintf('
    ----------------------------------');
    fprintf('
    Partial fraction expansion method: 
    ');
    [R, p, c] = residuez(b,a)
    MR = (abs(R))'              % Residue  Magnitude
    AR = (angle(R))'/pi         % Residue  angles in pi units
    Mp = (abs(p))'              % pole  Magnitude
    Ap = (angle(p))'/pi         % pole  angles in pi units
    [delta, n] = impseq(0,0,250);
    h_chk = filter(b,a,delta);      % check sequences
    
    % ------------------------------------------------------------------------------------------------
    %                                gain parameter K=0.95  
    % ------------------------------------------------------------------------------------------------
    %h =  0.0211 * (( 0.9791.^n ) .* (2*cos(0.4*pi*n) + 2*cos(0.8*pi*n) + 1)) - 0.0556*delta;  %L=5;
    h =  -0.0176 * ( ( 0.9826.^n ) .* ( 2*cos(2*pi*n/3) + 2*cos(pi*n/3) + (-1).^n + 1) ) + 1.0556*delta;  %L=6;
    % ------------------------------------------------------------------------------------------------
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.8 Comb filter, h(n) by filter and Inv-Z ')
    set(gcf,'Color','white'); 
    
    subplot(2,1,1); stem(n, h_chk); grid on; %axis([0 2 -60 10]); 
    xlabel('n'); ylabel('h\_chk'); title('Impulse Response sequences by filter');
    
    subplot(2,1,2); stem(n, h); grid on; %axis([0 1 -100 10]); 
    xlabel('n'); ylabel('h'); title('Impulse Response sequences by Inv-Z');
    
    
    [db, mag, pha, grd, w] = freqz_m(h, [1]);
    
    
    figure('NumberTitle', 'off', 'Name', 'Problem 8.8 Comb filter, h(n) by Inv-Z ')
    set(gcf,'Color','white'); 
    
    subplot(2,2,1); plot(w/pi, db); grid on; axis([0 2 -60 10]); 
    set(gca,'YTickMode','manual','YTick',[-60,-30,0])
    set(gca,'YTickLabelMode','manual','YTickLabel',['60';'30';' 0']);
    set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
    xlabel('frequency in pi units'); ylabel('Decibels'); title('Magnitude Response in dB');
    
    subplot(2,2,3); plot(w/pi, mag); grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Absolute'); title('Magnitude Response in absolute');
    set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
    set(gca,'YTickMode','manual','YTick',[0,1.0]);
    
    subplot(2,2,2); plot(w/pi, pha); grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Rad'); title('Phase Response in Radians');
    
    subplot(2,2,4); plot(w/pi, grd*pi/180);  grid on; %axis([0 1 -100 10]); 
    xlabel('frequency in pi units'); ylabel('Rad'); title('Group Delay');
    set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
    %set(gca,'YTickMode','manual','YTick',[0,1.0]);
    

      运行结果:

           增益系数K

            单个iir高通滤波器,零极点图

            L=6阶梳状,系统函数部分分式展开

            零极点的模和幅角

            直接形式分子、分母系数直接求幅度谱、相位谱和群延迟

            依据梳状滤波器系统函数部分分式展开,求逆z变换得到脉冲响应序列,由其求幅度谱、相位谱和群延迟,如下

            直接形式求法和逆z变换求法,幅度谱、相位谱一致,但群延迟不同。

    牢记: 1、如果你决定做某事,那就动手去做;不要受任何人、任何事的干扰。2、这个世界并不完美,但依然值得我们去为之奋斗。
  • 相关阅读:
    PHP实现发送模板消息(微信公众号版)
    laravel 跨域问题
    微信授权登录
    支付demo2
    支付demo1
    微信支付注意点
    微信支付方式区分
    debian,dietpi,linux中文乱码解决方法
    嵌入式应该深入专研STM32还是继续学习linux内核驱动呢?
    arduino下载ESP8266开发板的方法
  • 原文地址:https://www.cnblogs.com/ky027wh-sx/p/10974359.html
Copyright © 2020-2023  润新知