代码:

  1. %% ------------------------------------------------------------------------
  2. %% Output Info about this m-file
  3. fprintf('\n***********************************************************\n');
  4. fprintf(' <DSP using MATLAB> Problem 8.11 \n\n');
  5. banner();
  6. %% ------------------------------------------------------------------------
  7.  
  8. %d = 0.10
  9. %d = 0.05
  10. d = 0.01
  11.  
  12. a1 = (2-d)/(1+d);
  13. a2 = (2-d)*(1-d)/((2+d)*(1+d));
  14.  
  15. % digital IIR 2nd-order allpass filter
  16. b = [a2 a1 1]
  17. a = [1 a1 a2]
  18.  
  19. figure('NumberTitle', 'off', 'Name', 'Problem 8.11 Pole-Zero Plot')
  20. set(gcf,'Color','white');
  21. zplane(b,a);
  22. title(sprintf('Pole-Zero Plot, d=%.2f',d));
  23. %pzplotz(b,a);
  24.  
  25. [db, mag, pha, grd, w] = freqz_m(b, a);
  26.  
  27. % ---------------------------------------------------------------------
  28. % Choose the gain parameter of the filter, maximum gain is equal to 1
  29. % ---------------------------------------------------------------------
  30. gain1=max(mag) % with poles
  31. K = 1
  32. [db, mag, pha, grd, w] = freqz_m(K*b, a);
  33.  
  34. figure('NumberTitle', 'off', 'Name', 'Problem 8.11 IIR allpass filter')
  35. set(gcf,'Color','white');
  36.  
  37. subplot(2,2,1); plot(w/pi, db); grid on; axis([0 2 -60 10]);
  38. set(gca,'YTickMode','manual','YTick',[-60,-30,0])
  39. set(gca,'YTickLabelMode','manual','YTickLabel',['60';'30';' 0']);
  40. set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
  41. xlabel('frequency in \pi units'); ylabel('Decibels'); title('Magnitude Response in dB');
  42.  
  43. subplot(2,2,3); plot(w/pi, mag); grid on; %axis([0 1 -100 10]);
  44. xlabel('frequency in \pi units'); ylabel('Absolute'); title('Magnitude Response in absolute');
  45. set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
  46. set(gca,'YTickMode','manual','YTick',[0,1.0]);
  47.  
  48. subplot(2,2,2); plot(w/pi, pha); grid on; %axis([0 1 -100 10]);
  49. xlabel('frequency in \pi units'); ylabel('Rad'); title('Phase Response in Radians');
  50.  
  51. subplot(2,2,4); plot(w/pi, grd*pi/180); grid on; %axis([0 1 -100 10]);
  52. xlabel('frequency in \pi units'); ylabel('Rad'); title('Group Delay');
  53. set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
  54. %set(gca,'YTickMode','manual','YTick',[0,1.0]);
  55.  
  56. figure('NumberTitle', 'off', 'Name', 'Problem 8.11 IIR allpass filter')
  57. set(gcf,'Color','white');
  58. plot(w/pi, -pha/w); grid on; %axis([0 1 -100 10]);
  59. xlabel('frequency in \pi units'); ylabel('Rad'); title('Phase Delay in samples');
  60.  
  61. % Impulse Response
  62. fprintf('\n----------------------------------');
  63. fprintf('\nPartial fraction expansion method: \n');
  64. [R, p, c] = residuez(K*b,a)
  65. MR = (abs(R))' % Residue Magnitude
  66. AR = (angle(R))'/pi % Residue angles in pi units
  67. Mp = (abs(p))' % pole Magnitude
  68. Ap = (angle(p))'/pi % pole angles in pi units
  69. [delta, n] = impseq(0,0,20);
  70. h_chk = filter(K*b,a,delta); % check sequences
  71.  
  72. % ------------------------------------------------------------------------------------------------
  73. % gain parameter K
  74. % ------------------------------------------------------------------------------------------------
  75. %h = 0.2202 * ((-0.9385) .^ n) + (-0.8308) * ((-0.7887) .^ n) + 1.3509 * delta; %d=0.1
  76. %h = 0.1099 * ((-0.9688) .^ n) + (-0.4112) * ((-0.8884) .^ n) + 1.1619 * delta; %d=0.05
  77. h = 0.0220 * ((-0.9937) .^ n) + (-0.0820) * ((-0.9766) .^ n) + 1.0305 * delta; %d=0.01
  78. % ------------------------------------------------------------------------------------------------
  79.  
  80. figure('NumberTitle', 'off', 'Name', 'Problem 8.11 IIR allpass filter, h(n) by filter and Inv-Z ')
  81. set(gcf,'Color','white');
  82.  
  83. subplot(2,1,1); stem(n, h_chk); grid on; %axis([0 2 -60 10]);
  84. xlabel('n'); ylabel('h\_chk'); title('Impulse Response sequences by filter');
  85.  
  86. subplot(2,1,2); stem(n, h); grid on; %axis([0 1 -100 10]);
  87. xlabel('n'); ylabel('h'); title('Impulse Response sequences by Inv-Z');
  88.  
  89. [db, mag, pha, grd, w] = freqz_m(h, [1]);
  90.  
  91. figure('NumberTitle', 'off', 'Name', 'Problem 8.11 IIR filter, h(n) by Inv-Z ')
  92. set(gcf,'Color','white');
  93.  
  94. subplot(2,2,1); plot(w/pi, db); grid on; axis([0 2 -60 10]);
  95. set(gca,'YTickMode','manual','YTick',[-60,-30,0])
  96. set(gca,'YTickLabelMode','manual','YTickLabel',['60';'30';' 0']);
  97. set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
  98. xlabel('frequency in \pi units'); ylabel('Decibels'); title('Magnitude Response in dB');
  99.  
  100. subplot(2,2,3); plot(w/pi, mag); grid on; %axis([0 1 -100 10]);
  101. xlabel('frequency in \pi units'); ylabel('Absolute'); title('Magnitude Response in absolute');
  102. set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
  103. set(gca,'YTickMode','manual','YTick',[0,1.0]);
  104.  
  105. subplot(2,2,2); plot(w/pi, pha); grid on; %axis([0 1 -100 10]);
  106. xlabel('frequency in \pi units'); ylabel('Rad'); title('Phase Response in Radians');
  107.  
  108. subplot(2,2,4); plot(w/pi, grd*pi/180); grid on; %axis([0 1 -100 10]);
  109. xlabel('frequency in \pi units'); ylabel('Rad'); title('Group Delay');
  110. set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
  111. %set(gca,'YTickMode','manual','YTick',[0,1.0]);

  运行结果:

这里放d=0.1的运行结果。

二阶全通滤波器的留数、极点

系统零极点图,可以看出,两个零点都在单位圆外,幅角为π

方法一,利用系统函数直接形式,将脉冲序列做输入,得到脉冲响应h,得到系统幅度谱、相位谱和群延迟,如下图

方法二,将二阶全通系统函数部分分式展开,然后查表求逆z变换,得到脉冲响应h_chk

幅度谱、相位谱和群延迟,可以看到,ω=π时,幅度有衰减

可见,两种方法得到的脉冲响应h有区别,我们将各自前21个元素列出来,方框处二者稍有区别。

但,为何有区别,没搞懂,欢迎各位博友不吝赐教。

《DSP using MATLAB》Problem 8.11的更多相关文章

  1. 《DSP using MATLAB》Problem 7.11

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  2. 《DSP using MATLAB》Problem 6.11

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  3. 《DSP using MATLAB》Problem 5.11

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  4. 《DSP using MATLAB》Problem 4.11

    代码: %% ---------------------------------------------------------------------------- %% Output Info a ...

  5. 《DSP using MATLAB》Problem 7.16

    使用一种固定窗函数法设计带通滤波器. 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  6. 《DSP using MATLAB》Problem 7.6

    代码: 子函数ampl_res function [Hr,w,P,L] = ampl_res(h); % % function [Hr,w,P,L] = Ampl_res(h) % Computes ...

  7. 《DSP using MATLAB》Problem 5.21

    证明: 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  8. 《DSP using MATLAB》Problem 5.20

    窗外的知了叽叽喳喳叫个不停,屋里温度应该有30°,伏天的日子难过啊! 频率域的方法来计算圆周移位 代码: 子函数的 function y = cirshftf(x, m, N) %% -------- ...

  9. 《DSP using MATLAB》Problem 5.14

    说明:这两个小题的数学证明过程都不会,欢迎博友赐教. 直接上代码: %% +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

随机推荐

  1. Maven IntelliJ IDEA设置

    参考:博客地址: https://blog.csdn.net/huo920/article/details/82082403 Maven常用配置 在配置之前请将JDK安装好. 1. 环境变量配置 添加 ...

  2. ES6 学习 -- Class继承

    (1)如何继承Class可以通过extends关键字实现继承,如下:class Father { } class Child extends Father { }// 这里子类Child继承父类Fat ...

  3. 【学术篇】SPOJ QTREE 树链剖分

    发现链剖这东西好久不写想一遍写对是有难度的.. 果然是熟能生巧吧.. WC的dalao们都回来了 然后就用WC的毒瘤题荼毒了我们一波, 本来想打个T1 44分暴力 然后好像是特判写挂了还是怎么的就只能 ...

  4. WPF 新突破

    刘琦告诉我  需要改变哪个属性哪个属性就需要实现InotifyPropertyChanged 董秀伟告诉我  界面改变会立即传输到属性上,并不需要实现InotifyPropertyChanged,只有 ...

  5. 配置类一@CrossOrigin

    @CrossOrigin是用来处理跨域请求的注解 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制. 所谓同源是指,域名,协议,端口 ...

  6. js面试总结3

    异步和单线程 题目: 1.同步和异步的区别? 2.一个关于setTimeout的笔试题. 3.前段使用异步的场景有哪些? 什么是异步? console.log(100) setTimeout(func ...

  7. duilib库分析1.消息流程分析

    看下CWindowWnd类与CPaintManagerUI类是咋进行消息分发的吧. 1. 先看下CPaintManagerUI类的MessageLoop函数: void CPaintManagerUI ...

  8. LUOGU P2261 [CQOI2007]余数求和(数论分块)

    传送门 解题思路 数论分块,首先将 \(k\%a\) 变成 \(k-a*\left\lfloor\dfrac{k}{a}\right\rfloor\)形式,那么\(\sum\limits_{i=1}^ ...

  9. day 69 Django基础五之django模型层(一)单表操作

    Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...

  10. 万恶之源-python介绍

    PATH OF PYTHON (生命短暂,我要学pythonヾ(◍°∇°◍)ノ゙) 一.Python介绍: 简史:Python诞生于1989年的圣诞节, 创始人为Guido van Rossum, 又 ...