代码:

  1. %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2. %% Output Info about this m-file
  3. fprintf('\n***********************************************************\n');
  4. fprintf(' <DSP using MATLAB> Problem 7.38 \n\n');
  5.  
  6. banner();
  7. %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  8.  
  9. % bandpass, PM method
  10. ws1 = 0.2*pi; wp1 = 0.35*pi; wp2 = 0.55*pi; ws2 = 0.75*pi;
  11. Rp = 0.25; As = 40;
  12. [delta1, delta2] = db2delta(Rp, As)
  13. deltaH = max(delta1,delta2); deltaL = min(delta1,delta2);
  14.  
  15. f = [ws1, wp1, wp2, ws2]/pi; m = [0, 1, 0]; delta = [delta2, delta1, delta2];
  16.  
  17. [N, f0, m0, weights] = firpmord(f, m, delta);
  18. fprintf('\n-------------------------------------------\n');
  19. fprintf('\n Results by firpmord function:\n');
  20. N
  21. %f0
  22. %m0
  23. %weights
  24. fprintf('\n-------------------------------------------\n');
  25.  
  26. weights = [delta1/delta2 1 delta1/delta2]
  27.  
  28. f = [ 0 ws1 wp1 wp2 ws2 pi]/pi;
  29. m = [ 0 0 1 1 0 0];
  30.  
  31. h = firpm(N, f, m, weights);
  32. M = N + 1
  33. [db, mag, pha, grd, w] = freqz_m(h, [1]);
  34. delta_w = 2*pi/1000;
  35. ws1i = floor(ws1/delta_w)+1; wp1i = floor(wp1/delta_w)+1;
  36. ws2i = floor(ws2/delta_w)+1; wp2i = floor(wp2/delta_w)+1;
  37.  
  38. Asd = -max(db(1:1:ws1i))
  39.  
  40. h = firpm(N+2, f, m, weights);
  41. M = N + 3
  42. [db, mag, pha, grd, w] = freqz_m(h, [1]);
  43. delta_w = 2*pi/1000;
  44. ws1i = floor(ws1/delta_w)+1; wp1i = floor(wp1/delta_w)+1;
  45. ws2i = floor(ws2/delta_w)+1; wp2i = floor(wp2/delta_w)+1;
  46.  
  47. Asd = -max(db(1:1:ws1i))
  48.  
  49. %[Hr, ww, a, L] = Hr_Type1(h);
  50. [Hr,omega,P,L] = ampl_res(h);
  51. l = 0:M-1;
  52.  
  53. delta_w = 2*pi/1000; sp_edge1 = ws1/delta_w+1; sp_edge2 = ws2/delta_w+1;
  54. %% -------------------------------------------------
  55. %% Plot
  56. %% -------------------------------------------------
  57.  
  58. figure('NumberTitle', 'off', 'Name', 'Problem 7.38')
  59. set(gcf,'Color','white');
  60.  
  61. subplot(2,2,1); stem(l, h); axis([-1, M, -0.4, 0.45]); grid on;
  62. xlabel('n'); ylabel('h(n)'); title('Actual Impulse Response, M=27');
  63. set(gca,'XTickMode','manual','XTick',[0,(M-1)/2,M-1]);
  64. set(gca,'YTickMode','manual','YTick',[-0.4:0.1:0.4]);
  65.  
  66. subplot(2,2,2); plot(w/pi, db); axis([0, 1, -80, 10]); grid on;
  67. xlabel('frequency in \pi units'); ylabel('Decibels'); title('Magnitude Response in dB ');
  68. set(gca,'XTickMode','manual','XTick',f)
  69. set(gca,'YTickMode','manual','YTick',[-60,-40,0]);
  70. set(gca,'YTickLabelMode','manual','YTickLabels',['60';'40';' 0']);
  71.  
  72. subplot(2,2,3); plot(omega/pi, Hr); axis([0, 1, -0.2, 1.2]); grid on;
  73. xlabel('frequency in \pi nuits'); ylabel('Hr(\omega)'); title('Amplitude Response');
  74. set(gca,'XTickMode','manual','XTick',f)
  75. set(gca,'YTickMode','manual','YTick',[0,1]);
  76.  
  77. subplot(2,2,4); axis([0, 1, -deltaH, deltaH]);
  78. sb1w = omega(1:1:ws1i)/pi; sb1e = Hr(1:1:ws1i)-m(1); %sb1e = (Hr(1:1:ws1i)-m(1))*weights(1);
  79. pbw = omega(wp1i:wp2i)/pi; pbe = Hr(wp1i:wp2i)-m(3); %pbe = (Hr(wp1i:wp2i)-m(3))*weights(2);
  80. sb2w = omega(ws2i:501)/pi; sb2e = Hr(ws2i:501)-m(5); %sb2e = (Hr(ws2i:501)-m(5))*weights(3);
  81.  
  82. plot(sb1w,sb1e,pbw,pbe,sb2w,sb2e); grid on; % error
  83.  
  84. %axis([0, 1, -deltaL-0.02, deltaL+0.02]); grid on;
  85. xlabel('frequency in \pi units'); ylabel('Hr(\omega)'); title('Error Response'); %title('Weighted Error');
  86.  
  87. set(gca,'XTickMode','manual','XTick',f)
  88. set(gca,'YTickMode','manual','YTick',[-deltaH, 0, deltaH]);
  89. %set(gca,'XGrid','on','YGrid','on')
  90.  
  91. figure('NumberTitle', 'off', 'Name', 'Problem 7.38 AmpRes of h(n), Parks-McClellan Method')
  92. set(gcf,'Color','white');
  93.  
  94. plot(omega/pi, Hr); grid on; %axis([0 1 -100 10]);
  95. xlabel('frequency in \pi units'); ylabel('Hr(\omega)'); title('Amplitude Response');
  96. set(gca,'YTickMode','manual','YTick',[-delta2,delta2, 1 - delta1, 1 + delta1]);
  97. set(gca,'XTickMode','manual','XTick',f);

  运行结果:

运用Parks-McClellen算法,滤波器长度M=27,比较合适

脉冲响应、幅度谱和误差函数

振幅谱

下面是P7.9的结果,可看出,P-M法得到的长度(M=27)比窗函数(M=43)得到的小得多。

第7章终于弄完了,内心小欢喜一下,放一张田地的照片放松放松,明天开始第8章!

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

  1. 《DSP using MATLAB》Problem 5.38

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

  2. 《DSP using MATLAB》Problem 8.38

    代码: function [wpLP, wsLP, alpha] = bp2lpfre(wpbp, wsbp) % Band-edge frequency conversion from bandpa ...

  3. 《DSP using MATLAB》Problem 7.27

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

  4. 《DSP using MATLAB》Problem 7.26

    注意:高通的线性相位FIR滤波器,不能是第2类,所以其长度必须为奇数.这里取M=31,过渡带里采样值抄书上的. 代码: %% +++++++++++++++++++++++++++++++++++++ ...

  5. 《DSP using MATLAB》Problem 7.25

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

  6. 《DSP using MATLAB》Problem 7.24

    又到清明时节,…… 注意:带阻滤波器不能用第2类线性相位滤波器实现,我们采用第1类,长度为基数,选M=61 代码: %% +++++++++++++++++++++++++++++++++++++++ ...

  7. 《DSP using MATLAB》Problem 7.23

    %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output Info a ...

  8. 《DSP using MATLAB》Problem 7.16

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

  9. 《DSP using MATLAB》Problem 7.15

    用Kaiser窗方法设计一个台阶状滤波器. 代码: %% +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

随机推荐

  1. javascript面向对象编程笔记(基本数据类型,数组,循环及条件表达式)

    javascript面向对象编程指南 最近在看这本书,以下是我的笔记,仅供参考. 第二章 基本数据类型.数组.循环及条件表达式 2.1 变量 区分大小写 2.3 基本数据类型 数字:包括浮点数与整数 ...

  2. XSS攻击原理

    本文转载的地址:http://www.2cto.com/Article/201209/156182.html Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意h ...

  3. sql server 的存储过程

    存储过程说白了就是一堆 SQL 的合并.中间加了点逻辑控制. 存储过程运行流程 创建不带参数存储过程 --创建存储过程 if (exists (select * from sys.objects wh ...

  4. 新建Application 报错android.app.Application cannot be cast

    我在开发APP的时候重新使用了一个类,继承了android.app.Application.但是在运行的时候提示java.lang.ClassCastException: android.app.Ap ...

  5. Java学习 时间类 Period类与Duration类 / LocalDate类与Instant类 用法详解

    前言 java 8 中引入的两个与日期相关的新类:Period 和 Duration.两个类看表示时间量或两个日期之间的差,两者之间的差异为:Period基于日期值,而Duration基于时间值.他们 ...

  6. String str = new String("abc"),这段代码一共生成了几个String对象?为什么?

    String str = new String("abc")创建了俩个对象,首先为创建一个String对象"abc",然后在调用String类的构造方法时 pu ...

  7. 0926CSP-S模拟测试赛后总结

    又一次垫底.持续低迷.20分. 赛时状态还可以.但是过于保守而不思进取.三道题目打了暴力就滚粗了. 暴力还挂掉了. T1暴力因为开小了数组挂成了0.1000的点,子序列个数我开了1e5以为足够了.结果 ...

  8. layui弹框文件导入

    lr.ajax({ type : "post", data :formFile, url : importUrl, contentType: false,// 且已经声明了属性en ...

  9. Java 对系统信号的通知获取

    主要介绍Java 如何对系统信号通知进行获取和处理.直接上demo @SuppressWarnings("restriction")public class Test1 imple ...

  10. Unity3D Input 键盘控制

    function Update (){ //Input.GetKey ("down") == Input.GetKey(KeyCode.DownArrow) if (Input.G ...